U
    b6{i	X  ã                
   @  s(  d dl mZ d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m	Z	 d dl
mZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ er¸d dlmZ d dlmZ e e¡Zddddddddddg
Z edƒZ!edƒZ"G dd„ deƒZ#ede#d�Z$e %d¡Z&dd d!œd"d„Z'd#d#d$œd%d&„Z(d#d'd'd(œd)d*„Z)d+d,d-œd.d/„Z*d0d1d#d2d3œd4d5„Z+d0d1d#dd3œd6d7„Z,d0d1d#d8d9œd:d;„Z-d0d1d<d#d=d>œd?d@„Z.d0d1d<d#dd>œdAdB„Z/d0d1d<d#dCdDœdEdF„Z0d0dGd#dHdIœdJdK„Z1d0dGd#dLdMœdNdO„Z2d0dGd#dPdMœdQdR„Z3d#dSdTœdUdV„Z4dWdWdXdYœdZd[„Z5d0d0d\œd]d^„Z6G d_d„ de7ƒZ8G d`da„ dae8ƒZ9G dbd„ de8ƒZ:edcddde�G dfd„ dƒƒZ;edcddde�G dgd„ dƒƒZ<edcddde�G dhd„ dƒƒZ=edcddde�G did„ dƒƒZ>edcddde�G djd„ dƒƒZ?edcddde�G dkd„ dƒƒZ@edcddde�G dld„ dƒƒZAdS )mé    )ÚannotationsN)ÚMappingÚSequence)Ú	dataclass)Údatetime)ÚTYPE_CHECKINGÚAnyÚCallableÚProtocolÚTypeVaré   )ÚMarker)ÚSpecifierSet)ÚNormalizedNameÚis_normalized_name)ÚVersion)ÚPath)ÚSelfÚPackageÚPackageArchiveÚPackageDirectoryÚPackageSdistÚ
PackageVcsÚPackageWheelÚPylockÚPylockUnsupportedVersionErrorÚPylockValidationErrorÚis_valid_pylock_pathÚ_TÚ_T2c                   @  s    e Zd Zedddœdd„ƒZdS )Ú_FromMappingProtocolúMapping[str, Any]r   ©ÚdÚreturnc                 C  s   d S ©N© ©Úclsr#   r&   r&   ú4/tmp/pip-unpacked-wheel-zjp86yhe/packaging/pylock.pyÚ
_from_dict/   s    z_FromMappingProtocol._from_dictN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr*   r&   r&   r&   r)   r    .   s   r    Ú_FromMappingProtocolT)Úboundz^pylock\.([^.]+)\.toml$r   Úbool)Úpathr$   c                 C  s   | j dkptt | j ¡ƒS )z4Check if the given path is a valid pylock file path.zpylock.toml)Únamer1   Ú_PYLOCK_FILE_NAME_REÚmatch)r2   r&   r&   r)   r   9   s    Ústr©Úkeyr$   c                 C  s   |   dd¡S )NÚ_ú-)Úreplace)r8   r&   r&   r)   Ú	_toml_key>   s    r<   r   )r8   Úvaluer$   c                 C  s<   t |tttfƒrt|ƒS t |tƒr8| dkr8dd„ |D ƒS |S )NÚenvironmentsc                 S  s   g | ]}t |ƒ‘qS r&   )r6   )Ú.0Úvr&   r&   r)   Ú
<listcomp>F   s     z_toml_value.<locals>.<listcomp>)Ú
isinstancer   r   r   r6   r   )r8   r=   r&   r&   r)   Ú_toml_valueB   s
    rC   zlist[tuple[str, Any]]zdict[str, Any])Údatar$   c                 C  s   dd„ | D ƒS )Nc                 S  s(   i | ] \}}|d k	rt |ƒt||ƒ“qS r%   )r<   rC   )r?   r8   r=   r&   r&   r)   Ú
<dictcomp>K   s   þ z&_toml_dict_factory.<locals>.<dictcomp>r&   )rD   r&   r&   r)   Ú_toml_dict_factoryJ   s    þrF   r!   ztype[_T]z	_T | None)r#   Úexpected_typer8   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.NúUnexpected type ú (expected ú)©Úcontext)ÚgetrB   r   Útyper+   ©r#   rG   r8   r=   r&   r&   r)   Ú_getR   s    
ýrP   c                 C  s    t | ||ƒ }dkrt|ƒ‚|S )zKGet a required value from the dictionary and verify it's the expected type.N)rP   Ú_PylockRequiredKeyErrorrO   r&   r&   r)   Ú_get_required_   s    rR   zSequence[_T] | None)r#   Úexpected_item_typer8   r$   c                 C  sŽ   t | t|ƒ }dkrdS t|ttfƒr@tdt|ƒj› d�|d�‚t|ƒD ]@\}}t||ƒsHtdt|ƒj› d|j› d�|› d|› d�d�‚qH|S )	zMGet a list value from the dictionary and verify it's the expected items type.NrH   z (expected Sequence)rK   rI   rJ   ú[ú])	rP   r   rB   r6   Úbytesr   rN   r+   Ú	enumerate)r#   rS   r8   r=   ÚiÚitemr&   r&   r)   Ú_get_sequencef   s    þ
ýrZ   zCallable[[_T], _T2]z
_T2 | None)r#   rG   Útarget_typer8   r$   c              
   C  sX   t | ||ƒ }dkrdS z
||ƒW S  tk
rR } zt||d�|‚W 5 d}~X Y nX dS )z©Get a value from the dictionary, verify it's the expected type,
    and convert to the target type.

    This assumes the target_type constructor accepts the value.
    NrK   )rP   Ú	Exceptionr   )r#   rG   r[   r8   r=   Úer&   r&   r)   Ú_get_as|   s    
r^   c                 C  s"   t | |||ƒ }dkrt|ƒ‚|S )zfGet a required value from the dict, verify it's the expected type,
    and convert to the target type.N)r^   rQ   )r#   rG   r[   r8   r=   r&   r&   r)   Ú_get_required_as�   s    r_   zlist[_T2] | None)r#   rS   Útarget_item_typer8   r$   c           	   
   C  s‚   t | ||ƒ }dkrdS g }z |D ]}||ƒ}| |¡ q"W n@ tk
r| } z"t||› dt|ƒ› d�d�|‚W 5 d}~X Y nX |S )z>Get list value from dictionary and verify expected items type.NrT   rU   rK   )rZ   Úappendr\   r   Úlen)	r#   rS   r`   r8   r=   ÚresultrY   Ú
typed_itemr]   r&   r&   r)   Ú_get_sequence_asœ   s    0re   ztype[_FromMappingProtocolT]z_FromMappingProtocolT | None)r#   r[   r8   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.NrK   )rP   r   r*   r\   r   )r#   r[   r8   r=   r]   r&   r&   r)   Ú_get_object¯   s    rf   z"list[_FromMappingProtocolT] | None)r#   r`   r8   r$   c              
   C  s„   t | t|ƒ }dkrdS g }z"|D ]}| |¡}| |¡ q"W n@ tk
r~ } z"t||› dt|ƒ› d�d�|‚W 5 d}~X Y nX |S )zJGet a list value from the dictionary and convert its items to a dataclass.NrT   rU   rK   )rZ   r   r*   ra   r\   r   rb   )r#   r`   r8   r=   rc   rY   rd   r]   r&   r&   r)   Ú_get_sequence_of_objects»   s    
0rg   zSequence[_FromMappingProtocolT]c                 C  s    t | ||ƒ }dkrt|ƒ‚|S )zWGet a required list value from the dictionary and convert its items to a
    dataclass.N)rg   rQ   )r#   r`   r8   rc   r&   r&   r)   Ú!_get_required_sequence_of_objectsË   s    rh   r   )r3   r$   c                 C  s    t | ƒstd| ›d�ƒ‚t| ƒS )z+Validate that a string is a NormalizedName.zName z is not normalized)r   r   r   )r3   r&   r&   r)   Ú_validate_normalized_nameÕ   s    ri   ú
str | NoneÚNone)r2   Úurlr$   c                 C  s   | s|st dƒ‚d S )Nzpath or url must be provided)r   )r2   rl   r&   r&   r)   Ú_validate_path_urlÜ   s    rm   )Úhashesr$   c                 C  s.   | st dƒ‚tdd„ |  ¡ D ƒƒs*t dƒ‚| S )Nz"At least one hash must be providedc                 s  s   | ]}t |tƒV  qd S r%   )rB   r6   )r?   Zhash_valr&   r&   r)   Ú	<genexpr>ä   s     z#_validate_hashes.<locals>.<genexpr>zHash values must be strings)r   ÚallÚvalues)rn   r&   r&   r)   Ú_validate_hashesá   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.Nrj   rL   r6   ÚmessagerK   zstr | Exceptionrk   )ÚcauserL   r$   c                C  sR   t |tƒr>|jr.|r$|› d|j› �n|j| _n|| _|j| _n|| _t|ƒ| _d S )NÚ.)rB   r   rL   rs   r6   )Úselfrt   rL   r&   r&   r)   Ú__init__ï   s    
ÿ
zPylockValidationError.__init__©r$   c                 C  s   | j r| j› d| j ›�S | jS )Nz in )rL   rs   ©rv   r&   r&   r)   Ú__str__  s    zPylockValidationError.__str__)r+   r,   r-   Ú__doc__rL   Ú__annotations__rw   rz   r&   r&   r&   r)   r   é   s   
üc                      s$   e Zd Zdddœ‡ fdd„Z‡  ZS )rQ   r6   rk   r7   c                   s   t ƒ jd|d� d S )NzMissing required valuerK   )Úsuperrw   )rv   r8   ©Ú	__class__r&   r)   rw     s    z _PylockRequiredKeyError.__init__)r+   r,   r-   rw   Ú__classcell__r&   r&   r~   r)   rQ     s   rQ   c                   @  s   e Zd ZdZdS )r   z7Raised when encountering an unsupported `lock_version`.N)r+   r,   r-   r{   r&   r&   r&   r)   r     s   TF)ÚfrozenÚinitc                	   @  sˆ   e Zd ZU ded< dZded< dZded< dZded< ded< dZded	< ddddd
œddddddddœdd„Ze	dddœdd„ƒZ
dS )r   r6   rN   Nrj   rl   r2   Úrequested_revisionÚ	commit_idÚsubdirectory)rl   r2   rƒ   r…   rk   )rN   rl   r2   rƒ   r„   r…   r$   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )NrN   rl   r2   rƒ   r„   r…   ©ÚobjectÚ__setattr__)rv   rN   rl   r2   rƒ   r„   r…   r&   r&   r)   rw     s    zPackageVcs.__init__r!   r   r"   c              
   C  sV   | t |tdƒt|tdƒt|tdƒt|tdƒt |tdƒt|tdƒd�}t|j|jƒ |S )NrN   rl   r2   zrequested-revisionz	commit-idr…   )rN   rl   r2   rƒ   r„   r…   )rR   r6   rP   rm   r2   rl   )r(   r#   Zpackage_vcsr&   r&   r)   r*   +  s    





úzPackageVcs._from_dict)r+   r,   r-   r|   rl   r2   rƒ   r…   rw   r.   r*   r&   r&   r&   r)   r     s   
øc                   @  s^   e Zd ZU ded< dZded< dZded< dddœdddd	d
œdd„Zedddœdd„ƒZdS )r   r6   r2   Nzbool | NoneÚeditablerj   r…   )r‰   r…   rk   )r2   r‰   r…   r$   c                C  s.   t  | d|¡ t  | d|¡ t  | d|¡ d S )Nr2   r‰   r…   r†   )rv   r2   r‰   r…   r&   r&   r)   rw   ?  s    zPackageDirectory.__init__r!   r   r"   c                 C  s&   | t |tdƒt|tdƒt|tdƒd�S )Nr2   r‰   r…   )r2   r‰   r…   )rR   r6   rP   r1   r'   r&   r&   r)   r*   K  s
    


ýzPackageDirectory._from_dict)	r+   r,   r-   r|   r‰   r…   rw   r.   r*   r&   r&   r&   r)   r   9  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	ed
< dZded< ddddddœddddd	dddœdd„Z	e
dddœdd„ƒZdS )r   Nrj   rl   r2   ú
int | NoneÚsizeúdatetime | NoneÚupload_timeúMapping[str, str]rn   r…   )rl   r2   r‹   r�   r…   rk   )rl   r2   r‹   r�   rn   r…   r$   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )Nrl   r2   r‹   r�   rn   r…   r†   )rv   rl   r2   r‹   r�   rn   r…   r&   r&   r)   rw   ]  s    zPackageArchive.__init__r!   r   r"   c              
   C  sX   | t |tdƒt |tdƒt |tdƒt |tdƒt|ttdƒt |tdƒd�}t|j|j	ƒ |S )Nrl   r2   r‹   úupload-timern   r…   )rl   r2   r‹   r�   rn   r…   )
rP   r6   Úintr   r_   r   rr   rm   r2   rl   )r(   r#   Zpackage_archiver&   r&   r)   r*   o  s    




úzPackageArchive._from_dict)r+   r,   r-   rl   r|   r2   r‹   r�   r…   rw   r.   r*   r&   r&   r&   r)   r   T  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
ed< ddddddœdddddd
ddœdd„Z	e
dddœdd„ƒZdS )r   Nrj   r3   rŒ   r�   rl   r2   rŠ   r‹   rŽ   rn   ©r3   r�   rl   r2   r‹   rk   ©r3   r�   rl   r2   r‹   rn   r$   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S ©Nr3   r�   rl   r2   r‹   rn   r†   ©rv   r3   r�   rl   r2   r‹   rn   r&   r&   r)   rw   †  s    zPackageSdist.__init__r!   r   r"   c                 C  sX   | t |tdƒt |tdƒt |tdƒt |tdƒt |tdƒt|ttdƒd�}t|j|j	ƒ |S ©Nr3   r�   rl   r2   r‹   rn   )r3   r�   rl   r2   r‹   rn   ©
rP   r6   r   r�   r_   r   rr   rm   r2   rl   )r(   r#   Zpackage_sdistr&   r&   r)   r*   ˜  s    




úzPackageSdist._from_dict©r+   r,   r-   r3   r|   r�   rl   r2   r‹   rw   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
ed< ddddddœdddddd
ddœdd„Z	e
dddœdd„ƒZdS )r   Nrj   r3   rŒ   r�   rl   r2   rŠ   r‹   rŽ   rn   r‘   rk   r’   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S r“   r†   r”   r&   r&   r)   rw   ¯  s    zPackageWheel.__init__r!   r   r"   c                 C  sX   | t |tdƒt |tdƒt |tdƒt |tdƒt |tdƒt|ttdƒd�}t|j|j	ƒ |S r•   r–   )r(   r#   Zpackage_wheelr&   r&   r)   r*   Á  s    




úzPackageWheel._from_dictr—   r&   r&   r&   r)   r   ¦  s   
ùc                   @  s  e Zd ZU ded< 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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Zd
ed< dZded< dddddddddddddœdd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(„ƒZdS ))r   r   r3   NzVersion | NoneÚversionzMarker | NoneÚmarkerúSpecifierSet | NoneÚrequires_pythonz"Sequence[Mapping[str, Any]] | NoneÚdependencieszPackageVcs | NoneÚvcszPackageDirectory | NoneÚ	directoryzPackageArchive | NoneÚarchiverj   ÚindexzPackageSdist | NoneÚsdistzSequence[PackageWheel] | NoneÚwheelsÚattestation_identitiesúMapping[str, Any] | NoneÚtool)r˜   r™   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¥   rk   )r3   r˜   r™   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¥   r$   c                C  sº   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d	|	¡ t  | d
|
¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )Nr3   r˜   r™   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¥   r†   )rv   r3   r˜   r™   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¥   r&   r&   r)   rw   ß  s    zPackage.__init__r!   r   r"   c                 C  sd  | t |ttdƒt|ttdƒt|ttdƒt|tdƒt|ttdƒt	|t
dƒt	|tdƒt	|tdƒt|td	ƒt	|td
ƒt|tdƒt|tdƒt|tdƒd�}t|jƒt|jp¤g ƒ }t|jƒt|jƒ t|jƒ }|dkrà|dkràtdƒ‚|dkrø|dkrøtdƒ‚z,t|j�pg ƒD ]\}}t|tdƒ �q
W n: tk
�r^ } zt|d|› d�d�|‚W 5 d }~X Y nX |S )Nr3   r˜   úrequires-pythonrœ   r™   r�   rž   rŸ   r    r¡   r¢   zattestation-identitiesr¥   )r3   r˜   r›   rœ   r™   r�   rž   rŸ   r    r¡   r¢   r£   r¥   r   zFNone of vcs, directory, archive must be set if sdist or wheels are setr   zRExactly one of vcs, directory, archive must be set if sdist and wheels are not setÚkindzattestation-identities[rU   rK   )r_   r6   ri   r^   r   r   rZ   r   r   rf   r   r   r   rP   r   rg   r   r1   r¡   rb   r¢   r�   rž   rŸ   r   rW   r£   rR   r\   )r(   r#   ÚpackageÚdistributionsZdirect_urlsrX   Zattestation_identityr]   r&   r&   r)   r*   ÿ  sN    








óÿÿÿ
ÿ 
ÿþzPackage._from_dictr1   rx   c                 C  s   | j p
| j S r%   )r¡   r¢   ry   r&   r&   r)   Ú	is_direct(  s    zPackage.is_direct)r+   r,   r-   r|   r˜   r™   r›   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¥   rw   r.   r*   Úpropertyrª   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Z	ded< ded< ded< dZ
ded< ddddd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"„Zdd œd#d$„ZdS )%r   z#A class representing a pylock file.r   Úlock_versionNzSequence[Marker] | Noner>   rš   r›   zSequence[NormalizedName] | NoneÚextraszSequence[str] | NoneÚdependency_groupsÚdefault_groupsr6   Ú
created_byzSequence[Package]Úpackagesr¤   r¥   )r>   r›   r­   r®   r¯   r¥   rk   )
r¬   r>   r›   r­   r®   r¯   r°   r±   r¥   r$   c       	   
      C  s‚   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d	|	¡ d S )
Nr¬   r>   r›   r­   r®   r¯   r°   r±   r¥   r†   )
rv   r¬   r>   r›   r­   r®   r¯   r°   r±   r¥   r&   r&   r)   rw   ;  s    zPylock.__init__r!   r   r"   c                 C  s¼   | t |ttdƒt|ttdƒt|ttdƒt|tdƒt|tdƒt|tdƒt|tt	dƒt
|tdƒt|td	ƒd
�	}tdƒ|j  krˆtdƒk sœn td|j› d�ƒ‚|jtdƒkr¸t d|j¡ |S )Nzlock-versionr>   r­   zdependency-groupszdefault-groupsz
created-byr¦   r±   r¥   )	r¬   r>   r­   r®   r¯   r°   r›   r±   r¥   Ú1Ú2zpylock version z is not supportedz1.0z(pylock minor version %s is not supported)r_   r6   r   re   r   ri   rZ   rR   r^   r   rh   r   rP   r   r¬   r   Ú_loggerÚwarning)r(   r#   Zpylockr&   r&   r)   r*   S  s*    




÷ ÿ ÿzPylock._from_dictc                C  s
   |   |¡S )z¦Create and validate a Pylock instance from a TOML dictionary.

        Raises :class:`PylockValidationError` if the input data is not
        spec-compliant.
        )r*   r'   r&   r&   r)   Ú	from_dictj  s    zPylock.from_dictrx   c                 C  s   t j| td�S )z1Convert the Pylock instance to a TOML dictionary.)Zdict_factory)ÚdataclassesZasdictrF   ry   r&   r&   r)   Úto_dicts  s    zPylock.to_dictc                 C  s   |   |  ¡ ¡ dS )zqValidate the Pylock instance against the specification.

        Raises :class:`PylockValidationError` otherwise.N)r¶   r¸   ry   r&   r&   r)   Úvalidatew  s    zPylock.validate)r+   r,   r-   r{   r|   r>   r›   r­   r®   r¯   r¥   rw   r.   r*   r¶   r¸   r¹   r&   r&   r&   r)   r   -  s.   
õ$)BÚ
__future__r   r·   ÚloggingÚreÚcollections.abcr   r   r   r   Útypingr   r   r	   r
   r   Úmarkersr   Ú
specifiersr   Úutilsr   r   r˜   r   Úpathlibr   Ztyping_extensionsr   Ú	getLoggerr+   r´   Ú__all__r   r   r    r/   Úcompiler4   r   r<   rC   rF   rP   rR   rZ   r^   r_   re   rf   rg   rh   ri   rm   rr   r\   r   rQ   r   r   r   r   r   r   r   r   r&   r&   r&   r)   Ú<module>   s€   
ö


(

(
(
(
]
