a
    1$eB                     @   s   d Z ddlZddlZddlZddlmZ dddddddd	d
dddZdd e D Zdd e D Z	G dd dZ
ejddG dd de
ZejddG dd de
Zdd Zdd ZdS )z)Dataset paths, identifiers, and filenames    N)urlparsecurlgzips3tarzipfilegsossaz)ftpr   httphttpsr   r   r   r   r	   r
   r   c                 C   s   h | ]\}}|d kr|qS )r    .0kvr   r   F/var/www/html/django/DPS/env/lib/python3.9/site-packages/fiona/path.py	<setcomp>       r   c                 C   s   h | ]\}}|d v r|qS ))r   r   r	   r
   r   r   r   r   r   r   r      s   c                   @   s   e Zd ZdZdS )PathzBase class for dataset pathsN)__name__
__module____qualname____doc__r   r   r   r   r   "   s   r   T)slotsc                   @   sX   e Zd ZdZe Ze Ze Ze	dd Z
edd Zedd Zedd	 Zd
S )
ParsedPatha!  Result of parsing a dataset URI/Path

    Attributes
    ----------
    path : str
        Parsed path. Includes the hostname and query string in the case
        of a URI.
    archive : str
        Parsed archive path.
    scheme : str
        URI scheme such as "https" or "zip+s3".
    c                 C   sx   t |}|j}|jpd }|jr,|d|j 7 }|jrB|jrB|j| }|d}|rX| nd }|rh| nd }t|||S )N?!)r   pathschemequerynetlocsplitpopr   )clsuripartsr    r!   archiver   r   r   from_uri8   s    


zParsedPath.from_uric                 C   sB   | j s| jS | jr,| j  d| j d| j S | j  d| j S dS )zThe parsed path's original URIz://r   N)r!   r    r)   selfr   r   r   nameI   s
    zParsedPath.namec                 C   s   | j o| j dd tv S )z)Test if the path is a remote, network URI+r!   r$   REMOTESCHEMESr+   r   r   r   	is_remoteS   s    zParsedPath.is_remotec                 C   s"   | j  p | j o | j dd tvS )zTest if the path is a local URIr.   r/   r0   r+   r   r   r   is_localX   s    zParsedPath.is_localN)r   r   r   r   attribr    r)   r!   classmethodr*   propertyr-   r2   r3   r   r   r   r   r   &   s   

	
r   c                   @   s$   e Zd ZdZe Zedd ZdS )UnparsedPathzwEncapsulates legacy GDAL filenames

    Attributes
    ----------
    path : str
        The legacy GDAL filename.
    c                 C   s   | j S )z!The unparsed path's original path)r    r+   r   r   r   r-   i   s    zUnparsedPath.nameN)	r   r   r   r   r4   r5   r    r7   r-   r   r   r   r   r8   ^   s   r8   c                 C   s   t | tr| S tjdkr,td| r,t| S | dr>t| S td| rt| }|j	rzt
dd |j	dD szt| S t| S nt| S dS )	aC  Parse a dataset's identifier or path into its parts

    Parameters
    ----------
    path : str or path-like object
        The path to be parsed.

    Returns
    -------
    ParsedPath or UnparsedPath

    Notes
    -----
    When legacy GDAL filenames are encountered, they will be returned
    in a UnparsedPath.
    win32z^[a-zA-Z]\:z/vsiz^[a-z0-9\+]*://c                 s   s   | ]}|t v V  qd S )NSCHEMESr   pr   r   r   	<genexpr>   r   zparse_path.<locals>.<genexpr>r.   N)
isinstancer   sysplatformrematchr8   
startswithr   r!   allr$   r   r*   )r    r(   r   r   r   
parse_patho   s    

 rF   c                 C   s   t | tr| jS t | tr| js&| jS | jdd tv rRd| jdd }nd}ddd | jdD }|r| j	rd||| j	| j
d}qd| d| | j }n| j}|S ntd	d
S )zConvert a parsed path to a GDAL VSI path

    Parameters
    ----------
    path : Path
        A ParsedPath or UnparsedPath object.

    Returns
    -------
    str
    r.   r/   z{}:// /c                 s   s$   | ]}|d krdt |  V  qdS )r   ZvsiNr:   r<   r   r   r   r>      r   zvsi_path.<locals>.<genexpr>z/{}/{}{}/{}z0path must be a ParsedPath or UnparsedPath objectN)r?   r8   r    r   r!   r$   CURLSCHEMESformatjoinr)   lstrip
ValueError)r    suffixprefixresultr   r   r   vsi_path   s     

rQ   )r   rB   r@   r4   urllib.parser   r;   itemsrI   r1   r   sr   r8   rF   rQ   r   r   r   r   <module>   s6   
7
+