o
    iC                     @  sD  d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	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 d dlmZ e
rRd dlmZ edZd'ddZd(ddZeG dd dZeG dd dZeG dd dZ eG dd  d Z!eG d!d" d"Z"eG d#d$ d$Z#eG d%d& d&Z$dS ))    )annotationsN)Iterable)	dataclass)Path)TYPE_CHECKINGAny)tomli_w)ArchiveInfoDirInfoVcsInfo)Link)InstallRequirement)url_to_path)Selfz^pylock\.([^.]+)\.toml$pathr   returnboolc                 C  s   | j dkpttt| j S )Nzpylock.toml)namer   rematchPYLOCK_FILE_NAME_RE)r    r   ;lib/python3.10/site-packages/pip/_internal/models/pylock.pyis_valid_pylock_file_name   s   r   datalist[tuple[str, Any]]dict[str, Any]c                 C  s   dd | D S )Nc                 S  s&   i | ]\}}|d ur| dd|qS )N_-)replace).0keyvaluer   r   r   
<dictcomp>   s   & z&_toml_dict_factory.<locals>.<dictcomp>r   )r   r   r   r   _toml_dict_factory   s   r$   c                   @  s6   e Zd ZU ded< ded< ded< ded< ded< dS )	
PackageVcsstrtype
str | Noneurlrequested_revision	commit_idsubdirectoryN__name__
__module____qualname____annotations__r   r   r   r   r%      s   
 r%   c                   @  &   e Zd ZU ded< ded< ded< dS )PackageDirectoryr&   r   zbool | Noneeditabler(   r,   Nr-   r   r   r   r   r3   )   s   
 r3   c                   @  s&   e Zd ZU ded< ded< ded< dS )PackageArchiver(   r)   dict[str, str]hashesr,   Nr-   r   r   r   r   r5   0   s   
 r5   c                   @  r2   )PackageSdistr&   r   r(   r)   r6   r7   Nr-   r   r   r   r   r8   :      
 r8   c                   @  r2   )PackageWheelr&   r   r(   r)   r6   r7   Nr-   r   r   r   r   r:   D   r9   r:   c                   @  sl   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< e
dddZdS )Packager&   r   Nr(   versionzPackageVcs | NonevcszPackageDirectory | None	directoryzPackageArchive | NonearchivezPackageSdist | Nonesdistzlist[PackageWheel] | Nonewheelsireqr   base_dirr   r   r   c                 C  s`  |  }| }|j}|sJ | |jd}|jrut|jtr2t|jj	|j
|jj|jj|jd|_	|S t|jtrWttt|j
  | |jjrN|jjnd |jd|_|S t|jtrr|jjsdt t|j
|jj|jd|_|S t t|j|_t|jtr|jjst t|j
}|jrt|j |j
|jjdg|_!|S t"|j |j
|jjd|_#|S t )Nr   )r'   r)   r*   r+   r,   )r   r4   r,   )r)   r7   r,   )r   r)   r7   )$resolveZget_distdownload_infoZcanonical_nameZ	is_direct
isinstanceinfor   r%   r=   r)   r*   r+   r,   r
   r3   r   r   relative_toas_posixr4   r>   r	   r7   NotImplementedErrorr5   r?   r&   r<   r   Zis_wheelr:   filenamerA   r8   r@   )clsrB   rC   ZdistrF   packagelinkr   r   r   from_install_requirement^   sr   8
0
z Package.from_install_requirement)rB   r   rC   r   r   r   )r.   r/   r0   r1   r<   r=   r>   r?   r@   rA   classmethodrP   r   r   r   r   r;   N   s   
 r;   c                   @  sR   e Zd ZU dZded< dZded< ejedZ	ded< dd
dZ
edddZdS )Pylockz1.0r&   lock_versionZpip
created_by)default_factoryzlist[Package]packagesr   c                 C  s   t tj| tdS )N)Zdict_factory)r   dumpsdataclassesZasdictr$   )selfr   r   r   as_toml   s   zPylock.as_tomlinstall_requirementsIterable[InstallRequirement]rC   r   r   c                   s$   | t  fdd|D dd ddS )Nc                 3  s    | ]	}t | V  qd S N)r;   rP   )r    rB   rC   r   r   	<genexpr>   s
    

z3Pylock.from_install_requirements.<locals>.<genexpr>c                 S  s   | j S r]   rD   )pr   r   r   <lambda>   s    z2Pylock.from_install_requirements.<locals>.<lambda>)r!   )rV   )sorted)rM   r[   rC   r   r^   r   from_install_requirements   s   
z Pylock.from_install_requirementsN)r   r&   )r[   r\   rC   r   r   r   )r.   r/   r0   rS   r1   rT   rX   ZfieldlistrV   rZ   rQ   rc   r   r   r   r   rR      s   
 
rR   )r   r   r   r   )r   r   r   r   )%Z
__future__r   rX   r   Zcollections.abcr   r   pathlibr   typingr   r   Zpip._vendorr   Zpip._internal.models.direct_urlr	   r
   r   Zpip._internal.models.linkr   Zpip._internal.req.req_installr   Zpip._internal.utils.urlsr   Ztyping_extensionsr   compiler   r   r$   r%   r3   r5   r8   r:   r;   rR   r   r   r   r   <module>   s>    


				S