
    a9                        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$ 	 ddl%m%Z% n# e&$ r dZ%Y nw xY w	 ddl'm(Z( n# e&$ r dZ(Y nw xY w	 ddl)m*Z* n# e&$ r dZ*Y nw xY wede+ded         fd            Z, G d de
          Z- G d de-          Z. G d de-          Z/ G d de-          Z0 G d de-          Z1 G d de-          Z2 G d  d!e2          Z3 G d" d#e2          Z4 G d$ d%e-          Z5 G d& d'          Z6d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)Pipfilepathreturnc              #      K   t          j                    }t          j        |            	 dV  t          j        |           dS # t          j        |           w xY w)zKContext manager for changing dir and restoring previous workdir after exit.N)osgetcwdchdir)r   curdirs     8lib/python3.11/site-packages/isort/deprecated/finders.pyr    r    (   sZ       Y[[FHTNNN
s   A Ac                   J    e Zd ZdeddfdZededee         fd            ZdS )
BaseFinderconfigr   Nc                     || _         d S N)r%   )selfr%   s     r"   __init__zBaseFinder.__init__4   s        module_namec                     t           r'   NotImplementedErrorr(   r+   s     r"   findzBaseFinder.find7       !!r*   )	__name__
__module____qualname__r   r)   r   strr   r0    r*   r"   r$   r$   3   sh        v $     " " " " " ^" " "r*   r$   )	metaclassc                   *    e Zd Zdedee         fdZdS )ForcedSeparateFinderr+   r   c                     | j         j        D ]E}|}|                    d          sd|z  }t          ||          st          |d|z             r|c S Fd S )N*z%s*.)r%   forced_separateendswithr   )r(   r+   r=   	path_globs       r"   r0   zForcedSeparateFinder.find=   sx    #{: 	' 	'O'I"++C00 4!O3	{I.. ''+sY2W2W '&&&&'tr*   Nr2   r3   r4   r5   r   r0   r6   r*   r"   r9   r9   <   s:        	 	 	 	 	 	 	 	r*   r9   c                   *    e Zd Zdedee         fdZdS )LocalFinderr+   r   c                 4    |                     d          rdS d S )Nr<   LOCALFOLDER)
startswithr/   s     r"   r0   zLocalFinder.findJ   s"    !!#&& 	! =tr*   Nr@   r6   r*   r"   rB   rB   I   s:               r*   rB   c                   `     e Zd Zdeddf fdZdedee         fdZdedee         fdZ	 xZ
S )	KnownPatternFinderr%   r   Nc                 D    t                                          |           g  _        t          |j                  D ]}t          j        ||                                          }d| }t          t           j
        | j
        j                            |g                               } fd|D             }|D ]`}d|                    dd                              dd          z   dz   } j                            t          j        |          |f           ad S )	Nknown_c                 D    g | ]}                     |          D ]}|S r6   )_parse_known_pattern).0known_patternpatternr(   s      r"   
<listcomp>z/KnownPatternFinder.__init__.<locals>.<listcomp>[   sN       !#88GG      r*   ^r;   z.*?z.?$)superr)   known_patternsreversedr   r   getlowerlistgetattrr%   known_otherreplaceappendrecompile)	r(   r%   	placementknown_placement
config_keyrT   rM   regexp	__class__s	   `       r"   r)   zKnownPatternFinder.__init__Q   sF      >@!&/22 	L 	LI37	9MMSSUUO3/33J!Z1H1L1L_^`1a1abb N   %3  N
 "0 L L}44S$??GGTRRRUXX#**BJv,>,>	+JKKKKL	L 	Lr*   rN   c                                           t          j        j                  rJ fdt          j        t          j                             j        j                            D             }ng}|S )zIExpand pattern if identified as a directory and return found sub packagesc           	          g | ]L}t           j                            t           j                            j        j        |                    J|MS r6   )r   r   isdirjoinr%   	directory)rL   filenamerN   r(   s     r"   rO   z;KnownPatternFinder._parse_known_pattern.<locals>.<listcomp>g   sT       7==dk.CWh!W!WXX  r*   )r>   r   r   seplistdirrg   r%   rh   )r(   rN   patternss   `` r"   rK   z'KnownPatternFinder._parse_known_patternd   sz    BGK(( 	!     "
27<<8Mw+W+W X X  HH  yHr*   r+   c                     |                     d          fdt          t                    dd          D             }|D ]*}| j        D ] \  }}|                    |          r|c c S !+d S )Nr<   c              3   R   K   | ]!}d                      d|                   V  "dS )r<   N)rg   )rL   first_kpartss     r"   	<genexpr>z*KnownPatternFinder.find.<locals>.<genexpr>t   s7       c cw%/!:!: c c c c c cr*   r   )splitrangelenrT   match)r(   r+   module_names_to_checkmodule_name_to_checkrN   r_   rp   s         @r"   r0   zKnownPatternFinder.findq   s    !!#&& c c c c%PSTYPZPZ\]_aJbJb c c c$9 	% 	% &*&9 % %"==!566 %$$$$$$%% tr*   )r2   r3   r4   r   r)   r5   r   rK   r   r0   __classcell__rc   s   @r"   rG   rG   P   s        Lv L$ L L L L L L&C DI             r*   rG   c                   J     e Zd Zd	dededdf fdZdedee         fdZ xZS )

PathFinderr<   r%   r   r   Nc                 4   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r| j                            |           &t          | j         d          D ]%}|| j        vr| j                            |           &t          | j         d          D ];}t          j                            |          r| j                            |           <| j        j        p t          j        	                    d          pd| _        | j        rt          j        
                    | j                  | _        t          | j         d          D ]%}|| j        vr| j                            |           &t          | j         d          D ]%}	|	| j        vr| j                            |	           &t          j                            t#          j                    d	                   | _        | j        | j        vr| j                            | j                   t(          j        d
d          D ]%}
|
| j        vr| j                            |
           &d S )Nz/srcVIRTUAL_ENV z/src/z/lib/python*/site-packagesz/lib/python*/*/site-packagesz/src/*CONDA_PREFIXstdlib   )rS   r)   r   r   abspathpathsr%   virtual_envenvironrV   realpathvirtual_env_srcr   r\   rf   	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_pathrc   s              r"   r)   zPathFinder.__init__}   s       7??4((###(
  ;2Sbjnn]6S6S 	B!w//0@AAD! 
	5&*&6#=#=#=D !T%5"Q"Q"QRR 1 1	DJ..J%%i000$(D,<)Z)Z)Z$[$[ 8 8 #4:55J%%&6777!%)9&A&A&A!B!B 5 57==// 5J%%m444 .V"*..2P2PVTV> 	9W--dn==DN"dn#P#P#PQQ 2 2
TZ//J%%j111%)T^*Y*Y*Y%Z%Z 9 9!$DJ66J%%&7888 "$!1!1)2E2G2G2Q!R!R!33Jd4555 8ABB< 	/ 	/K$*,,
!!+...	/ 	/r*   r+   c                    | j         D ]}d                    ||                    d          d         f          t                                                    }t          dz             p;t          fdt          j        j	        D                       pt          dz             }t                    ot          j                                      }|s|rd|v sd|v s| j        r| j        |v rt          j        c S t          j                            |          | j        k    rt          j        c S | j        r| j        |v rt          j        c S | j        j        D ]5}||j        v r*| j                            |          st          j        c c S 6t          j                            |                              | j                  rt          j        c S | j        j        c S d S )	N/r<   r   z.pyc              3   <   K   | ]}t          |z             V  d S r'   r   )rL   
ext_suffixpackage_paths     r"   rq   z"PathFinder.find.<locals>.<genexpr>   sD        " *,*CDD     r*   z/__init__.pyzsite-packageszdist-packages)r   rg   rs   r	   resolver   any	importlib	machineryEXTENSION_SUFFIXESr   r   rf   r   r   r   
THIRDPARTYr   r   STDLIBr   r%   	src_pathsparents
is_skipped
FIRSTPARTYrE   default_section)r(   r+   prefixpath_obj	is_module
is_packagesrc_pathr   s          @r"   r0   zPathFinder.find   s$   j 	3 	3F88V[->->s-C-CA-F$GHHLL))1133H%lU&:;; H    &/&9&L    H
 ))FGG  /|<<\|A\A\J 3J 3#v--&&00( 1-1-AV-K-K#....7##F++t/EEE#?***> /dn&>&>#.... $ 5 3 3H8#333DK<R<RS[<\<\3'2222227##F++66t7MNN +#?***{2222%3& tr*   r<   )	r2   r3   r4   r   r5   r)   r   r0   ry   rz   s   @r"   r|   r|   |   s~        ,/ ,/v ,/S ,/4 ,/ ,/ ,/ ,/ ,/ ,/\                   r*   r|   c                   J    e Zd ZdZddededdf fdZededee         fd            Z	ededee         fd	            Z
edeeeef                  fd
            Zdee         fdZededee         fd            Zdee         fdZdedefdZdedee         fdZ xZS )ReqsBaseFinderFr<   r%   r   r   Nc                     t                                          |           || _        | j        r4|                                 | _        |                                 | _        d S d S r'   )rS   r)   r   enabled_load_mappingmapping_load_namesnames)r(   r%   r   rc   s      r"   r)   zReqsBaseFinder.__init__   s`       	< 	,--//DL))++DJJJ	, 	,r*   c                     t           r'   r-   r(   r   s     r"   
_get_nameszReqsBaseFinder._get_names   r1   r*   c                     t           r'   r-   r   s     r"   _get_files_from_dirz"ReqsBaseFinder._get_files_from_dir   r1   r*   c                     t           sdS t          j                            t	          j        t                               } t          j                            | d          } t          |           5 }i }|D ]2}|                                	                    d          \  }}}|||<   3|cddd           S # 1 swxY w Y   dS )zxReturn list of mappings `package_name -> module_name`

        Example:
            django-haystack -> haystack
        Nr   :)
r   r   r   dirnameinspectgetfilerg   openstrip	partition)r   fmappingslineimport_name_	pypi_names          r"   r   zReqsBaseFinder._load_mapping   s      	4www7788w||D),,$ZZ 	1')H 2 2,0JJLL,B,B3,G,G)Q	&1##	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /9B55B9<B9c                     g }|                                  D ]B}|                     |          D ]*}|                    |                     |                     +C|S )z3Return list of thirdparty modules from requirements)
_get_filesr   r\   _normalize_name)r(   r   r   names       r"   r   zReqsBaseFinder._load_names   sh    OO%% 	9 	9D-- 9 9T11$7788889r*   c              #   t   K   d}| |k    r-| }| V  t           j                            |           } | |k    +d S d S )Nr   )r   r   r   )r   prevs     r"   _get_parentszReqsBaseFinder._get_parents   sH      dllDJJJ7??4((D dllllllr*   c              #   4  K   t           j                            | j                  }t           j                            |          rt           j                            |          }|                     |          D ]}|                     |          E d{V  dS )z&Return paths to all requirements filesN)r   r   r   isfiler   r   r   r   s     r"   r   zReqsBaseFinder._get_files  s      wty))7>>$ 	)7??4((D%%d++ 	6 	6D//5555555555	6 	6r*   r   c                     | 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   rV   r[   rW   )r(   r   s     r"   r   zReqsBaseFinder._normalize_name  sR     < 	B<##DLLc$:$:DAADzz||##C---r*   r+   c                     | j         sd S |                    d          \  }}}|                                }|sd S | j        D ]}||k    rt          j        c S d S )Nr<   )r   r   rW   r   r   r   )r(   r+   _sep_submodulesr   s        r"   r0   zReqsBaseFinder.find  s~    | 	4)4)>)>s)C)C&T;!'')) 	4J 	+ 	+Dd""**** #tr*   r   )r2   r3   r4   r   r   r5   r)   r   r   r   r   staticmethodr   r
   r   r   r   r   r   r   r0   ry   rz   s   @r"   r   r      s       G, ,v ,S ,4 , , , , , , "s "x} " " " ^" " " " " " ^" 8DcN3    \$T#Y     )3 )8C= ) ) ) \)6HSM 6 6 6 6
.C 
.C 
. 
. 
. 
.         r*   r   c                       e Zd ZdZ ee          Zdedee         fdZ	e
 ed          dedee         fd                        Zdedee         fdZe
 ed          dedee         fd	                        Zd
S )RequirementsFinder)z.txtz.inr   r   c              #   @   K   |                      |          E d{V  dS )z3Return paths to requirements files from passed dir.N)_get_files_from_dir_cachedr   s     r"   r   z&RequirementsFinder._get_files_from_dir,  s2      22488888888888r*      )maxsizec           	      B   g }t          j        |          D ]}d|vrt           j                            ||          }t           j                            |          rjt          j        |          D ]T}| j        D ]J}|                    |          r3|                    t           j                            ||                     KUt           j                            |          r6| j        D ].}|                    |          r|                    |            n/|S )Nrequirements)	r   rk   r   rg   rf   extsr>   r\   r   )clsr   resultsfname	full_pathsubfile_nameexts          r"   r   z-RequirementsFinder._get_files_from_dir_cached0  s1    Z%% 	 	EU**T511I w}}Y'' $&Jy$9$9 R RL"x R R'0055 R#NN27<<	<+P+PQQQR  w~~i(( 8  C~~c** y111 r*   c              #   @   K   |                      |          E d{V  dS )z5Load required packages from path to requirements fileN)_get_names_cachedr   s     r"   r   zRequirementsFinder._get_namesK  s2      ))$///////////r*   c                 "   g }t          t          j                            |                    5  t	          |          }|                                D ]#}|j        r|                    |j                   $	 d d d            n# 1 swxY w Y   |S r'   )r    r   r   r   r   valuesr   r\   )r   r   resultr   reqs        r"   r   z$RequirementsFinder._get_names_cachedO  s     27??4(()) 	, 	,-d33L#**,, , ,8 ,MM#(+++,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, s   ABBBN)r2   r3   r4   r   boolr   r   r5   r   r   classmethodr   r   r   r   r   r6   r*   r"   r   r   (  s	       Dd%&&G9 9 9 9 9 9 Yrc d3i     [20s 0x} 0 0 0 0 Yr	S 	T#Y 	 	 	  [	 	 	r*   r   c                   \    e Zd Z ee          Zdedee         fdZdedee         fdZ	dS )PipfileFinderr   r   c              #      K   t          |          5  t          j        |          }|j        D ]}|j        V  	 d d d            d S # 1 swxY w Y   d S r'   )r    r   loadpackagesr   )r(   r   projectr   s       r"   r   zPipfileFinder._get_names`  s      4[[ 	 	l4((G'  h	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (AAAc              #   B   K   dt          j        |          v r|V  d S d S )Nr   )r   rk   r   s     r"   r   z!PipfileFinder._get_files_from_dirf  s0      
4((((JJJJJ )(r*   N)
r2   r3   r4   r   r   r   r5   r   r   r   r6   r*   r"   r   r   ]  sm        d7mmGs x}           r*   r   c                   *    e Zd Zdedee         fdZdS )DefaultFinderr+   r   c                     | j         j        S r'   )r%   r   r/   s     r"   r0   zDefaultFinder.findl  s    {**r*   Nr@   r6   r*   r"   r   r   k  s:        + + + + + + + +r*   r   c                       e Zd ZU e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Zdedee         fdZdS )
FindersManager_default_finders_classesNr%   finder_classesr   c                    |j         | _         || j        }g }|D ]Y}	 |                     ||                     "# t          $ r+}| j         rt	          |j         d| d           Y d }~Rd }~ww xY wt          |          | _        d S )N encountered an error (z)) during instantiation and cannot be used)verboser   r\   	Exceptionprintr2   tuplefinders)r(   r%   r   r  
finder_cls	exceptions         r"   r)   zFindersManager.__init__{  s     $^!!:N$&( 	 	J
zz&112222   < )2 ? ?9 ? ? ?   05W~~s   <
A1!A,,A1r+   c           
          | j         D ]^}	 |                    |          }||c S # t          $ r3}| j        r"t	          |j        j         d| d| d           Y d }~Wd }~ww xY wd S )Nr   z) while trying to identify the z module)r  r0   r   r   r  rc   r2   )r(   r+   findersectionr  s        r"   r0   zFindersManager.find  s    l 	 	F ++k22&"NNN '    < !+4 G GY G G2=G G G  	 ts   '
A$)AA$r'   )r2   r3   r4   r9   rB   rG   r|   r   r   r   r   r   r   r$   __annotations__r   r   r   r)   r5   r0   r6   r*   r"   r   r   p  s         <htJ'78    VZ> >>.6xZ@P7Q.R>	> > > >,       r*   r   )7__doc__importlib.machineryr   r   r   os.pathr]   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   requirementslibr   r5   r    r$   r9   rB   rG   r|   r   r   r   r   r   r6   r*   r"   <module>r     s   > >      				  				 



     ' ' ' ' ' ' ' ' % % % % % %                         [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [       8 8 8 8 8 8 8 8 - - - - - -   GGG*******   '''''''   GGG      " " " " "7 " " " "
 
 
 
 
: 
 
 
    *   ) ) ) ) ) ) ) )XO O O O O O O OdW W W W WZ W W Wt2 2 2 2 2 2 2 2j    N   + + + + +J + + +
/ / / / / / / / / /s6   0A7 7B BB BBB! !B+*B+