o
    g7                     @   s  d 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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 dd	lmZmZmZmZmZmZmZmZmZ dd
lmZ ddl m!Z!m"Z" ddl#m$Z$ zddl%m%Z% W n e&y   dZ%Y nw zddl'm(Z( W n e&y   dZ(Y nw ede)ded fddZ*G dd de
dZ+G dd de+Z,G dd de+Z-G dd de+Z.G dd de+Z/G dd de+Z0G d d! d!e0Z1G d"d# d#e+Z2G d$d% d%Z3dS )&z8Finders try to find right section for passed module name    N)ABCMetaabstractmethod)contextmanager)fnmatch)	lru_cache)glob)Path)	DictIterableIteratorListOptionalPatternSequenceTupleType)sections)KNOWN_SECTION_MAPPINGConfigexists_case_sensitive)pipreqs)parse_requirementspathreturnc              	   c   s8    t  }t |  zdV  W t | dS t | w )zKContext manager for changing dir and restoring previous workdir after exit.N)osgetcwdchdir)r   curdir r   O/var/www/html/gwz/venv/lib/python3.10/site-packages/isort/deprecated/finders.pyr   "   s   
r   c                   @   s8   e Zd ZdeddfddZededee fddZdS )	
BaseFinderconfigr   Nc                 C   s
   || _ d S N)r"   )selfr"   r   r   r    __init__.   s   
zBaseFinder.__init__module_namec                 C      t r#   NotImplementedErrorr$   r&   r   r   r    find1      zBaseFinder.find)	__name__
__module____qualname__r   r%   r   strr   r+   r   r   r   r    r!   -   s    r!   )	metaclassc                   @   "   e Zd Zdedee fddZdS )ForcedSeparateFinderr&   r   c                 C   sJ   | j jD ]}|}|ds| d}t||st|d| r"|  S qd S )N*.)r"   forced_separateendswithr   )r$   r&   r6   	path_globr   r   r    r+   7   s   

zForcedSeparateFinder.findNr-   r.   r/   r0   r   r+   r   r   r   r    r3   6       r3   c                   @   r2   )LocalFinderr&   r   c                 C   s   | drdS d S )Nr5   LOCALFOLDER)
startswithr*   r   r   r    r+   D   s   
zLocalFinder.findNr9   r   r   r   r    r;   C   r:   r;   c                       sR   e Zd Zdeddf fddZdedee fddZd	edee fd
dZ	  Z
S )KnownPatternFinderr"   r   Nc              	      s   t  | g  _t|jD ]E}t|| }d| }tt	 j
| j
j|g } fdd|D }|D ]}d|dddd d	 } jt||f q7qd S )
Nknown_c                    s    g | ]}  |D ]}|q	qS r   )_parse_known_pattern).0known_patternpatternr$   r   r    
<listcomp>U   s    z/KnownPatternFinder.__init__.<locals>.<listcomp>^r4   z.*?z.?$)superr%   known_patternsreversedr   r   getlowerlistgetattrr"   known_otherreplaceappendrecompile)r$   r"   	placementknown_placement
config_keyrJ   rB   regexp	__class__rD   r    r%   K   s    

zKnownPatternFinder.__init__rC   c                    sD     tjjr fddttjjj D }|S  g}|S )zIExpand pattern if identified as a directory and return found sub packagesc              	      s,   g | ]}t jt jjj |r|qS r   )r   r   isdirjoinr"   	directory)rA   filenamerC   r$   r   r    rE   a   s    z;KnownPatternFinder._parse_known_pattern.<locals>.<listcomp>)r7   r   r   seplistdirr\   r"   r]   )r$   rC   patternsr   r_   r    r@   ^   s   z'KnownPatternFinder._parse_known_patternr&   c                    s\   | d  fddtt ddD }|D ]}| jD ]\}}||r*|    S qqd S )Nr5   c                 3   s"    | ]}d   d| V  qdS )r5   N)r\   )rA   first_kpartsr   r    	<genexpr>n   s     z*KnownPatternFinder.find.<locals>.<genexpr>r   )splitrangelenrJ   match)r$   r&   module_names_to_checkmodule_name_to_checkrC   rU   r   rd   r    r+   k   s   

zKnownPatternFinder.find)r-   r.   r/   r   r%   r0   r   r@   r   r+   __classcell__r   r   rY   r    r>   J   s    r>   c                       sB   e Zd Zddededdf fddZdedee fd	d
Z  ZS )
PathFinderr5   r"   r   r   Nc                    s  t  | tj|}| d}||g| _| jjptj	d| _| jr,tj
| j| _d| _| jr|| j d| _t| j dD ]}|| jvrN| j| qAt| j dD ]}|| jvrd| j| qWt| j dD ]}tj|r{| j| qm| jjptj	dpd| _| jrtj
| j| _t| j dD ]}|| jvr| j| qt| j dD ]}	|	| jvr| j|	 qtjt d	 | _| j| jvr| j| j tjd
d  D ]}
|
| jvr| j|
 qd S )Nz/srcVIRTUAL_ENV z/src/z/lib/python*/site-packagesz/lib/python*/*/site-packagesz/src/*CONDA_PREFIXstdlib   )rI   r%   r   r   abspathpathsr"   virtual_envenvironrL   realpathvirtual_env_srcr   rR   r[   	conda_envnormcase	sysconfig	get_pathsstdlib_lib_prefixsys)r$   r"   r   root_dirsrc_dir	venv_pathnested_venv_pathvenv_src_path
conda_pathnested_conda_pathsystem_pathrY   r   r    r%   w   sR   






zPathFinder.__init__r&   c                    s>  | j D ]}d||dd f t  }t d p/t fddtjj	D p/t d }t o9t
j }|s>|rd|v sNd	|v sN| jrS| j|v rStj  S t
j|| jkratj  S | jrn| j|v rntj  S | jjD ]}||jv r| j|stj    S qrt
j|| jrtj  S | jj  S qd S )
N/r5   r   z.pyc                 3   s    | ]	}t  | V  qd S r#   r   )rA   
ext_suffixpackage_pathr   r    rf      s
    

z"PathFinder.find.<locals>.<genexpr>z/__init__.pyzsite-packageszdist-packages)rv   r\   rh   r   resolver   any	importlib	machineryEXTENSION_SUFFIXESr   r   r[   rw   rz   r   
THIRDPARTYr|   r   STDLIBr{   r"   	src_pathsparents
is_skipped
FIRSTPARTYr=   default_section)r$   r&   prefixpath_obj	is_module
is_packagesrc_pathr   r   r    r+      s>   






zPathFinder.findr5   )	r-   r.   r/   r   r0   r%   r   r+   rn   r   r   rY   r    ro   v   s    .ro   c                       s   e Zd ZdZddededdf fddZededee fd	d
Z	ededee fddZ
edeeeef  fddZdee fddZededee fddZdee fddZdedefddZdedee fddZ  ZS )ReqsBaseFinderFr5   r"   r   r   Nc                    s4   t  | || _| jr|  | _|  | _d S d S r#   )rI   r%   r   enabled_load_mappingmapping_load_namesnames)r$   r"   r   rY   r   r    r%      s   
zReqsBaseFinder.__init__c                 C   r'   r#   r(   r$   r   r   r   r    
_get_names   r,   zReqsBaseFinder._get_namesc                 C   r'   r#   r(   r   r   r   r    _get_files_from_dir   r,   z"ReqsBaseFinder._get_files_from_dirc                  C   s   t sdS tjtt } tj| d} t| }i }|D ]}| 	d\}}}|||< q|W  d   S 1 s:w   Y  dS )zxReturn list of mappings `package_name -> module_name`

        Example:
            django-haystack -> haystack
        Nr   :)
r   r   r   dirnameinspectgetfiler\   openstrip	partition)r   fmappingslineimport_name_	pypi_namer   r   r    r      s   

$zReqsBaseFinder._load_mappingc                 C   s6   g }|   D ]}| |D ]
}|| | qq|S )z3Return list of thirdparty modules from requirements)
_get_filesr   rR   _normalize_name)r$   r   r   namer   r   r    r      s   zReqsBaseFinder._load_namesc                 c   s4    d}| |kr| }| V  t j| } | |ksd S d S )Nrq   )r   r   r   )r   prevr   r   r    _get_parents   s   zReqsBaseFinder._get_parentsc                 c   sL    t j| j}t j|rt j|}| |D ]
}| |E dH  qdS )z&Return paths to all requirements filesN)r   r   ru   isfiler   r   r   r   r   r   r    r      s   zReqsBaseFinder._get_filesr   c                 C   s,   | j r| j |dd|}| ddS )zConvert package name to module name

        Examples:
            Django -> django
            django-haystack -> django_haystack
            Flask-RESTFul -> flask_restful
        -r   )r   rL   rQ   rM   )r$   r   r   r   r    r     s   zReqsBaseFinder._normalize_namer&   c                 C   sL   | j sd S |d\}}}| }|sd S | jD ]}||kr#tj  S qd S )Nr5   )r   r   rM   r   r   r   )r$   r&   _sep_submodulesr   r   r   r    r+     s   

zReqsBaseFinder.findr   )r-   r.   r/   r   r   r0   r%   r   r   r   r   staticmethodr   r	   r   r   r   r   r   r   r+   rn   r   r   rY   r    r      s    	r   c                   @   s   e Zd ZdZeeZdedee fddZ	e
edddedee fdd	Zdedee fd
dZe
edddedee fddZdS )RequirementsFinder)z.txtz.inr   r   c                 c       |  |E dH  dS )z3Return paths to requirements files from passed dir.N)_get_files_from_dir_cachedr   r   r   r    r   &     z&RequirementsFinder._get_files_from_dir   )maxsizec              	   C   s   g }t |D ]J}d|vrqt j||}t j|r9t |D ]}| jD ]}||r6|t j|| q%q qt j|rQ| jD ]}||rP||  nqBq|S )Nrequirements)	r   ra   r   r\   r[   extsr7   rR   r   )clsr   resultsfname	full_pathsubfile_nameextr   r   r    r   *  s*   




z-RequirementsFinder._get_files_from_dir_cachedc                 c   r   )z5Load required packages from path to requirements fileN)_get_names_cachedr   r   r   r    r   E  r   zRequirementsFinder._get_namesc                 C   sf   g }t tj| tt|}| D ]}|jr ||j qW d    |S 1 s,w   Y  |S r#   )	r   r   r   r   r   r   valuesr   rR   )r   r   resultr   reqr   r   r    r   I  s   
z$RequirementsFinder._get_names_cachedN)r-   r.   r/   r   boolr   r   r0   r   r   classmethodr   r   r   r   r   r   r   r   r    r   "  s    r   c                   @   r2   )DefaultFinderr&   r   c                 C   s   | j jS r#   )r"   r   r*   r   r   r    r+   X  s   zDefaultFinder.findNr9   r   r   r   r    r   W  r:   r   c                   @   sj   e Zd ZU eeeeeefZ	e
ee  ed< 	ddedeeee   ddfddZdedee fd	d
ZdS )FindersManager_default_finders_classesNr"   finder_classesr   c                 C   s   |j | _ |d u r| j}g }|D ]+}z	||| W q ty: } z| j r0t|j d| d W Y d }~qd }~ww t|| _d S )N encountered an error (z)) during instantiation and cannot be used)verboser   rR   	Exceptionprintr-   tuplefinders)r$   r"   r   r   
finder_cls	exceptionr   r   r    r%   f  s   	zFindersManager.__init__r&   c                 C   sx   | j D ]6}z||}|d ur|W   S W q ty9 } z| jr/t|jj d| d| d W Y d }~qd }~ww d S )Nr   z) while trying to identify the z module)r   r+   r   r   r   rZ   r-   )r$   r&   findersectionr   r   r   r    r+   |  s    


zFindersManager.findr#   )r-   r.   r/   r3   r;   r>   ro   r   r   r   r   r   r!   __annotations__r   r   r
   r%   r0   r+   r   r   r   r    r   \  s"   
 

r   )4__doc__importlib.machineryr   r   r   os.pathrS   r   r}   abcr   r   
contextlibr   r   	functoolsr   r   pathlibr   typingr	   r
   r   r   r   r   r   r   r   isortr   isort.settingsr   r   isort.utilsr   r   ImportErrorpip_apir   r0   r   r!   r3   r;   r>   ro   r   r   r   r   r   r   r   r    <module>   sN    ,
	,RZ5