o
    Ñ­j¥*  ã                   @  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	rBd dlZd dlmZ ejdkr<d dlmZ nd dlmZ g d¢Zd?dd„ZedƒZG dd„ deƒZeded�Zd@dd„ZdAdd„ZdBd d!„ZdCd%d&„Ze d'¡ZdDd+d,„ZdEd.d/„ZG d0d1„ d1eƒZ G d2d3„ d3e ƒZ!ej"d4d5d6�G d7d8„ d8ƒƒZ#ej"d4d5d6�G d9d:„ d:ƒƒZ$ej"d4d5d6�G d;d<„ d<ƒƒZ%ej"d4d5d6�G d=d>„ d>ƒƒZ&dS )Fé    )ÚannotationsN)ÚMapping)ÚTYPE_CHECKINGÚAnyÚProtocolÚTypeVar)Ú
Collection)é   é   )ÚSelf)ÚArchiveInfoÚDirInfoÚ	DirectUrlÚDirectUrlValidationErrorÚVcsInfoÚreturnú	list[str]c                   C  s   t S ©N)Ú__all__© r   r   úQ/var/www/html/CropPilot/venv/lib/python3.10/site-packages/packaging/direct_url.pyÚ__dir__   ó   r   Ú_Tc                   @  s   e Zd Zeddd„ƒZdS )	Ú_FromMappingProtocolÚdúMapping[str, Any]r   r   c                 C  s   d S r   r   ©Úclsr   r   r   r   Ú
_from_dict#   r   z_FromMappingProtocol._from_dictN©r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r   r   r   r   r   "   s    r   Ú_FromMappingProtocolT)ÚboundÚdataúlist[tuple[str, Any]]údict[str, Any]c                 C  s   dd„ | D ƒS )Nc                 S  s   i | ]\}}|d ur||“qS r   r   )Ú.0ÚkeyÚvaluer   r   r   Ú
<dictcomp>+   s    z&_json_dict_factory.<locals>.<dictcomp>r   )r'   r   r   r   Ú_json_dict_factory*   s   r.   r   r   Úexpected_typeútype[_T]r+   Ústrú	_T | Nonec                 C  sF   |   |¡ }du rdS t||ƒs!t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   
ÿýr:   c                 C  s    t | ||ƒ }du rt|ƒ‚|S )zKGet a required value from the dictionary and verify it's the expected type.N)r:   Ú_DirectUrlRequiredKeyErrorr9   r   r   r   Ú_get_required;   s   r<   Útarget_typeútype[_FromMappingProtocolT]ú_FromMappingProtocolT | Nonec              
   C  sL   t | t|ƒ }du rdS z| |¡W S  ty% } zt||d�|‚d}~ww )zIGet a dictionary value from the dictionary and convert it to a dataclass.Nr4   )r:   r   r   Ú	Exceptionr   )r   r=   r+   r,   Úer   r   r   Ú_get_objectB   s   €ÿrB   z.^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$ÚnetlocÚsafe_user_passwordsúCollection[str]c                 C  s:   d| vr| S |   dd¡\}}||v r| S t |¡r| S |S )Nú@é   )ÚsplitÚ _PEP610_USER_PASS_ENV_VARS_REGEXÚmatch)rC   rD   Ú	user_passÚnetloc_no_user_passr   r   r   Ú_strip_auth_from_netlocS   s   
rM   Úurlc                 C  s6   t j | ¡}t|j|ƒ}t j |j||j|j|j	f¡S )z¥url 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ÚurlsplitrM   rC   Ú
urlunsplitÚschemeÚpathÚqueryÚfragment)rN   rD   Ú
parsed_urlrC   r   r   r   Ú
_strip_url^   s   ûÿrX   c                   @  s@   e Zd ZU dZdZded< ded< ddœddd„Zddd„ZdS )r   z2Raised when when input data is not spec-compliant.Nú
str | Noner5   r1   Úmessager4   Úcauseústr | Exceptionr   ÚNonec                C  sT   t |tƒr |jr|r|› d|j› �n|j| _n|| _|j| _d S || _t|ƒ| _d S )NÚ.)r7   r   r5   rZ   r1   )Úselfr[   r5   r   r   r   Ú__init__v   s   
ÿz!DirectUrlValidationError.__init__c                 C  s   | j r| j› d| j ›�S | jS )Nz in )r5   rZ   ©r_   r   r   r   Ú__str__ˆ   s   z DirectUrlValidationError.__str__)r[   r\   r5   rY   r   r]   )r   r1   )r!   r"   r#   Ú__doc__r5   Ú__annotations__r`   rb   r   r   r   r   r   p   s   
 ür   c                      s   e Zd Zd‡ fdd„Z‡  ZS )r;   r+   r1   r   r]   c                   s   t ƒ jd|d� d S )NzMissing required valuer4   )Úsuperr`   )r_   r+   ©Ú	__class__r   r   r`   �   s   z#_DirectUrlRequiredKeyError.__init__)r+   r1   r   r]   )r!   r"   r#   r`   Ú__classcell__r   r   rf   r   r;   Ž   s    r;   TF)ÚfrozenÚinitc                   @  sH   e Zd ZU ded< ded< dZded< ddœdd
d„Zeddd„ƒZdS )r   r1   ÚvcsÚ	commit_idNrY   Úrequested_revision)rm   r   r]   c                C  s.   t  | d|¡ t  | d|¡ t  | d|¡ d S )Nrk   rl   rm   ©ÚobjectÚ__setattr__)r_   rk   rl   rm   r   r   r   r`   ™   s   zVcsInfo.__init__r   r   r   c                 C  s&   | t |tdƒt|tdƒt |tdƒd�S )Nrk   rm   rl   )rk   rm   rl   )r<   r1   r:   r   r   r   r   r   ¤   s
   


ýzVcsInfo._from_dict)rk   r1   rl   r1   rm   rY   r   r]   r    )r!   r"   r#   rd   rm   r`   r$   r   r   r   r   r   r   “   s   
 ûr   c                   @  ó8   e Zd ZU dZded< ddœddd„Zeddd„ƒZdS )r   NúMapping[str, str] | NoneÚhashes©rs   r   r]   c                C  ó   t  | d|¡ d S )Nrs   rn   )r_   rs   r   r   r   r`   ²   ó   zArchiveInfo.__init__r   r   r   c                 C  sÆ   t |tdƒ}|d urtdd„ | ¡ D ƒƒstddd�‚t |tdƒ}|d ur^d|vr/tddd�‚| dd	¡\}}|d u r@||i}n||vrNtd
|›d�dd�‚|| |kr^td
|›d�dd�‚| |d�S )Nrs   c                 s  s   � | ]}t |tƒV  qd S r   )r7   r1   )r*   Úhr   r   r   Ú	<genexpr>¼   s   € z)ArchiveInfo._from_dict.<locals>.<genexpr>zHash values must be stringsr4   Úhashú=z3Invalid hash format (expected '<algorithm>=<hash>')rG   z
Algorithm z2 used in hash field is not present in hashes fieldz7 used in hash field has different value in hashes fieldrt   )r:   r   ÚallÚvaluesr   r1   rH   )r   r   rs   Úlegacy_hashÚhash_algorithmÚ
hash_valuer   r   r   r   ¹   s4   ÿþ

ý
ý
zArchiveInfo._from_dict)rs   rr   r   r]   r    )r!   r"   r#   rs   rd   r`   r$   r   r   r   r   r   r   ®   ó   
 ýr   c                   @  rq   )r   Núbool | NoneÚeditable©r‚   r   r]   c                C  ru   )Nr‚   rn   )r_   r‚   r   r   r   r`   à   rv   zDirInfo.__init__r   r   r   c                 C  s   | t |tdƒd�S )Nr‚   rƒ   )r:   Úboolr   r   r   r   r   ç   s   
ÿzDirInfo._from_dict)r‚   r�   r   r]   r    )r!   r"   r#   r‚   rd   r`   r$   r   r   r   r   r   r   Ü   r€   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„Z	e
d'dd„ƒZe
d'dd„ƒZddddœd(d"d#„Zd)d$d%„ZdS )*r   z"A class representing a direct URL.r1   rN   NúArchiveInfo | NoneÚarchive_infoúVcsInfo | NoneÚvcs_infoúDirInfo | NoneÚdir_inforY   Úsubdirectory)r†   rˆ   rŠ   r‹   r   r]   c                C  sJ   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )NrN   r†   rˆ   rŠ   r‹   rn   )r_   rN   r†   rˆ   rŠ   r‹   r   r   r   r`   ø   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r2tdƒ‚|j
d urC|j d	¡sCtd
dd�‚|S )NrN   r†   rˆ   rŠ   r‹   )rN   r†   rˆ   rŠ   r‹   rG   z?Exactly one of vcs_info, archive_info, dir_info must be presentzfile://z3URL scheme must be file:// when dir_info is presentr4   )r<   r1   rB   r   r   r   r:   r„   rˆ   r†   rŠ   r   rN   Ú
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_passwordrD   r�   r„   r‘   rD   rE   c                C  sf   t j| td�}|r'| jr'| jjr'tt| jj ¡ ƒƒ\}}|› d|› �|d d< |r1t| 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.
        )Údict_factoryrz   r†   ry   rN   )
ÚdataclassesÚasdictr.   r†   rs   ÚnextÚiterÚitemsrX   rN   )r_   r�   r‘   rD   Úresr~   r   r   r   r   Úto_dict%  s   zDirectUrl.to_dictc                 C  s   |   |  ¡ ¡ dS )z�Validate the DirectUrl instance against the specification.

        Raises :class:`DirectUrlValidationError` if invalid.
        N)rŽ   r™   ra   r   r   r   Úvalidate@  rv   zDirectUrl.validate)rN   r1   r†   r…   rˆ   r‡   rŠ   r‰   r‹   rY   r   r]   r    )r�   r„   r‘   r„   rD   rE   r   r   )r   r]   )r!   r"   r#   rc   rd   r†   rˆ   rŠ   r‹   r`   r$   r   rŽ   r™   rš   r   r   r   r   r   î   s*   
 ùûr   )r   r   )r'   r(   r   r)   )r   r   r/   r0   r+   r1   r   r2   )r   r   r/   r0   r+   r1   r   r   )r   r   r=   r>   r+   r1   r   r?   )rC   r1   rD   rE   r   r1   )rN   r1   rD   rE   r   r1   )'Ú
__future__r   r“   ÚreÚurllib.parserO   Úcollections.abcr   Útypingr   r   r   r   Úsysr   Úversion_infor   Útyping_extensionsr   r   r   r   r%   r.   r:   r<   rB   ÚcompilerI   rM   rX   r@   r   r;   Ú	dataclassr   r   r   r   r   r   r   r   Ú<module>   sH    

	



ÿ

-