U
    Cë]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	r„d dlZd dlmZ ejdkrxd dlmZ nd dlmZ dd	d
ddg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/d0„ZG d1d„ deƒZ G d2d3„ d3e ƒZ!ej"d4d5d6�G d7d„ dƒƒZ#ej"d4d5d6�G d8d„ dƒƒZ$ej"d4d5d6�G d9d	„ d	ƒƒZ%ej"d4d5d6�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   ú]c:\users\psant\downloads\hotstarbackend\school\venv\Lib\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 k	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   ztype[_T]Ústrz	_T | None)r   Úexpected_typer(   r   c                 C  sF   |   |¡ }dk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    
ýr5   c                 C  s    t | ||ƒ }dkrt|ƒ‚|S )zKGet a required value from the dictionary and verify it's the expected type.N)r5   Ú_DirectUrlRequiredKeyErrorr4   r   r   r   Ú_get_required;   s    r7   ztype[_FromMappingProtocolT]z_FromMappingProtocolT | None)r   Útarget_typer(   r   c              
   C  sZ   t | t|ƒ }dkrdS z| |¡W S  tk
rT } zt||d�|‚W 5 d}~X Y nX dS )zIGet a dictionary value from the dictionary and convert it to a dataclass.Nr/   )r5   r   r   Ú	Exceptionr   )r   r8   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| kr| S |   dd¡\}}||k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    
rF   )Úurlr>   r   c                 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ÚurlsplitrF   r=   Ú
urlunsplitÚschemeÚpathÚqueryÚfragment)rG   r>   Ú
parsed_urlr=   r   r   r   Ú
_strip_url^   s    ûÿrQ   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 | Noner0   r,   Úmessager/   zstr | ExceptionÚNone)Úcauser0   r   c                C  sR   t |tƒr>|jr.|r$|› d|j› �n|j| _n|| _|j| _n|| _t|ƒ| _d S )NÚ.)r2   r   r0   rS   r,   )ÚselfrU   r0   r   r   r   Ú__init__v   s    
ÿ
z!DirectUrlValidationError.__init__r   c                 C  s   | j r| j› d| j ›�S | jS )Nz in )r0   rS   ©rW   r   r   r   Ú__str__ˆ   s    z DirectUrlValidationError.__str__)r    r!   r"   Ú__doc__r0   Ú__annotations__rX   rZ   r   r   r   r   r   p   s   
üc                      s$   e Zd Zdddœ‡ fdd„Z‡  ZS )r6   r,   rT   )r(   r   c                   s   t ƒ jd|d� d S )NzMissing required valuer/   )ÚsuperrX   )rW   r(   ©Ú	__class__r   r   rX   �   s    z#_DirectUrlRequiredKeyError.__init__)r    r!   r"   rX   Ú__classcell__r   r   r^   r   r6   Ž   s   r6   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_idNrR   Úrequested_revision)re   rT   )rc   rd   re   r   c                C  s.   t  | d|¡ t  | d|¡ t  | d|¡ d S )Nrc   rd   re   ©ÚobjectÚ__setattr__)rW   rc   rd   re   r   r   r   rX   ™   s    zVcsInfo.__init__r   r   r   c                 C  s&   | t |tdƒt|tdƒt |tdƒd�S )Nrc   re   rd   )rc   re   rd   )r7   r,   r5   r   r   r   r   r   ¤   s
    


ýzVcsInfo._from_dict)r    r!   r"   r\   re   rX   r#   r   r   r   r   r   r   “   s   
û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©ri   rT   )ri   r   c                C  s   t  | d|¡ d S )Nri   rf   )rW   ri   r   r   r   rX   ²   s    zArchiveInfo.__init__r   r   r   c                 C  sÆ   t |tdƒ}|d k	r6tdd„ | ¡ D ƒƒs6tddd�‚t |tdƒ}|d k	r¼d|kr^tddd�‚| dd	¡\}}|d kr€||i}n<||krœtd
|›d�dd�‚|| |kr¼td
|›d�dd�‚| |d�S )Nri   c                 s  s   | ]}t |tƒV  qd S r   )r2   r,   )r'   Úhr   r   r   Ú	<genexpr>¼   s     z)ArchiveInfo._from_dict.<locals>.<genexpr>zHash values must be stringsr/   Úhashú=z3Invalid hash format (expected '<algorithm>=<hash>')r@   z
Algorithm z2 used in hash field is not present in hashes fieldz7 used in hash field has different value in hashes fieldrj   )r5   r   ÚallÚvaluesr   r,   rA   )r   r   ri   Zlegacy_hashÚhash_algorithmÚ
hash_valuer   r   r   r   ¹   s6     ÿþ

ý
ýzArchiveInfo._from_dict)r    r!   r"   ri   r\   rX   r#   r   r   r   r   r   r   ®   s
   
ý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©rs   rT   )rs   r   c                C  s   t  | d|¡ d S )Nrs   rf   )rW   rs   r   r   r   rX   à   s    zDirInfo.__init__r   r   r   c                 C  s   | t |tdƒd�S )Nrs   rt   )r5   Úboolr   r   r   r   r   ç   s    
ÿzDirInfo._from_dict)r    r!   r"   rs   r\   rX   r#   r   r   r   r   r   r   Ü   s
   
ý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,   rG   NzArchiveInfo | NoneÚarchive_infozVcsInfo | NoneÚvcs_infozDirInfo | NoneÚdir_inforR   Úsubdirectory)rv   rw   rx   ry   rT   )rG   rv   rw   rx   ry   r   c                C  sJ   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )NrG   rv   rw   rx   ry   rf   )rW   rG   rv   rw   rx   ry   r   r   r   rX   ø   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 k	r†|j d	¡s†td
dd�‚|S )NrG   rv   rw   rx   ry   )rG   rv   rw   rx   ry   r@   z?Exactly one of vcs_info, archive_info, dir_info must be presentzfile://z3URL scheme must be file:// when dir_info is presentr/   )r7   r,   r;   r   r   r   r5   ru   rw   rv   rx   r   rG   Ú
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>   ru   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_factoryrn   rv   rm   rG   )
ÚdataclassesZasdictr+   rv   ri   ÚnextÚiterÚitemsrQ   rG   )rW   r~   r   r>   Úresrq   rr   r   r   r   Úto_dict%  s    zDirectUrl.to_dictr   c                 C  s   |   |  ¡ ¡ dS )z�Validate the DirectUrl instance against the specification.

        Raises :class:`DirectUrlValidationError` if invalid.
        N)r|   r…   rY   r   r   r   Úvalidate@  s    zDirectUrl.validate)r    r!   r"   r[   r\   rv   rw   rx   ry   rX   r#   r   r|   r…   r†   r   r   r   r   r   î   s(   
ùû)'Ú
__future__r   r€   ÚreÚurllib.parserH   Úcollections.abcr   Útypingr   r   r   r   Úsysr   Úversion_infor   Ztyping_extensionsr   r   r   r   r$   r+   r5   r7   r;   ÚcompilerB   rF   rQ   r9   r   r6   Z	dataclassr   r   r   r   r   r   r   r   Ú<module>   sP   
û	ÿ-