o
    bX4                     @   s  d Z ddlmZmZmZ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 ddlmZmZ zdd	lmZ W n eyS   dZY nw zdd
lmZ ddlmZ W n# ey   zdd
lmZ ddlmZ W n ey   dZY nw Y nw 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dlmZ Y nw dddd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"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!Z+dS )'z9Finders try to find right section for passed module name
    )absolute_importdivisionprint_functionunicode_literalsN)fnmatch)glob   )PY2)chdirexists_case_sensitive)pipreqs)
PipSession)parse_requirements)Pipfile)	lru_cacheZSTANDARD_LIBRARYZFUTURE_LIBRARYZFIRST_PARTYZTHIRD_PARTY)STDLIBZFUTUREZ
FIRSTPARTY
THIRDPARTYc                   @      e Zd Zdd ZdS )
BaseFinderc                 C   s   || _ || _d S N)configsections)selfr   r    r   L/var/www/secure340b-portal/env/lib/python3.10/site-packages/isort/finders.py__init__5   s   
zBaseFinder.__init__N)__name__
__module____qualname__r   r   r   r   r   r   4       r   c                   @   r   )ForcedSeparateFinderc                 C   sJ   | j d D ]}|}|dsd| }t||st|d| r"|  S qd S )Nforced_separate*z%s*.)r   endswithr   )r   module_namer!   	path_globr   r   r   find;   s   
zForcedSeparateFinder.findNr   r   r   r'   r   r   r   r   r    :   r   r    c                   @   r   )LocalFinderc                 C   s   | dr	| jjS d S Nr#   )
startswithr   ZLOCALFOLDERr   r%   r   r   r   r'   G   s   
zLocalFinder.findNr(   r   r   r   r   r)   F   r   r)   c                       s8   e Zd Z fddZedd Zdd Zdd Z  ZS )	KnownPatternFinderc           	         s   t t || g  _t jD ]=}t||}d|	 } j
|g } fdd|D }|D ]}d|dddd d	 } jt||f q2qd S )
Nz	known_{0}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>^r"   z.*?z.?$)superr-   r   known_patternsreversedr   KNOWN_SECTION_MAPPINGgetformatlowerr   replaceappendrecompile)	r   r   r   	placementZknown_placementZ
config_keyr8   r0   regexp	__class__r2   r   r   M   s   
zKnownPatternFinder.__init__c                 C   s&   t rtjtj| dS tj| S )z7
        Evaluates if path is a python package
        z__init__.py)r	   ospathexistsjoinisdir)rG   r   r   r   _is_package^   s   zKnownPatternFinder._is_packagec                    s6     tjjr fddt D }|S  g}|S )z[
        Expand pattern if identified as a directory and return found sub packages
        c                    s$   g | ]} tj |r|qS r   )rK   rF   rG   rI   )r/   filenamer1   r   r   r   r3   m   s    z;KnownPatternFinder._parse_known_pattern.<locals>.<listcomp>)r$   rF   rG   seplistdir)r   r1   patternsr   rM   r   r.   h   s   z'KnownPatternFinder._parse_known_patternc                    s\   | d  fddtt ddD }|D ]}| jD ]\}}||r*|    S qqd S )Nr#   c                 3   s"    | ]}d   d| V  qdS )r#   N)rI   )r/   Zfirst_kpartsr   r   	<genexpr>z   s     z*KnownPatternFinder.find.<locals>.<genexpr>r   )splitrangelenr8   match)r   r%   Zmodule_names_to_checkZmodule_name_to_checkr1   rB   r   rQ   r   r'   w   s   

zKnownPatternFinder.find)	r   r   r   r   staticmethodrK   r.   r'   __classcell__r   r   rD   r   r-   L   s    
	r-   c                       s$   e Zd Z fddZdd Z  ZS )
PathFinderc                    s  t t| || t g| _| jdptjd| _	| j	r'tj
| j	| _	d| _| j	rwd| j	| _td| j	D ]}|| jvrI| j| q<td| j	D ]}|| jvr_| j| qRtd| j	D ]}tj
|rv| j| qh| jdptjd	| _| jrtj
| j| _td| jD ]}|| jvr| j| qtd| jD ]}|| jvr| j| qtj
t d
 | _| j| jvr| j| j tdpd| _tj
dd  D ]}|| jvr| j| qd S )Nvirtual_envZVIRTUAL_ENVFz{0}/src/z{0}/lib/python*/site-packagesz{0}/lib/python*/*/site-packagesz	{0}/src/*	conda_envZCONDA_PREFIXstdlib
EXT_SUFFIX.sor   )r7   r[   r   rF   getcwdpathsr   r;   environr\   rG   realpathvirtual_env_srcr<   r   r?   rJ   r]   normcase	sysconfig	get_pathsstdlib_lib_prefixget_config_var
ext_suffixsysr   r   r   rG   rD   r   r   r      sP   




zPathFinder.__init__c                 C   s  | j D ]|}d||dd f}t|d p)t|d p)t|| j p)t|d }t|o3tj|}|s8|rd|v rB| jj	  S d|v rL| jj	  S | j
rZ| j|v rZ| jj	  S | jrh| j|v rh| jj	  S tj|| jrx| jj  S | jd	   S qd S )
N/r#   r   z.pyr`   z/__init__.pyzsite-packageszdist-packagesdefault_section)rb   rI   rU   r   rk   rF   rG   rJ   r   r   r\   re   r]   rf   r+   ri   r   r   )r   r%   prefixpackage_pathZ	is_module
is_packager   r   r   r'      s0   


zPathFinder.find)r   r   r   r   r'   rZ   r   r   rD   r   r[      s    /r[   c                       sV   e Zd Zd fdd	Zedd Zdd Zedd	 Zd
d Zdd Z	dd Z
  ZS )ReqsBaseFinderr#   c                    s:   t t| || || _| jr|  | _|  | _d S d S r   )	r7   rs   r   rG   enabled_load_mappingmapping_load_namesnamesrm   rD   r   r   r      s   
zReqsBaseFinder.__init__c                  C   sf   t sdS tjtt } tj| d} t| }tdd |D W  d   S 1 s,w   Y  dS )zxReturn list of mappings `package_name -> module_name`

        Example:
            django-haystack -> haystack
        Nrv   c                 s   s(    | ]}|  d ddd V  qdS ):NrT   )striprU   )r/   liner   r   r   rS      s   & z/ReqsBaseFinder._load_mapping.<locals>.<genexpr>)	r   rF   rG   dirnameinspectgetfilerI   opendict)rG   fr   r   r   ru      s   
$zReqsBaseFinder._load_mappingc                 C   s6   g }|   D ]}| |D ]
}|| | qq|S )z<Return list of thirdparty modules from requirements
        )
_get_files
_get_namesr?   _normalize_name)r   rx   rG   namer   r   r   rw      s   zReqsBaseFinder._load_namesc                 c   s4    d}| |kr| }| V  t j| } | |ksd S d S )N )rF   rG   r|   )rG   prevr   r   r   _get_parents   s   zReqsBaseFinder._get_parentsc                 c   sR    t j| j}t j|rt j|}| |D ]}| |D ]}|V  q qdS )z/Return paths to all requirements files
        N)rF   rG   abspathisfiler|   r   _get_files_from_dir)r   rG   	file_pathr   r   r   r      s   zReqsBaseFinder._get_filesc                 C   s$   | j r
| j ||}| ddS )zConvert package name to module name

        Examples:
            Django -> django
            django-haystack -> haystack
            Flask-RESTFul -> flask_restful
        -_)rv   r;   r=   r>   )r   r   r   r   r   r      s   zReqsBaseFinder._normalize_namec                 C   sN   | j sd S |d\}}}| }|sd S | jD ]}||kr$| jj  S qd S r*   )rt   	partitionr=   rx   r   r   )r   r%   Z_sepZ_submodulesr   r   r   r   r'     s   
zReqsBaseFinder.find)r#   )r   r   r   r   rY   ru   rw   r   r   r   r'   rZ   r   r   rD   r   rs      s    
	
rs   c                   @   sT   e Zd ZdZeeZdd Zee	dddd Z
dd	 Zee	ddd
d ZdS )RequirementsFinder)z.txtz.inc                 C   
   t |S )z<Return paths to requirements files from passed dir.
        )r   _get_files_from_dir_cachedr   rG   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)	rF   rO   rG   rI   rJ   extsr$   r?   r   )clsrG   resultfname	full_pathZsubfile_nameextr   r   r   r     s*   




z-RequirementsFinder._get_files_from_dir_cachedc                 C   r   )z>Load required packages from path to requirements file
        )r   _get_names_cachedr   r   r   r   r   9  r   zRequirementsFinder._get_namesc                 C   sd   g }t tj| t|t d}|D ]}|jr||j qW d    |S 1 s+w   Y  |S )N)session)r
   rF   rG   r|   r   r   r   r?   )r   rG   resultsr   reqr   r   r   r   >  s   
z$RequirementsFinder._get_names_cachedN)r   r   r   r   boolr   rt   r   classmethodr   r   r   r   r   r   r   r   r     s    r   c                   @   s$   e Zd ZeeZdd Zdd ZdS )PipfileFinderc                 c   sN    t | t|}|jD ]}|jV  qW d    d S 1 s w   Y  d S r   )r
   r   loadpackagesr   )r   rG   projectr   r   r   r   r   O  s   



"zPipfileFinder._get_namesc                 c   s    dt |v r|V  d S d S )Nr   )rF   rO   r   r   r   r   r   U  s   
z!PipfileFinder._get_files_from_dirN)r   r   r   r   r   rt   r   r   r   r   r   r   r   L  s    r   c                   @   r   )DefaultFinderc                 C   s
   | j d S )Nro   )r   r,   r   r   r   r'   [  s   
zDefaultFinder.findNr(   r   r   r   r   r   Z  r   r   c                   @   s0   e Zd Zeeeeeee	fZ
dddZdd ZdS )FindersManagerNc                 C   s   | dd| _|d u r| jn|}g | _|D ]-}z| j||| W q tyB } z| jr8td|jt| W Y d }~qd }~ww t	| j| _d S )NverboseFzD{} encountered an error ({}) during instantiation and cannot be used)
r;   r   findersr?   	Exceptionprintr<   r   strtuple)r   r   r   r   finder	exceptionr   r   r   r   j  s   
zFindersManager.__init__c                 C   sr   | j D ]3}z||}W n! ty- } z| jr#td|jt|| W Y d }~nd }~ww |d ur6|  S qd S )NzC{} encountered an error ({}) while trying to identify the {} module)r   r'   r   r   r   r<   r   r   )r   r%   r   sectionr   r   r   r   r'   y  s   

zFindersManager.findr   )r   r   r   r    r)   r-   r[   r   r   r   r   r   r'   r   r   r   r   r   _  s    

r   ),__doc__
__future__r   r   r   r   r}   rF   os.pathr@   rl   rg   r   r   Z	pie_slicer	   utilsr
   r   r   ImportErrorZpip._internal.downloadr   pip._internal.reqr   Zpip.downloadZpip.reqZrequirementslibr   	functoolsr   Zbackports.functools_lru_cacher:   objectr   r    r)   r-   r[   rs   r   r   r   r   r   r   r   r   <module>   sl    5FN7