o
    tBh\                     @  s  d Z 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	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 dd	lmZ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"m#Z# e$e%Z&ed"ddZ'd#ddZ(d$d%d d!Z)dS )&zFind missing requirements.    )annotationsN)cache)Path)CallableIterable)mock)NormalizedNamecanonicalize_name)_PackageInfosearch_packages_info)
PipSession)install_req_from_line)parse_requirements)common)FoundModuleversion_inforeturnlist[_PackageInfo]c                  C  sZ   dd t j D } tjtjddi tt	| dW  d    S 1 s&w   Y  d S )Nc                 S  s   g | ]}|j d  qS )Name)metadata).0dist r   w/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/pip_check_reqs/find_missing_reqs.py
<listcomp>%   s    
z%get_packages_info.<locals>.<listcomp>_PIP_USE_IMPORTLIB_METADATAFalse)query)
	importlibr   distributionsr   patchdictosenvironlistr   )all_pkgsr   r   r   get_packages_info#   s   $r&   requirements_filenamer   pathsIterable[Path]ignore_files_functionCallable[[str], bool]ignore_modules_function.list[tuple[NormalizedName, list[FoundModule]]]c              
     s  t j|||d}i }t }t  }|D ]\}|j}	|j}
g }|jp"g D ]&}t|
| }| }z||}W n t	yA   |}Y nw |
t| q#td|	|
 |D ]}t|
| }| }|	||< t j|d}|ro|	||< qSqtt| D ]+\}}|j|v rt||j d}td|||j  | 
| qztd||j qzt  tt| t dD ]}t|jj}t|tsJ td|  t| q fd	d
D S )N)r(   r*   r,   zinstalled package: %s (at %s))path)namez!used module: %s (from package %s)z8used module: %s (from file %s, assuming stdlib or local))sessionzfound requirement: %sc                   s    g | ]}| vr|| fqS r   r   )r   r/   explicitusedr   r   r      s     z%find_missing_reqs.<locals>.<listcomp>)r   find_imported_modulesr&   r   resolver/   locationfilesrelative_to
ValueErrorappendstrlogdebugpackage_pathcollectionsdefaultdictr$   itemsfilenamer	   setr   r   r   requirement
isinstanceadd)r'   r(   r*   r,   used_modulesinstalled_filespackages_infoherepackagepackage_namepackage_locationpackage_filesitemitem_location_relitem_locationrelative_item_locationpackage_filer.   r>   modnameinfo	used_namerD   requirement_namer   r1   r   find_missing_reqs0   s   


rX   	argumentslist[str] | NoneNonec              
   C  s  d}t |}|jdtdd |jdddtdd	d
 |jddddg dd |jddddg dd |jddddddd |jddddddd |jdd d!ddd"d || }|jrgtjt	 d#  t
d$ |jso|d% tj|jd&}tj|jd&}tjd'd( |jrtj}n
|jrtj}ntj}t| tj| tt	  t|j|j||d)}|rtd* |D ]\}}	|	D ]}
|
jD ]\}}td+||||
j qqq|rt
d, d S d S )-Nz+usage: %prog [options] files or directoriesr(   *)typenargsz--requirements-filer'   PATHzrequirements.txtz>path to the requirements file (defaults to "requirements.txt"))destmetavarr]   defaulthelpz-fz--ignore-fileignore_filesr:   zfile paths globs to ignore)r`   actionrb   rc   z-mz--ignore-moduleignore_modsz*used module names (globs are ok) to ignorez-vz	--verboseverbose
store_trueFzbe more verbosez-dz--debugr=   zbe *really* verbosez-Vz	--versionversionzdisplay version information
r   z(no source files or directories specified)
ignore_cfgz%(message)s)format)r'   r(   r*   r,   zMissing requirements:z%s:%s dist=%s module=%s   ) argparseArgumentParseradd_argumentr   
parse_argsri   sysstdoutwriter   exitr(   errorr   ignorerrd   rf   loggingbasicConfigr=   DEBUGrg   INFOWARNr<   setLevelrU   rX   r'   warning	locationsrT   )rY   usageparserparse_resultrd   rf   levelmissingr/   usesuserB   linenor   r   r   main   s   
	
	




r   )r   r   )
r'   r   r(   r)   r*   r+   r,   r+   r   r-   )N)rY   rZ   r   r[   )*__doc__
__future__r   rn   r?   importlib.metadatar   rx   r"   rr   	functoolsr   pathlibr   typingr   r   unittestr   packaging.utilsr   r	   pip._internal.commands.showr
   r   pip._internal.network.sessionr   pip._internal.req.constructorsr   pip._internal.req.req_filer   pip_check_reqsr   pip_check_reqs.commonr   r   	getLogger__name__r<   r&   rX   r   r   r   r   r   <module>   s0    

Z