a
    b3j*                     @  s  d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZ e	rd dlZd dlmZ ejdkrxd dlmZ nd dlmZ g dZd	d
ddZedZG dd deZededZdddddZdddddddZdddddddZdd dd!d"d#d$Zed%Zdd&dd'd(d)Zdd&dd*d+d,ZG d-d. d.eZ G d/d0 d0e Z!ej"d1d2d3G d4d5 d5Z#ej"d1d2d3G d6d7 d7Z$ej"d1d2d3G d8d9 d9Z%ej"d1d2d3G d:d; d;Z&dS )<    )annotationsN)Mapping)TYPE_CHECKINGAnyProtocolTypeVar)
Collection)      )Self)ArchiveInfoDirInfo	DirectUrlDirectUrlValidationErrorVcsInfoz	list[str]returnc                   C  s   t S N)__all__ r   r   q/www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/packaging/direct_url.py__dir__   s    r   _Tc                   @  s    e Zd ZedddddZdS )_FromMappingProtocolMapping[str, Any]r   dr   c                 C  s   d S r   r   clsr   r   r   r   
_from_dict#   s    z_FromMappingProtocol._from_dictN)__name__
__module____qualname__classmethodr   r   r   r   r   r   "   s   r   _FromMappingProtocolT)boundzlist[tuple[str, Any]]zdict[str, Any])datar   c                 C  s   dd | D S )Nc                 S  s   i | ]\}}|d ur||qS r   r   ).0keyvaluer   r   r   
<dictcomp>+       z&_json_dict_factory.<locals>.<dictcomp>r   )r&   r   r   r   _json_dict_factory*   s    r,   r   ztype[_T]strz	_T | None)r   expected_typer(   r   c                 C  sF   |  | }du rdS t||sBtdt|j d|j d|d|S )zBGet a value from the dictionary and verify it's the expected type.NzUnexpected type z (expected )context)get
isinstancer   typer    r   r.   r(   r)   r   r   r   _get.   s    
r6   c                 C  s    t | || }du rt||S )zKGet a required value from the dictionary and verify it's the expected type.N)r6   _DirectUrlRequiredKeyErrorr5   r   r   r   _get_required;   s    r8   ztype[_FromMappingProtocolT]z_FromMappingProtocolT | None)r   target_typer(   r   c              
   C  s\   t | t| }du rdS z||W S  tyV } zt||d|W Y d}~n
d}~0 0 dS )zIGet a dictionary value from the dictionary and convert it to a dataclass.Nr0   )r6   r   r   	Exceptionr   )r   r9   r(   r)   er   r   r   _get_objectB   s    r<   z.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$Collection[str])netlocsafe_user_passwordsr   c                 C  s:   d| vr| S |  dd\}}||v r(| S t|r6| S |S )N@   )split _PEP610_USER_PASS_ENV_VARS_REGEXmatch)r>   r?   	user_passnetloc_no_user_passr   r   r   _strip_auth_from_netlocS   s    
rG   )urlr?   r   c                 C  s6   t j| }t|j|}t j|j||j|j|j	fS )zurl with user:password part removed unless it is formed with
    environment variables as specified in PEP 610, or it is a safe user:password
    such as `git`.
    )
urllibparseurlsplitrG   r>   
urlunsplitschemepathqueryfragment)rH   r?   
parsed_urlr>   r   r   r   
_strip_url^   s    rR   c                   @  sL   e Zd ZU dZdZded< ded< ddddd	d
ddZddddZdS )r   z2Raised when when input data is not spec-compliant.N
str | Noner1   r-   messager0   zstr | ExceptionNone)causer1   r   c                C  sR   t |tr>|jr.|r$| d|j n|j| _n|| _|j| _n|| _t|| _d S )N.)r3   r   r1   rT   r-   )selfrV   r1   r   r   r   __init__v   s    

z!DirectUrlValidationError.__init__r   c                 C  s   | j r| j d| j S | jS )Nz in )r1   rT   rX   r   r   r   __str__   s    z DirectUrlValidationError.__str__)r    r!   r"   __doc__r1   __annotations__rY   r[   r   r   r   r   r   p   s   
r   c                      s$   e Zd Zddd fddZ  ZS )r7   r-   rU   )r(   r   c                   s   t  jd|d d S )NzMissing required valuer0   )superrY   )rX   r(   	__class__r   r   rY      s    z#_DirectUrlRequiredKeyError.__init__)r    r!   r"   rY   __classcell__r   r   r_   r   r7      s   r7   TF)frozeninitc                   @  sX   e Zd ZU ded< ded< dZded< ddddddd	d
dZedddddZdS )r   r-   vcs	commit_idNrS   requested_revision)rf   rU   )rd   re   rf   r   c                C  s.   t | d| t | d| t | d| d S )Nrd   re   rf   object__setattr__)rX   rd   re   rf   r   r   r   rY      s    zVcsInfo.__init__r   r   r   c                 C  s&   | t |tdt|tdt |tddS )Nrd   rf   re   )rd   rf   re   )r8   r-   r6   r   r   r   r   r      s
    


zVcsInfo._from_dict)r    r!   r"   r]   rf   rY   r#   r   r   r   r   r   r      s   
r   c                   @  sD   e Zd ZU dZded< dddddddZed	d
dddZdS )r   NzMapping[str, str] | Nonehashesrj   rU   )rj   r   c                C  s   t | d| d S )Nrj   rg   )rX   rj   r   r   r   rY      s    zArchiveInfo.__init__r   r   r   c                 C  s   t |td}|d ur6tdd | D s6tdddt |td}|d urd|vr^tddd|dd	\}}|d u r||i}n<||vrtd
|ddd|| |krtd
|ddd| |dS )Nrj   c                 s  s   | ]}t |tV  qd S r   )r3   r-   )r'   hr   r   r   	<genexpr>   r+   z)ArchiveInfo._from_dict.<locals>.<genexpr>zHash values must be stringsr0   hash=z3Invalid hash format (expected '<algorithm>=<hash>')rA   z
Algorithm z2 used in hash field is not present in hashes fieldz7 used in hash field has different value in hashes fieldrk   )r6   r   allvaluesr   r-   rB   )r   r   rj   Zlegacy_hashhash_algorithm
hash_valuer   r   r   r      s4    


zArchiveInfo._from_dict)r    r!   r"   rj   r]   rY   r#   r   r   r   r   r   r      s
   
r   c                   @  sD   e Zd ZU dZded< dddddddZed	d
dddZdS )r   Nzbool | Noneeditablert   rU   )rt   r   c                C  s   t | d| d S )Nrt   rg   )rX   rt   r   r   r   rY      s    zDirInfo.__init__r   r   r   c                 C  s   | t |tddS )Nrt   ru   )r6   boolr   r   r   r   r      s    
zDirInfo._from_dict)r    r!   r"   rt   r]   rY   r#   r   r   r   r   r   r      s
   
r   c                   @  s   e Zd ZU dZded< dZded< dZded< dZd	ed
< dZded< ddddddddd	dddddZ	e
dddddZe
dddddZdddddddddd d!Zdd"d#d$ZdS )%r   z"A class representing a direct URL.r-   rH   NzArchiveInfo | Nonearchive_infozVcsInfo | Nonevcs_infozDirInfo | Nonedir_inforS   subdirectory)rw   rx   ry   rz   rU   )rH   rw   rx   ry   rz   r   c                C  sJ   t | d| t | d| t | d| t | d| t | d| d S )NrH   rw   rx   ry   rz   rg   )rX   rH   rw   rx   ry   rz   r   r   r   rY      s
    	zDirectUrl.__init__r   r   r   c              	   C  s   | t |tdt|tdt|tdt|tdt|tdd}t|jt|j	 t|j
 dkrdtd|j
d ur|jd	std
dd|S )NrH   rw   rx   ry   rz   )rH   rw   rx   ry   rz   rA   z?Exactly one of vcs_info, archive_info, dir_info must be presentzfile://z3URL scheme must be file:// when dir_info is presentr0   )r8   r-   r<   r   r   r   r6   rv   rx   rw   ry   r   rH   
startswith)r   r   
direct_urlr   r   r   r     s.    




zDirectUrl._from_dictc                C  s
   |  |S )z@Create and validate a DirectUrl instance from a JSON dictionary.)r   r   r   r   r   	from_dict   s    zDirectUrl.from_dictFT)git)generate_legacy_hashstrip_user_passwordr?   rv   r=   )r   r   r?   r   c                C  sf   t j| td}|rN| jrN| jjrNtt| jj \}}| d| |d d< |rbt| j	||d< |S )a  Convert the DirectUrl instance to a JSON dictionary.

        :param generate_legacy_hash: If True, include a legacy `hash` field in
            `archive_info` for backward compatibility with tools that don't
            support the `hashes` field.
        :param strip_user_password: If True, strip user:password from the URL
            unless it is formed with environment variables as specified in PEP
            610, or it is a safe user:password such as `git`.
        :param safe_user_passwords: A collection of user:password strings that
            should not be stripped from the URL even if `strip_user_password` is
            True.
        )Zdict_factoryro   rw   rn   rH   )
dataclassesZasdictr,   rw   rj   nextiteritemsrR   rH   )rX   r   r   r?   resrr   rs   r   r   r   to_dict%  s    zDirectUrl.to_dictr   c                 C  s   |  |   dS )zValidate the DirectUrl instance against the specification.

        Raises :class:`DirectUrlValidationError` if invalid.
        N)r}   r   rZ   r   r   r   validate@  s    zDirectUrl.validate)r    r!   r"   r\   r]   rw   rx   ry   rz   rY   r#   r   r}   r   r   r   r   r   r   r      s(   
r   )'
__future__r   r   reurllib.parserI   collections.abcr   typingr   r   r   r   sysr   version_infor   Ztyping_extensionsr   r   r   r   r$   r,   r6   r8   r<   compilerC   rG   rR   r:   r   r7   Z	dataclassr   r   r   r   r   r   r   r   <module>   sF   
	-