o
    VhX                     @  s  d dl mZ d dlZd dlZd dl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 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* erd dlm+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 e8e9Z:d Z;d!e; d"e$ d#Z<G d$d% d%Z=dS )&    )annotationsN)sha256)Path)TYPE_CHECKING)Any)ClassVar)cast)canonicalize_name)Version)parse_constraint)
Dependency)Packageparse_marker)InvalidRequirementError)array)comment)document)inline_table)table)__version__)TransitivePackageInfo)TOMLFile)tomllib)NormalizedName)DirectoryDependency)FileDependency)URLDependency)VCSDependency)TOMLDocumentLockfileRepositoryz
@generatedzThis file is automatically z by Poetry z# and should not be changed by hand.c                   @  s  e Zd ZU dZdZg dZded< g edZded< g dZded	< dHddZ	e
dIddZe
dJddZdKddZdKddZdKddZdLddZdMd d!ZdNd#d$ZdOd&d'ZdPd+d,ZdQd.d/ZdRd0d1ZdSd3d4ZdTd6d7ZdJd8d9Z	:dUdVd=d>ZdWd@dAZdXdEdFZdGS )YLocker2.1z>=1,<3)dependenciessourceextraszdev-dependencieszClassVar[list[str]]_legacy_keysgroup_relevant_keys)zrequires-pythonr$   zoptional-dependencies_relevant_project_keyslockr   pyproject_datadict[str, Any]returnNonec                 C  s    || _ || _d | _|  | _d S N)_lock_pyproject_data
_lock_data_get_content_hash_content_hash)selfr+   r,    r7   j/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/poetry/packages/locker.py__init__F   s   zLocker.__init__c                 C     | j S r0   )r1   r6   r7   r7   r8   r+   L   s   zLocker.lockc                 C  s   | j d u r
|  | _ | j S r0   )r3   _get_lock_datar;   r7   r7   r8   	lock_dataP   s   

zLocker.lock_databoolc                 C  s
   | j  S )zM
        Checks whether the locker has been locked (lockfile found).
        )r1   existsr;   r7   r7   r8   	is_lockedW   s   
zLocker.is_lockedc                 C  s`   | j d}t|}W d   n1 sw   Y  |di }d|v r.| j|d k}|S dS )zY
        Checks whether the lock file is still up to date with the current hash.
        rbNmetadatacontent-hashF)r+   openr   loadgetr5   )r6   fr+   rB   freshr7   r7   r8   is_fresh]   s   zLocker.is_freshc                 C  s.   |   sdS t| jd d }|tdkS )NFrB   lock-versionr#   )r@   r
   parser=   )r6   versionr7   r7   r8   is_locked_groups_and_markersk   s   z#Locker.is_locked_groups_and_markersc                 C  s   || _ |  | _d S r0   )r2   r4   r5   )r6   r,   r7   r7   r8   set_pyproject_datar   s   zLocker.set_pyproject_datalocal_configc                 C  s0   t jdtdd || jdi d< |  | _d S )NzyLocker.set_local_config() is deprecated and will be removed in a future release. Use Locker.set_pyproject_data() instead.   )
stackleveltoolpoetry)warningswarnDeprecationWarningr2   
setdefaultr4   r5   )r6   rO   r7   r7   r8   set_local_configv   s   zLocker.set_local_configr!   c                 C  sT   ddl m} | }|  s|S td| jd }|s|S |D ]
}|| | q|S )zG
        Searches and returns a repository of locked packages.
        r   r    list[dict[str, Any]]package)'poetry.repositories.lockfile_repositoryr!   r@   r   r=   add_package_get_locked_package)r6   r!   
repositorylocked_packagesinfor7   r7   r8   locked_repository   s   zLocker.locked_repository$dict[Package, TransitivePackageInfo]c                   s   |   stdi }td| jd }|D ]5}| j|dd}t|d }|dd t tr8 fd	d
|D }n	 fdd
|D }t	d||||< q|S )NzNThis method should not be called if the lock file is not at least version 2.1.rY   rZ   F)with_dependenciesgroupsmarkers*c                   s   i | ]}|t  qS r7   r   .0r(   locked_markerr7   r8   
<dictcomp>       z*Locker.locked_packages.<locals>.<dictcomp>c                   s   i | ]}|t  |d qS )rf   )r   rF   rg   ri   r7   r8   rk      s    r   )
rM   RuntimeErrorr   r=   r]   setrF   
isinstancestrr   )r6   r_   locked_package_infor`   rZ   rd   re   r7   ri   r8   r_      s"   

zLocker.locked_packagesrootr   packagesc                 C  s(   |  ||}| |r| | dS dS )z7Store lock data and eventually persist to the lock fileTF)_compute_lock_data_should_write_write_lock_data)r6   rr   rs   r+   r7   r7   r8   set_lock_data   s
   

zLocker.set_lock_datar   c                 C  s   |  |}|D ]*}t }|d D ]}t }t| D ]\}}	|	||< q|| q|d|d< qt }
|
t	t
 ||
d< |jrQdd t|j D |
d< | j|j| jd|
d< |
S )	NfilesTrZ   c                 S  s$   i | ]\}}|t d d |D qS )c                 s  s    | ]}|j V  qd S r0   )pretty_namerh   depr7   r7   r8   	<genexpr>   s    z7Locker._compute_lock_data.<locals>.<dictcomp>.<genexpr>)sorted)rh   extradepsr7   r7   r8   rk      s    z-Locker._compute_lock_data.<locals>.<dictcomp>r&   )rJ   python-versionsrC   rB   )_lock_packagesr   r   r}   itemsappend	multiliner   addr   GENERATED_COMMENTr&   _VERSIONpython_versionsr5   )r6   rr   rs   package_specsrZ   rx   rG   file_metadatakvr+   r7   r7   r8   rt      s*   



zLocker._compute_lock_datac                 C  s8   d}|   rz| j}W n
 ty   Y |S w ||k}|S )NT)r@   r=   rm   )r6   r+   do_writer=   r7   r7   r8   ru      s   
zLocker._should_writedatac                 C  s   | j  rct| j ddd}| }W d    n1 sw   Y  |dr(dnd}| }|dkr9|dd}n|dkrDtdd|}t| j dddd}|	| W d    n1 s]w   Y  n
t
| j }|	| d | _d S )Nzutf-8 )encodingnewlinez

z	(?<!\r)\nw)r+   r?   rD   readlineendswith	as_stringreplaceresubwriter   r3   )r6   r   rG   linelinesepcontentlockfiler7   r7   r8   rv      s"   




zLocker._write_lock_datarp   c                 C  s   | j di }| j di di }i }| jD ]}||}|dur&|||< qi }| jD ]}||}|du r?|| jvs>|r?q,|||< q,|rN|d|id}n|}ttj|dd 	 S )zV
        Returns the sha256 hash of the sorted content of the pyproject file.
        projectrR   rS   N)r   rR   T)	sort_keys)
r2   rF   r*   r)   r'   r   jsondumpsencode	hexdigest)r6   project_contenttool_poetry_contentrelevant_project_contentkeyr   relevant_poetry_contentrelevant_contentr7   r7   r8   r4   
  s*   




zLocker._get_content_hashc           	      C  s   | j  s	td| j d%}zt|}W n tjy, } ztd| dd }~ww W d    n1 s7w   Y  d|vrDtd|d }d|vrPtdt|d }t| j	}t
| j}||}|rt||k rttd	 |S |sztd
|S )Nz1No lockfile found. Unable to read locked packagesrA   zUnable to read the lock file (z).rB   zfThe lock file does not have a metadata entry.
Regenerate the lock file with the `poetry lock` command.rJ   z|The lock file is not compatible with the current version of Poetry.
Regenerate the lock file with the `poetry lock` command.zThe lock file might not be compatible with the current version of Poetry.
Upgrade Poetry to ensure the lock file is read properly or, alternatively, regenerate the lock file with the `poetry lock` command.zThe lock file is not compatible with the current version of Poetry.
Upgrade Poetry to be able to read the lock file or, alternatively, regenerate the lock file with the `poetry lock` command.)r+   r?   rm   rD   r   rE   TOMLDecodeErrorr
   rK   r   r   _READ_VERSION_RANGEallowsloggerwarning)	r6   rG   r=   erB   lock_versioncurrent_versionaccepted_versionslock_version_allowedr7   r7   r8   r<   0  sD   


zLocker._get_lock_dataTr`   rc   c                   s  | di }| d}| d}|dv r| jj|  }|d }t||d ||| d| d| d	d
}| dd|_|d |_t	d| j
d }| d}	|	d urZ|	|_n;d|v rpt	d|d }
dd |
| D |_n%|dv rxg |_n|d | }|dkrt|j  fdd|D |_n||_|d |_d|v r|d |_|rXddlm} i }| di }|r| D ]P\}}t|}g ||< |D ]A}zt|}W n0 ty   td|}|s |d}|dpd}|dpd }t|||d!d"}Y nw || | qq||_| d#i  D ]@\}}| jj}|jd$kr2|jd us-J t|j}t|t rK|D ]}|!|j"|||d% q:q|!|j"|||d% q|S )&Nr%   typeurl)	directoryfilenamerL   	referenceresolved_referencesubdirectory)source_type
source_urlsource_referencesource_resolved_referencesource_subdirectorydescriptionr   optionalr-   rB   rx   hashesc                 S  s   g | ]}||d qS ))r   hashr7   )rh   hr7   r7   r8   
<listcomp>  rl   z.Locker._get_locked_package.<locals>.<listcomp>>   gitr   r   r   c                   s   g | ]
}|d   kr|qS )r   r7   )rh   itemfilenamer7   r8   r     s    r   developr   )Factoryr&   z$^(.+?)(?:\[(.+?)])?(?:\s+\((.+)\))?$   rP      rf   ,)r&   r$   r   )root_dir)#rF   r+   parentjoinpathresolveas_posixr   r   r   r   r=   rx   r   r   r   r   poetry.factoryr   r   r	   r   create_from_pep_508r   r   matchr(   splitr   r&   r   r   ro   listadd_dependencycreate_dependency)r6   r`   rc   r%   r   r   r   rZ   rB   package_filesr   rx   r   package_extrasr&   r   r{   
dependencymdep_name
constraintr   cr7   r   r8   r]   \  s   

	








zLocker._get_locked_packagerY   c                 C  s8   g }t |dd dD ]}| ||| }|| q
|S )Nc                 S  s4   | j | j| jpd| jpd| jpd| jpd| jpdfS )Nr   )r   rL   r   r   r   r   r   xr7   r7   r8   <lambda>  s   z'Locker._lock_packages.<locals>.<lambda>r   )r}   _dump_packager   )r6   rs   lockedrZ   specr7   r7   r8   r     s   
zLocker._lock_packagesrZ   transitive_infor   c              	   C  s  i }t |jdd dD ]}||jg  t }| r/td|}|j |d< |j	r.d|d< nY|
 r@td|}|j |d< nH| rOtd	|}|j|d
< n9| rtd|}|j||j< |jrg|j|d< n|jrp|j|d< n|jrx|j|d< |jr|j|d< nt|j|d< |jrt |j|d< | rd|d< |j st|j|d< ||j | q| D ]\}}tdd |D rdd |D ||< q|j|j|jpd|j|j t |j!dd dd}|j"r(t#t$|j"%  }	dkrt&t'|	 }
 st|
|d< n#t |d< t |j" dd dD ]\}}| s&t||d |< qt |j(dd d|d< |rot) |d< | D ]/\}}t#|dkrT|d  |d |< q?t* +d|d |< |D ]}|d | | q`q?|jri }t |j D ]\}}t d!d |D ||< q|||d< |j,r|j,}|j-d"v rt.t/j0t.|1 t.| j2j31  }i |d#< |j-r|j-|d# d$< ||d# d
< |j4r|j4|d# d%< |j5r|j5|d# d&< |j6r|j6|d# d< |j-d'v r|j	|d< |S )(Nc                 S  r:   r0   )r   )dr7   r7   r8   r     s    z&Locker._dump_package.<locals>.<lambda>r   r   pathTr   r   r   r   r   branchtagrevr   rL   r&   r   re   c                 s  s$    | ]}t |d kod|v V  qdS )r   rL   N)lenrh   r   r7   r7   r8   r|     s
    
z'Locker._dump_package.<locals>.<genexpr>c                 S  s   g | ]}|d  qS )rL   r7   r   r7   r7   r8   r     s    z(Locker._dump_package.<locals>.<listcomp>r   c                 S  s   | dk| fS )Nmainr7   r   r7   r7   r8   r   $  s    )r   rL   r   r   r   rd   r   c                 S  s   | d dk| d fS )Nr   r   r7   r   r7   r7   r8   r   .  s    c                 S  s   | d S )Nr   r7   r   r7   r7   r8   r   2  s    rx   r$   r   c                 s  s    | ]	}|j d dV  qdS )F)with_extrasN)
to_pep_508rz   r7   r7   r8   r|   A  s    )r   r   r%   r   r   r   )r   r   )7r}   requiresrW   ry   r   is_directoryr   r   r   r   is_fileis_urlr   is_vcsr%   vcsr   r   r   r   rp   pretty_constraintr&   is_optionalmarkeris_anyr   r   allpretty_versionr   r   r   rd   re   r   rn   valuesnextiterrx   r   r   r   r   r   r   osrelpathr   r+   r   r   r   r   )r6   rZ   r   r$   r   r   dependency_nameconstraintsr   re   r   r   r   r&   r   r   r   r7   r7   r8   r     s   













zLocker._dump_packageN)r+   r   r,   r-   r.   r/   )r.   r   )r.   r-   )r.   r>   )r,   r-   r.   r/   )rO   r-   r.   r/   )r.   r!   )r.   rb   )rr   r   rs   rb   r.   r>   )rr   r   rs   rb   r.   r   )r+   r   r.   r>   )r   r   r.   r/   )r.   rp   )T)r`   r-   rc   r>   r.   r   )rs   rb   r.   rY   )rZ   r   r   r   r.   r-   )__name__
__module____qualname__r   r   r'   __annotations__r)   r*   r9   propertyr+   r=   r@   rI   rM   rN   rX   ra   r_   rw   rt   ru   rv   r4   r<   r]   r   r   r7   r7   r7   r8   r"   5   s8   
 











#


&-
ir"   )>
__future__r   r   loggingr  r   rT   hashlibr   pathlibr   typingr   r   r   r   packaging.utilsr	   poetry.core.constraints.versionr
   r   poetry.core.packages.dependencyr   poetry.core.packages.packager   poetry.core.version.markersr    poetry.core.version.requirementsr   tomlkitr   r   r   r   r   poetry.__version__r   'poetry.packages.transitive_package_infor   poetry.toml.filer   poetry.utils._compatr   r   )poetry.core.packages.directory_dependencyr   $poetry.core.packages.file_dependencyr   #poetry.core.packages.url_dependencyr   #poetry.core.packages.vcs_dependencyr   tomlkit.toml_documentr   r[   r!   	getLoggerr	  r   _GENERATED_IDENTIFIERr   r"   r7   r7   r7   r8   <module>   sV    
