o
    ADi3@                     @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl	mZ d dl	mZ d dl	mZ d dl	mZ d d	l	mZ d d
lmZ d dlmZ ejdkrYd dl	mZ neZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dl"m#Z# d dl"m$Z$ e
rd dl%m&Z& g dZ'eZ(de)d< ee*df Z+de)d< G dd  d e Z,G d!d" d"eZ-G d#d$ d$Z.e.e,Z/G d%d& d&Z0d4d*d+Z1d5d.d/Z2d6d2d3Z3dS )7    )annotationsN)	lru_cache)TYPE_CHECKING)Any)Mapping)Sequence)	TypedDict)Union)SplitResult)urlsplit      )	TypeAlias)known_implementations)registry)AbstractFileSystem)
deprecated)str_remove_prefix)str_remove_suffix)FileSystemFlavourBase)flavour_registry)get_upath_protocol)normalize_empty_netloc)UPath)LazyFlavourDescriptordefault_flavourupath_urijoinupath_get_kwargs_from_urlz&Mapping[str, type[AbstractFileSystem]]class_registryzos.PathLike[str]r   	PathOrStrc                   @  s@   e Zd ZdZdZdZedddZedd	d
Z	edd Z
dS )AnyProtocolFileSystemFlavour/ pathstrreturnc                 C  sb   t |}||d r|t|d d  }n||d r'|t|d d  }|d}|p0| jS )Nz://r   z::   r"   )r   
startswithlenrstriproot_marker)clsr$   protocolr#   r#   G/var/www/Datamplify/venv/lib/python3.10/site-packages/upath/_flavour.py_strip_protocol5   s   

z,AnyProtocolFileSystemFlavour._strip_protocoldict[str, Any]c                 C  s   i S Nr#   r$   r#   r#   r.   _get_kwargs_from_urls?      z2AnyProtocolFileSystemFlavour._get_kwargs_from_urlsc                 C  s:   |  |}d|v r|ddd | j}| j| S | jS )Nr"      r   )r/   rsplitlstripr+   )r,   r$   parentr#   r#   r.   _parentC   s
   

z$AnyProtocolFileSystemFlavour._parentN)r$   r%   r&   r%   )r$   r%   r&   r0   )__name__
__module____qualname__sepr-   r+   classmethodr/   staticmethodr3   r9   r#   r#   r#   r.   r!   0   s    	r!   c                   @  s.   e Zd ZU ded< ded< ded< ded< dS )ProtocolConfigzset[str]netloc_is_anchorsupports_empty_partsmeaningful_trailing_slashzdict[str, str]root_marker_overrideN)r:   r;   r<   __annotations__r#   r#   r#   r.   r@   M   s
   
 r@   c                   @  sZ  e Zd ZU dZh dh dddhddddZd	ed
< ddddddYddZeedddZddZ	dd Z
ed[d!d"Zed\d#d$Zed]d%d&Zed^d)d*Zd^d+d,Zd_d/d0Zd`d2d3Zed\d4d5Zedad6d7Zdbd8d9Zdcd;d<Zddd=d>Zded@dAZd`dBdCZdfdEdFZedGdHdgdJdKZedGdHdhdOdPZedGdHdidWdXZdS )jWrappedFileSystemFlavoura  flavour class for universal_pathlib

    **INTERNAL AND VERY MUCH EXPERIMENTAL**

    Implements the fsspec compatible low-level lexical operations on
    PurePathBase-like objects.

    Note:
        In case you find yourself in need of subclassing this class,
        please open an issue in the universal_pathlib issue tracker:
        https://github.com/fsspec/universal_pathlib/issues
        Ideally we can find a way to make your use-case work by adding
        more functionality to this class.

    >   webdav+httpwebdav+httpsazgss3adlgcss3asmbabfshttpabfsshttps>	   rI   rJ   rK   rL   rM   rN   rP   rQ   rS   rQ   rS   r"   )sshsftprA   rB   rC   rD   r@   protocol_configFNspecEtype[AbstractFileSystem | FileSystemFlavourBase] | AbstractFileSystemrA   boolrB   rC   rD   
str | Noner&   Nonec                C  sD   || _ t|| _t|| _t|| _|du rd| _dS t|| _dS )z,initialize the flavour with the given fsspecN)_specrZ   rA   rB   has_meaningful_trailing_slashrD   r%   )selfrX   rA   rB   rC   rD   r#   r#   r.   __init__   s   




z!WrappedFileSystemFlavour.__init__)maxsizer-   r%   c                 C  s   | j }||d v ||d v ||d v |d |d}z| t| fi |W S  ty/   Y nw z| t| fi |W S  tyD   Y nw |tv rUtjd|dtdd	 | t	fi |S )
z0return the fsspec flavour for the given protocolrA   rB   rC   rD   rV   z*Could not find default for known protocol z_. Creating a default flavour for it. Please report this to the universal_pathlib issue tracker.r'   )
stacklevel)
rW   getr   KeyErrorr   r   warningswarnUserWarningr!   )r,   r-   _cconfigr#   r#   r.   from_protocol   s.   



z&WrappedFileSystemFlavour.from_protocolc                 C  s.   t | jtrd| jj dS d| jjj dS )Nz<wrapped class >z<wrapped instance )
isinstancer]   typer:   	__class__r_   r#   r#   r.   __repr__   s   z!WrappedFileSystemFlavour.__repr__tuple[str, ...]c                 C  s    t | jjtr| jjfS | jjS r1   )rl   r]   r-   r%   ro   r#   r#   r.   r-      s   
z!WrappedFileSystemFlavour.protocolc                 C  s   | j d ur| j S | jjS r1   )rD   r]   r+   ro   r#   r#   r.   r+      s   
z$WrappedFileSystemFlavour.root_markerc                 C  s   t t| jddS )N
local_fileF)rZ   getattrr]   ro   r#   r#   r.   rr      s   z#WrappedFileSystemFlavour.local_filepthr    c                 C  sz   t | tr| }t|S t| dd d ur|  }t|S t | tjr)t| }t|S t| dr5| j}t|S t| }t|S )N
__fspath__r$   )	rl   r%   rs   ru   osPathLikehasattrr$   r   )rt   outr#   r#   r.   stringify_path   s   
	
z'WrappedFileSystemFlavour.stringify_pathc                 C     |  |}| j|S r1   )rz   r]   r/   )r_   rt   r#   r#   r.   strip_protocol      
z'WrappedFileSystemFlavour.strip_protocolurlr0   c                 C  s*   t |dr
t|jS | |}| j|S )Nstorage_options)rx   dictr   rz   r]   r3   )r_   r~   r#   r#   r.   get_kwargs_from_url  s   


z,WrappedFileSystemFlavour.get_kwargs_from_urlr$   c                 C  r{   r1   )rz   r]   r9   r_   r$   r#   r#   r.   r8   
  r}   zWrappedFileSystemFlavour.parentc                 C  s   | j jS r1   )r]   r=   ro   r#   r#   r.   r=     s   zWrappedFileSystemFlavour.sepc                 C  s   d S r1   r#   ro   r#   r#   r.   altsep  r4   zWrappedFileSystemFlavour.altsepc                 C  s(   |  |}| jrtj|S || jS r1   )r|   rr   rv   r$   isabsr(   r+   r   r#   r#   r.   r     s   
zWrappedFileSystemFlavour.isabspathsc                 G  s   | j r'| |\}}tt| j|}|s!|s!|^}}| |\}}|p%| j}nt| |p0| j}tt| j|}d}| j	rM|| j
t|| jg| S |tj
|g|R   S N )rA   
splitdrivelistmaprz   r=   r%   r|   r+   rB   joinr   	posixpath)r_   r$   r   drvp0pNr#   r#   r.   r     s   zWrappedFileSystemFlavour.joinc                 C  s>   |  |}| |p| j}|r||t|d d  fS d|fS )Nr5   r   )r|   r8   r+   r)   )r_   r$   stripped_pathheadr#   r#   r.   split0  s
   
zWrappedFileSystemFlavour.splittuple[str, str]c                 C  s   |  |}| jrSt|}|jrD|jdddd }|jddd }|jdr:tddddd dkr:|dd  }||pB| j	pB| j
fS || j
\}}}||| fS | jr\tj|S d|fS )Nr   )r$   queryfragment)schemenetlocz//z////r'   )r|   rA   r   r   _replacegeturlr$   r(   r
   r+   r=   	partitionrr   rv   r   )r_   r$   udriverestroottailr#   r#   r.   r   8  s    

z#WrappedFileSystemFlavour.splitdrivec                 C  s"   | j rtj| |S | |S r1   )rr   rv   r$   normcaserz   r   r#   r#   r.   r   Q  s   
z!WrappedFileSystemFlavour.normcasetuple[str, str, str]c                 C  s:   |  |\}}| jr| jp| j}n| j}||t|| jfS r1   )r   rA   r+   r=   r   )r_   r$   r   r   r+   r#   r#   r.   	splitrootY  s
   z"WrappedFileSystemFlavour.splitrootr   )python_versionsc                 C  s   | j r|S | S r1   )rr   lower)r_   r   r#   r#   r.   casefoldc  s   z!WrappedFileSystemFlavour.casefoldpartsSequence[str]tuple[str, str, list[str]]c           
      C  s   g }| j }d }}t|}|D ]$}|r3| |\}}}|r!|r3|r3t||D ]
}	|t|	 q(q|s8|r?|||  |  |||fS r   )r=   reversedr   r   appendsysinternreverse)
r_   r   parsedr=   r   r   itpartrelxr#   r#   r.   parse_partsj  s   
z$WrappedFileSystemFlavour.parse_partsr   r   	list[str]drv2root2parts2c                 C  sz   |r|s|r|||| g|dd   fS n#|r1||ks%|  ||  |kr0||||dd   fS n|||| fS |||fS )Nr5   )r   )r_   r   r   r   r   r   r   r#   r#   r.   join_parsed_parts{  s   

z*WrappedFileSystemFlavour.join_parsed_parts)rX   rY   rA   rZ   rB   rZ   rC   rZ   rD   r[   r&   r\   )r-   r%   r&   rF   )r&   rq   )r&   r%   )r&   rZ   rt   r    r&   r%   r~   r    r&   r0   )r$   r    r&   r%   )r&   r[   )r$   r    r&   rZ   )r$   r    r   r    r&   r%   )r$   r    )r$   r    r&   r   )r$   r    r&   r   )r   r%   r&   r%   )r   r   r&   r   )r   r%   r   r%   r   r   r   r%   r   r%   r   r   r&   r   ) r:   r;   r<   __doc__rW   rE   r`   r>   r   rj   rp   propertyr-   r+   rr   r?   rz   r|   r   r8   r=   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r#   r.   rF   T   s^   
 )!$









rF   c                   @  s6   e Zd ZdZdddZdd
dZdddZdd ZdS )r   z9descriptor to lazily get the flavour for a given protocolr&   r\   c                 C  s
   d | _ d S r1   )_ownerro   r#   r#   r.   r`     s   
zLazyFlavourDescriptor.__init__ownertype[UPath]namer%   c              	   C  s>   || _ |  z
| j jd | _W d S  ttfy   d | _Y d S w )Nr   )r   	protocols_default_protocolAttributeError
IndexError)r_   r   r   r#   r#   r.   __set_name__  s   z"LazyFlavourDescriptor.__set_name__instancer   rF   c                 C  s*   |d ur
t |jS | jrt | jS tS r1   )rF   rj   r-   r   r   )r_   r   r   r#   r#   r.   __get__  s
   zLazyFlavourDescriptor.__get__c                 C  s8   t | j }| jd u rd| dS d| d| jj dS )Nz	<unbound rk   <z of )rm   r:   r   )r_   cls_namer#   r#   r.   rp     s   
zLazyFlavourDescriptor.__repr__N)r&   r\   )r   r   r   r%   r&   r\   )r   r   r   r   r&   rF   )r:   r;   r<   r   r`   r   r   rp   r#   r#   r#   r.   r     s    


	r   rt   r&   r%   c                 C  s&   t |  }rt|| S t| S r1   )r   rF   rj   r|   rz   )rt   r-   r#   r#   r.   upath_strip_protocol  s   
r   r~   r0   c                 C  s    t |  }rt|| S i S r1   )r   rF   rj   r   )r~   r-   r#   r#   r.   r     s   r   baseuric              	   C  sr  | s|S |s| S t | dd}t ||jd}|j|jkr|S |jr$| S |j|jd}|jsH|jsH|j|j|jd}|jsD|j|jd}| S |jd}|d dkrW|d= |jdd	 dkrg|jd}n||jd }t	d|d	d |d	d< g }|D ] }|d
krz|
  W q ty   Y qw |dkrq|| q|d dv r|d |jd|pdd S )zaJoin a base URI and a possibly relative URI to form an absolute
    interpretation of the latter.r   )r   )r   )r$   r   )r   r"   Nr5   ...)r   r   r2   )r   r   r   r   r   r$   r   r   r   filterpopr   r   r   )r   r   bsus
base_partssegmentsresolved_pathsegr#   r#   r.   r     sJ   

r   r   r   )r   r%   r   r%   r&   r%   )4
__future__r   os.pathrv   r   r   re   	functoolsr   typingr   r   r   r   r   r	   urllib.parser
   r   version_infor   fsspec.registryr   r   _class_registryfsspec.specr   upath._compatr   r   r   upath._flavour_sourcesr   r   upath._protocolr   r   
upath.corer   __all__r   rE   r%   r    r!   r@   rF   r   r   r   r   r   r#   r#   r#   r.   <module>   sT    
  @

