U
    +5øib„  ã                
   @  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mZ d dlmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlmZmZmZm Z  ddl!m"Z" e�rd dlm#Z#m$Z$ d dl%m&Z& 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-ddœdd„Z.ed ƒZ/ed!ƒZ0G d"d#„ d#eƒZ1ed$e1d%�Z2e 3d&¡Z4d'd(d)œd*d„Z5d+d+d,œd-d.„Z6d+d/d/d0œd1d2„Z7d3d4d5œd6d7„Z8d8d9d+d:d;œd<d=„Z9d8d9d+d d;œd>d?„Z:d8d9d+d@dAœdBdC„Z;d8d9dDd+dEdFœdGdH„Z<d8d9dDd+d!dFœdIdJ„Z=d8d9dDd+dKdLœdMdN„Z>d8dOd+dPdQœdRdS„Z?d8dOd+dTdUœdVdW„Z@d8dOd+dXdUœdYdZ„ZAd+d[d\œd]d^„ZBd_d_d`daœdbdc„ZCd_d_d)œddde„ZDd_d_dfœdgdh„ZEd8d8diœdjdk„ZFG dld„ deGƒZHG dmdn„ dneHƒZIG dod„ deHƒZJG dpdq„ dqeGƒZKedrdsdt�G dud„ dƒƒZLedrdsdt�G dvd„ dƒƒZMedrdsdt�G dwd„ dƒƒZNedrdsdt�G dxd„ dƒƒZOedrdsdt�G dyd„ dƒƒZPedrdsdt�G dzd„ dƒƒZQedrdsdt�G d{d„ dƒƒZRdS )|é    )ÚannotationsN)ÚMappingÚSequence)Ú	dataclass)Údatetime)ÚTYPE_CHECKINGÚAnyÚCallableÚProtocolÚTypeVarÚcast)Úurlparseé   )ÚEnvironmentÚMarkerÚdefault_environment)ÚSpecifierSet)Úcreate_compatible_tags_selectorÚsys_tags)ÚNormalizedNameÚis_normalized_nameÚparse_sdist_filenameÚparse_wheel_filename)ÚVersion)Ú
CollectionÚIterator)ÚPath)ÚSelf)ÚTagÚPackageÚPackageArchiveÚPackageDirectoryÚPackageSdistÚ
PackageVcsÚPackageWheelÚPylockÚPylockUnsupportedVersionErrorÚPylockValidationErrorÚis_valid_pylock_pathz	list[str]©Úreturnc                   C  s   t S ©N)Ú__all__© r-   r-   ú4/tmp/pip-unpacked-wheel-xj899fla/packaging/pylock.pyÚ__dir__6   s    r/   Ú_TÚ_T2c                   @  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-   ©Úclsr5   r-   r-   r.   Ú
_from_dict?   s    z_FromMappingProtocol._from_dictN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr8   r-   r-   r-   r.   r2   >   s   r2   Ú_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)Únamer?   Ú_PYLOCK_FILE_NAME_REÚmatch©r@   r-   r-   r.   r(   I   s    Ústr©Úkeyr*   c                 C  s   |   dd¡S )NÚ_ú-)Úreplace)rG   r-   r-   r.   Ú	_toml_keyN   s    rK   r   )rG   Ú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-   )rE   )Ú.0Úvr-   r-   r.   Ú
<listcomp>V   s     z_toml_value.<locals>.<listcomp>)Ú
isinstancer   r   r   rE   r   )rG   rL   r-   r-   r.   Ú_toml_valueR   s
    rR   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+   )rK   rR   )rN   rG   rL   r-   r-   r.   Ú
<dictcomp>[   s   þ z&_toml_dict_factory.<locals>.<dictcomp>r-   )rS   r-   r-   r.   Ú_toml_dict_factoryZ   s    þrU   r3   ztype[_T]z	_T | None)r5   Úexpected_typerG   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)ÚgetrQ   r'   Útyper9   ©r5   rV   rG   rL   r-   r-   r.   Ú_getb   s    
ýr_   c                 C  s    t | ||ƒ }dkrt|ƒ‚|S )zKGet a required value from the dictionary and verify it's the expected type.N)r_   Ú_PylockRequiredKeyErrorr^   r-   r-   r.   Ú_get_requiredo   s    ra   zSequence[_T] | None)r5   Úexpected_item_typerG   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.NrW   z (expected Sequence)rZ   rX   rY   ú[ú])	r_   r   rQ   rE   Úbytesr'   r]   r9   Ú	enumerate)r5   rb   rG   rL   ÚiÚitemr-   r-   r.   Ú_get_sequencev   s    þ
ýri   zCallable[[_T], _T2]z
_T2 | None)r5   rV   Útarget_typerG   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.
    NrZ   )r_   Ú	Exceptionr'   )r5   rV   rj   rG   rL   Úer-   r-   r.   Ú_get_asŒ   s    
rm   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)rm   r`   )r5   rV   rj   rG   rL   r-   r-   r.   Ú_get_required_asŸ   s    rn   zlist[_T2] | None)r5   rb   Útarget_item_typerG   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.Nrc   rd   rZ   )ri   Úappendrk   r'   Úlen)	r5   rb   ro   rG   rL   Úresultrh   Ú
typed_itemrl   r-   r-   r.   Ú_get_sequence_as¬   s    0rt   ztype[_FromMappingProtocolT]z_FromMappingProtocolT | None)r5   rj   rG   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.NrZ   )r_   r   r8   rk   r'   )r5   rj   rG   rL   rl   r-   r-   r.   Ú_get_object¿   s    ru   z"list[_FromMappingProtocolT] | None)r5   ro   rG   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.Nrc   rd   rZ   )ri   r   r8   rp   rk   r'   rq   )r5   ro   rG   rL   rr   rh   rs   rl   r-   r-   r.   Ú_get_sequence_of_objectsË   s    
0rv   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)rv   r`   )r5   ro   rG   rr   r-   r-   r.   Ú!_get_required_sequence_of_objectsÛ   s    rw   r   )rA   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   )rA   r-   r-   r.   Ú_validate_normalized_nameå   s    rx   ú
str | NoneÚNone)r@   Úurlr*   c                 C  s   | s|st dƒ‚d S )Nzpath or url must be provided)r'   )r@   r{   r-   r-   r.   Ú_validate_path_urlì   s    r|   c                 C  s@   | sd S d| kr |   dd¡d S d| kr8|   dd¡d S | S d S )Nú/r   éÿÿÿÿú\)ÚrsplitrD   r-   r-   r.   Ú
_path_nameñ   s    r�   )r{   r*   c                 C  s"   | sd S t | ƒj}| dd¡d S )Nr}   r   r~   )r   r@   r€   )r{   Zurl_pathr-   r-   r.   Ú	_url_nameþ   s    
r‚   )Ú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+   )rQ   rE   )rN   Zhash_valr-   r-   r.   Ú	<genexpr>  s     z#_validate_hashes.<locals>.<genexpr>zHash values must be strings)r'   ÚallÚvalues)rƒ   r-   r-   r.   Ú_validate_hashes  s
    r‡   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.Nry   r[   rE   ÚmessagerZ   zstr | Exceptionrz   )Úcauser[   r*   c                C  sR   t |tƒr>|jr.|r$|› d|j› �n|j| _n|| _|j| _n|| _t|ƒ| _d S )NÚ.)rQ   r'   r[   rˆ   rE   )Úselfr‰   r[   r-   r-   r.   Ú__init__  s    
ÿ
zPylockValidationError.__init__r)   c                 C  s   | j r| j› d| j ›�S | jS )Nz in )r[   rˆ   ©r‹   r-   r-   r.   Ú__str__%  s    zPylockValidationError.__str__)r9   r:   r;   Ú__doc__r[   Ú__annotations__rŒ   rŽ   r-   r-   r-   r.   r'     s   
üc                      s$   e Zd Zdddœ‡ fdd„Z‡  ZS )r`   rE   rz   rF   c                   s   t ƒ jd|d� d S )NzMissing required valuerZ   )ÚsuperrŒ   )r‹   rG   ©Ú	__class__r-   r.   rŒ   ,  s    z _PylockRequiredKeyError.__init__)r9   r:   r;   rŒ   Ú__classcell__r-   r-   r’   r.   r`   +  s   r`   c                   @  s   e Zd ZdZdS )r&   z7Raised when encountering an unsupported `lock_version`.N©r9   r:   r;   r�   r-   r-   r-   r.   r&   0  s   c                   @  s   e Zd ZdZdS )ÚPylockSelectErrorz:Base exception for errors raised by :meth:`Pylock.select`.Nr•   r-   r-   r-   r.   r–   4  s   r–   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#   rE   r]   Nry   r{   r@   Úrequested_revisionÚ	commit_idÚsubdirectory)r{   r@   r™   r›   rz   )r]   r{   r@   r™   rš   r›   r*   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )Nr]   r{   r@   r™   rš   r›   ©ÚobjectÚ__setattr__)r‹   r]   r{   r@   r™   rš   r›   r-   r-   r.   rŒ   A  s    zPackageVcs.__init__r3   r   r4   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 )Nr]   r{   r@   zrequested-revisionz	commit-idr›   )r]   r{   r@   r™   rš   r›   )ra   rE   r_   r|   r@   r{   )r7   r5   Zpackage_vcsr-   r-   r.   r8   S  s    





úzPackageVcs._from_dict)r9   r:   r;   r�   r{   r@   r™   r›   rŒ   r<   r8   r-   r-   r-   r.   r#   8  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!   rE   r@   Nzbool | NoneÚeditablery   r›   )rŸ   r›   rz   )r@   rŸ   r›   r*   c                C  s.   t  | d|¡ t  | d|¡ t  | d|¡ d S )Nr@   rŸ   r›   rœ   )r‹   r@   rŸ   r›   r-   r-   r.   rŒ   g  s    zPackageDirectory.__init__r3   r   r4   c                 C  s&   | t |tdƒt|tdƒt|tdƒd�S )Nr@   rŸ   r›   )r@   rŸ   r›   )ra   rE   r_   r?   r6   r-   r-   r.   r8   s  s
    


ýzPackageDirectory._from_dict)	r9   r:   r;   r�   rŸ   r›   rŒ   r<   r8   r-   r-   r-   r.   r!   a  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    Nry   r{   r@   ú
int | NoneÚsizeúdatetime | NoneÚupload_timeúMapping[str, str]rƒ   r›   )r{   r@   r¡   r£   r›   rz   )r{   r@   r¡   r£   rƒ   r›   r*   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S )Nr{   r@   r¡   r£   rƒ   r›   rœ   )r‹   r{   r@   r¡   r£   rƒ   r›   r-   r-   r.   rŒ   …  s    zPackageArchive.__init__r3   r   r4   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 )Nr{   r@   r¡   úupload-timerƒ   r›   )r{   r@   r¡   r£   rƒ   r›   )
r_   rE   Úintr   rn   r   r‡   r|   r@   r{   )r7   r5   Zpackage_archiver-   r-   r.   r8   —  s    




úzPackageArchive._from_dict)r9   r:   r;   r{   r�   r@   r¡   r£   r›   rŒ   r<   r8   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eddœdd„ƒZdS )r"   Nry   rA   r¢   r£   r{   r@   r    r¡   r¤   rƒ   ©rA   r£   r{   r@   r¡   rz   ©rA   r£   r{   r@   r¡   rƒ   r*   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S ©NrA   r£   r{   r@   r¡   rƒ   rœ   ©r‹   rA   r£   r{   r@   r¡   rƒ   r-   r-   r.   rŒ   ®  s    zPackageSdist.__init__r3   r   r4   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 ©NrA   r¥   r{   r@   r¡   rƒ   )rA   r£   r{   r@   r¡   rƒ   ©
r_   rE   r   r¦   rn   r   r‡   r|   r@   r{   )r7   r5   Zpackage_sdistr-   r-   r.   r8   À  s    




úzPackageSdist._from_dictrE   r)   c                 C  s*   | j pt| jƒpt| jƒ}|s&tdƒ‚|S )zGet the filename of the sdist.zCannot determine sdist filename©rA   r�   r@   r‚   r{   r'   ©r‹   Úfilenamer-   r-   r.   r¯   Í  s    zPackageSdist.filename©r9   r:   r;   rA   r�   r£   r{   r@   r¡   rŒ   r<   r8   Ú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
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eddœdd„ƒZdS )r$   Nry   rA   r¢   r£   r{   r@   r    r¡   r¤   rƒ   r§   rz   r¨   c                C  sX   t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ t  | d|¡ d S r©   rœ   rª   r-   r-   r.   rŒ   ß  s    zPackageWheel.__init__r3   r   r4   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¬   )r7   r5   Zpackage_wheelr-   r-   r.   r8   ñ  s    




úzPackageWheel._from_dictrE   r)   c                 C  s*   | j pt| jƒpt| jƒ}|s&tdƒ‚|S )zGet the filename of the wheel.zCannot determine wheel filenamer­   r®   r-   r-   r.   r¯   þ  s    zPackageWheel.filenamer°   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   rA   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Úarchivery   Ú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¿   rz   )rA   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 )NrA   r²   r³   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¿   rœ   )r‹   rA   r²   r³   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¿   r-   r-   r.   rŒ     s    zPackage.__init__r3   r   r4   c                 C  s   | 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ƒ‚t|j�pg ƒD ]Ð\}}zt|jƒ\}}}	}	W nB tk
�rh }
 z"td|j›�d|› d�d�|
‚W 5 d }
~
X Y nX ||jk�rštd|j›d|j›�d|› d�d�‚|j�r||jk�rtd|j›dt|jƒ›�d|› d�d�‚�q|j�r”zt|jjƒ\}}W n< tk
�r2 }
 ztd|jj›�d
d�|
‚W 5 d }
~
X Y nX ||jk�r^td|jj›d|j›�d
d�‚|j�r”||jk�r”td|jj›dt|jƒ›�d
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 )NrA   r²   úrequires-pythonr¶   r³   r·   r¸   r¹   rº   r»   r¼   zattestation-identitiesr¿   )rA   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 setzInvalid wheel filename zwheels[rd   rZ   zName in z% is not consistent with package name zVersion in z( is not consistent with package version zInvalid sdist filename Úkindzattestation-identities[)"rn   rE   rx   rm   r   r   ri   r   r   ru   r#   r!   r    r_   r"   rv   r$   r?   r»   rq   r¼   r·   r¸   r¹   r'   rf   r   r¯   rk   rA   r²   r   r½   ra   )r7   r5   ÚpackageÚdistributionsZdirect_urlsrg   ÚwheelrA   r²   rH   rl   Zattestation_identityr-   r-   r.   r8   7  sž    








óÿÿÿ

þý
ý
ý
þýýý
ÿ 
ÿþzPackage._from_dictr?   r)   c                 C  s   | j p
| j S r+   )r»   r¼   r�   r-   r-   r.   Ú	is_directˆ  s    zPackage.is_direct)r9   r:   r;   r�   r²   r³   rµ   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¿   rŒ   r<   r8   r±   rÅ   r-   r-   r-   r.   r     s<   
ñ, P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dddd%œd&d'd(d(d)d*œd+d,„ZdS )-r%   z#A class representing a pylock file.r   Úlock_versionNzSequence[Marker] | NonerM   r´   rµ   zSequence[NormalizedName] | NoneÚextraszSequence[str] | NoneÚdependency_groupsÚdefault_groupsrE   Ú
created_byzSequence[Package]Úpackagesr¾   r¿   )rM   rµ   rÇ   rÈ   rÉ   r¿   rz   )
rÆ   rM   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Æ   rM   rµ   rÇ   rÈ   rÉ   rÊ   rË   r¿   rœ   )
r‹   rÆ   rM   rµ   rÇ   rÈ   rÉ   rÊ   rË   r¿   r-   r-   r.   rŒ   ›  s    zPylock.__init__r3   r   r4   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-versionrM   rÇ   zdependency-groupszdefault-groupsz
created-byrÀ   rË   r¿   )	rÆ   rM   rÇ   rÈ   rÉ   rÊ   rµ   rË   r¿   Ú1Ú2zpylock version z is not supportedz1.0z(pylock minor version %s is not supported)rn   rE   r   rt   r   rx   ri   ra   rm   r   rw   r   r_   r   rÆ   r&   Ú_loggerÚwarning)r7   r5   Zpylockr-   r-   r.   r8   ³  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.
        )r8   r6   r-   r-   r.   Ú	from_dictÊ  s    zPylock.from_dictr)   c                 C  s   t j| td�S )z1Convert the Pylock instance to a TOML dictionary.)Zdict_factory)ÚdataclassesZasdictrU   r�   r-   r-   r.   Úto_dictÓ  s    zPylock.to_dictc                 C  s   |   |  ¡ ¡ dS )zqValidate the Pylock instance against the specification.

        Raises :class:`PylockValidationError` otherwise.N)rÐ   rÒ   r�   r-   r-   r.   Úvalidate×  s    zPylock.validate)ÚenvironmentÚtagsrÇ   rÈ   zEnvironment | NonezSequence[Tag] | NonezCollection[str] | NonezfIterator[tuple[Package, PackageVcs | PackageDirectory | PackageArchive | PackageWheel | PackageSdist]])rÔ   rÕ   rÇ   rÈ   r*   c                c  sZ  t |p
tƒ ƒ}tdt|pi t|p"g ƒt|dkr8| jp:g n|ƒd�ƒ}|rP|d ntƒ d }| jr†| j |¡s†t	d|›dt
| jƒ›�ƒ‚| jr¼| jD ] }|jtd|p¤i ƒdd	�r’ q¼q’t	d
ƒ‚i }	t| jƒD ]¢\}
}|jrê|jj|dd	�sêqÊ|j�r*|j |¡�s*t	d|›dt
|jƒ›d|j›d|
› d�	ƒ‚|j|	k�r^t	d|j›d|
› d|	|j d › d�ƒ‚|
|f|	|j< qÊ|	 ¡ D ]Þ\}
}|jdk	�r˜||jfV  nº|jdk	�r²||jfV  n |jdk	�rÌ||jfV  n†|j�r4t|dd„ |jD ƒƒdƒ}|�r ||fV  n2|jdk	�r||jfV  nt	d|j›d|
› d�ƒ‚n|jdk	�rN||jfV  nt‚�qvdS )a�  Select what to install from the lock file.

        The *environment* and *tags* parameters represent the environment being
        selected for. If unspecified, ``packaging.markers.default_environment()`` and
        ``packaging.tags.sys_tags()`` are used.

        The *extras* parameter represents the extras to install.

        The *dependency_groups* parameter represents the groups to install. If
        unspecified, the default groups are used.

        This method must be used on valid Pylock instances (i.e. one obtained
        from :meth:`Pylock.from_dict` or if constructed manually, after calling
        :meth:`Pylock.validate`).
        zdict[str, str | frozenset[str]]N)rÇ   rÈ   Úpython_full_versionzpython_full_version zI in provided environment does not satisfy the Python version requirement zdict[str, str]ÚrequirementrZ   zXProvided environment does not satisfy any of the environments specified in the lock fileZ	lock_filez for package z at packages[rd   z Multiple packages with the name z are selected at packages[z] and packages[r   c                 s  s    | ]}|t |jƒd  fV  qdS )r~   N)r   r¯   )rN   rÄ   r-   r-   r.   r„   p  s   ÿz Pylock.select.<locals>.<genexpr>z6No wheel found matching the provided tags for package z'], and no sdist available as a fallback)r   r   r   ÚdictÚ	frozensetrÉ   r   rµ   Úcontainsr–   rE   rM   Úevaluaterf   rË   r³   rA   r†   r·   r¸   r¹   r¼   Únextr»   ÚNotImplementedError)r‹   rÔ   rÕ   rÇ   rÈ   Zcompatible_tags_selectorÚenvZenv_python_full_versionZ
env_markerZselected_packages_by_nameZpackage_indexrÂ   Z
best_wheelr-   r-   r.   ÚselectÝ  s�     
ÿýýþÿ
ýÿÿ	
 ÿÿÿ$ÿ	"ÿþûÿ	zPylock.select)r9   r:   r;   r�   r�   rM   rµ   rÇ   rÈ   rÉ   r¿   rŒ   r<   r8   rÐ   rÒ   rÓ   rß   r-   r-   r-   r.   r%   �  s8   
õ$	ú)SÚ
__future__r   rÑ   ÚloggingÚreÚcollections.abcr   r   r   r   Útypingr   r   r	   r
   r   r   Úurllib.parser   Úmarkersr   r   r   Ú
specifiersr   rÕ   r   r   Úutilsr   r   r   r   r²   r   r   r   Úpathlibr   Ztyping_extensionsr   r   Ú	getLoggerr9   rÎ   r,   r/   r0   r1   r2   r=   ÚcompilerB   r(   rK   rR   rU   r_   ra   ri   rm   rn   rt   ru   rv   rw   rx   r|   r�   r‚   r‡   rk   r'   r`   r&   r–   r#   r!   r    r"   r$   r   r%   r-   r-   r-   r.   Ú<module>   s’    
ö


(

(
0
0
 
