
    \j7                        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% 	 ddl'm(Z( 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+      Z. G d de+      Z/ G d de+      Z0 G d d e0      Z1 G d! d"e+      Z2 G d# d$      Z3y# e&$ r dZ%Y w xY w# e&$ r dZ(Y w xY w)%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              #      K   t        j                         }t        j                  |        	 d t        j                  |       y# t        j                  |       w xY ww)zKContext manager for changing dir and restoring previous workdir after exit.N)osgetcwdchdir)r   curdirs     B/root/env/lib/python3.12/site-packages/isort/deprecated/finders.pyr   r   "   s>      YY[FHHTN
s   *A!A A!AA!c                   <    e Zd ZdeddfdZededee   fd       Zy)
BaseFinderconfigr   Nc                     || _         y N)r$   )selfr$   s     r!   __init__zBaseFinder.__init__.   s	        module_namec                     t         r&   NotImplementedErrorr'   r*   s     r!   findzBaseFinder.find1       !!r)   )	__name__
__module____qualname__r   r(   r   strr   r/    r)   r!   r#   r#   -   s;    v $  " " " "r)   r#   )	metaclassc                   "    e Zd Zdedee   fdZy)ForcedSeparateFinderr*   r   c                     | j                   j                  D ]9  }|}|j                  d      s| d}t        ||      st        |d|z         s7|c S  y )N*.)r$   forced_separateendswithr   )r'   r*   r<   	path_globs       r!   r/   zForcedSeparateFinder.find7   s]    #{{:: 	'O'I"++C0./q1	{I.'+sY2W&&	' r)   Nr1   r2   r3   r4   r   r/   r5   r)   r!   r8   r8   6   s    	 	 	r)   r8   c                   "    e Zd Zdedee   fdZy)LocalFinderr*   r   c                 (    |j                  d      ryy )Nr;   LOCALFOLDER)
startswithr.   s     r!   r/   zLocalFinder.findD   s    !!#& r)   Nr?   r5   r)   r!   rA   rA   C   s      r)   rA   c                   T     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                 X   t         	|   |       g | _        t        |j                        D ]  }t        j                  ||      j                         }d| }t        t        | j                  || j                  j                  j                  |g                   }|D cg c]  }| j                  |      D ]  }|  }}}|D ]Z  }d|j                  dd      j                  dd      z   dz   }| j                  j                  t        j                   |      |f       \  y c c}}w )Nknown_^r:   z.*?z.?$)superr(   known_patternsreversedr   r   getlowerlistgetattrr$   known_other_parse_known_patternreplaceappendrecompile)
r'   r$   	placementknown_placement
config_keyrM   known_patternpatternregexp	__class__s
            r!   r(   zKnownPatternFinder.__init__K   s/    >@!&//2 	LI377	9MSSUO!/!23J!Z1H1H1L1L_^`1abN
 &4!#88G  N 
 "0 L}44S$?GGTRRUXX##**BJJv,>	+JKL	Ls   "D&r]   c           
         |j                  t        j                  j                        rt        j                  t        j                  j                  | j                  j                  |            D cg c]V  }t        j                  j                  t        j                  j                  | j                  j                  ||            r|X }}|S |g}|S c c}w )zIExpand pattern if identified as a directory and return found sub packages)	r=   r   r   seplistdirjoinr$   	directoryisdir)r'   r]   filenamepatternss       r!   rT   z'KnownPatternFinder._parse_known_pattern^   s    BGGKK( !#

277<<8M8Mw+W X77==dkk.C.CWh!WX H    yHs   3ACr*   c                     |j                  d      fdt        t              dd      D        }|D ]-  }| j                  D ]  \  }}|j	                  |      s|c c S  / y )Nr;   c              3   F   K   | ]  }d j                  d|         yw)r;   N)rc   ).0first_kpartss     r!   	<genexpr>z*KnownPatternFinder.find.<locals>.<genexpr>n   s       cw%/!: cs   !r   )splitrangelenrM   match)r'   r*   module_names_to_checkmodule_name_to_checkr]   rY   rl   s         @r!   r/   zKnownPatternFinder.findk   sr    !!#& c%PSTYPZ\]_aJb c$9 	% &*&9&9 %"==!56$$%	% r)   )r1   r2   r3   r   r(   r4   r   rT   r   r/   __classcell__r_   s   @r!   rF   rF   J   sG    Lv L$ L&C DI   r)   rF   c                   D     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   Nc                    t         |   |       t        j                  j	                  |      }| d}||g| _        | j                  j                  xs t        j                  j                  d      | _        | j                  r.t        j                  j                  | j                        | _        d| _        | j                  r| j                   d| _        t        | j                   d      D ],  }|| j
                  vs| j
                  j                  |       . t        | j                   d      D ],  }|| j
                  vs| j
                  j                  |       . t        | j                   d      D ]=  }t        j                  j                  |      s#| j
                  j                  |       ? | j                  j                  xs# t        j                  j                  d      xs d| _        | j                  rt        j                  j                  | j                        | _        t        | j                   d      D ],  }|| j
                  vs| j
                  j                  |       . t        | j                   d      D ],  }	|	| j
                  vs| j
                  j                  |	       . t        j                  j!                  t#        j$                         d	         | _        | j&                  | j
                  vr%| j
                  j                  | j&                         t(        j                  d
d  D ],  }
|
| j
                  vs| j
                  j                  |
       . y )Nz/srcVIRTUAL_ENV z/src/z/lib/python*/site-packagesz/lib/python*/*/site-packagesz/src/*CONDA_PREFIXstdlib   )rL   r(   r   r   abspathpathsr$   virtual_envenvironrO   realpathvirtual_env_srcr   rV   re   	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_pathr_   s              r!   r(   zPathFinder.__init__w   s     77??4(Jd#(
  ;;22Sbjjnn]6S!ww//0@0@AD!&*&6&6%7u#=D !T%5%5$66P"QR 1	DJJ.JJ%%i01 %)D,<,<+==Y)Z$[ 8 #4::5JJ%%&678 "&)9)9(:&&A!B 577==/JJ%%m45
 ..V"**..2PVTV>>WW--dnn=DN"dnn%55O#PQ 2
TZZ/JJ%%j12 &*T^^,<<X*Y%Z 9!$DJJ6JJ%%&789
 "$!1!1)2E2E2G2Q!R!!3JJd445 88AB< 	/K$**,

!!+.	/r)   r*   c                 P   | j                   D ]  }dj                  ||j                  d      d   f      t              j	                         }t        dz         xs< t        fdt        j                  j                  D              xs t        dz         }t              xr t        j                  j                        }|s|sd|v sd|v s| j                  r | j                  |v rt        j                   c S t        j                  j#                  |      | j$                  k(  rt        j&                  c S | j(                  r | j(                  |v rt        j                   c S | j*                  j,                  D ]@  }||j.                  v s| j*                  j1                  |      r.t        j2                  c c S  t        j                  j#                  |      j5                  | j$                        rt        j&                  c S | j*                  j6                  c S  y )	N/r;   r   z.pyc              3   :   K   | ]  }t        |z           y wr&   r   )rj   
ext_suffixpackage_paths     r!   rm   z"PathFinder.find.<locals>.<genexpr>   s#      " *,*CDs   z/__init__.pyzsite-packageszdist-packages)r   rc   ro   r	   resolver   any	importlib	machineryEXTENSION_SUFFIXESr   r   re   r   r   r   
THIRDPARTYr   r   STDLIBr   r$   	src_pathsparents
is_skipped
FIRSTPARTYrD   default_section)r'   r*   prefixpath_obj	is_module
is_packagesrc_pathr   s          @r!   r/   zPathFinder.find   s   jj 	3F88V[->->s-CA-F$GHLL)113H%lU&:; H &/&9&9&L&L H
 ))FG  /|<\|A\JJ#v-&&0((T-A-AV-K#...77##F+t/E/EE#??*>>dnn&>#... $ 5 5 3H8#3#33DKK<R<RS[<\'2223 77##F+66t7M7MN#??*{{222=	3> r)   r;   )	r1   r2   r3   r   r4   r(   r   r/   ru   rv   s   @r!   rx   rx   v   s5    ,/v ,/S ,/4 ,/\     r)   rx   c                       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   Nc                     t         |   |       || _        | j                  r+| j	                         | _        | j                         | _        y y r&   )rL   r(   r   enabled_load_mappingmapping_load_namesnames)r'   r$   r   r_   s      r!   r(   zReqsBaseFinder.__init__   sC     	<<--/DL))+DJ r)   c                     t         r&   r,   r'   r   s     r!   
_get_nameszReqsBaseFinder._get_names   r0   r)   c                     t         r&   r,   r   s     r!   _get_files_from_dirz"ReqsBaseFinder._get_files_from_dir   r0   r)   c                  d   t         syt        j                  j                  t	        j
                  t                     } t        j                  j                  | d      } t        |       5 }i }|D ]*  }|j                         j                  d      \  }}}|||<   , |cddd       S # 1 sw Y   yxY w)zxReturn list of mappings `package_name -> module_name`

        Example:
            django-haystack -> haystack
        Nr   :)
r   r   r   dirnameinspectgetfilerc   openstrip	partition)r   fmappingslineimport_name_	pypi_names          r!   r   zReqsBaseFinder._load_mapping   s     wwww78ww||D),$Z 	1')H 2,0JJL,B,B3,G)Q	&1#2 	 	 	s   )3B&&B/c                     g }| j                         D ]8  }| j                  |      D ]"  }|j                  | j                  |             $ : |S )z3Return list of thirdparty modules from requirements)
_get_filesr   rV   _normalize_name)r'   r   r   names       r!   r   zReqsBaseFinder._load_names   sS    OO% 	9D- 9T11$789	9 r)   c              #   r   K   d}| |k7  r,| }|  t         j                  j                  |       } | |k7  r+y y w)Nr{   )r   r   r   )r   prevs     r!   _get_parentszReqsBaseFinder._get_parents   s7     dlDJ77??4(D dls   277c              #   <  K   t         j                  j                  | j                        }t         j                  j                  |      rt         j                  j	                  |      }| j                  |      D ]  }| j                  |      E d{     y7 w)z&Return paths to all requirements filesN)r   r   r   isfiler   r   r   r   s     r!   r   zReqsBaseFinder._get_files   so     wwtyy)77>>$77??4(D%%d+ 	6D//555	65s   BBBBr   c                     | j                   r,| j                   j                  |j                  dd      |      }|j                         j                  dd      S )zConvert package name to module name

        Examples:
            Django -> django
            django-haystack -> django_haystack
            Flask-RESTFul -> flask_restful
        -r   )r   rO   rU   rP   )r'   r   s     r!   r   zReqsBaseFinder._normalize_name  sE     <<<<##DLLc$:DADzz|##C--r)   r*   c                     | j                   sy |j                  d      \  }}}|j                         }|sy | j                  D ]  }||k(  s	t        j
                  c S  y )Nr;   )r   r   rP   r   r   r   )r'   r*   _sep_submodulesr   s        r!   r/   zReqsBaseFinder.find  sc    ||)4)>)>s)C&T;!'')JJ 	+Dd"***	+ r)   r   )r1   r2   r3   r   r   r4   r(   r   r   r   r   staticmethodr   r
   r   r   r   r   r   r   r/   ru   rv   s   @r!   r   r      s   G,v ,S ,4 , "s "x} " " " " " " 8DcN3  $T#Y  )3 )8C= ) )6HSM 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y
)RequirementsFinder)z.txtz.inr   r   c              #   B   K   | j                  |      E d{    y7 w)z3Return paths to requirements files from passed dir.N)_get_files_from_dir_cachedr   s     r!   r   z&RequirementsFinder._get_files_from_dir&  s     224888      )maxsizec           	      P   g }t        j                  |      D ]
  }d|vr	t         j                  j                  ||      }t         j                  j	                  |      rmt        j                  |      D ]T  }| j
                  D ]C  }|j                  |      s|j                  t         j                  j                  ||             E V t         j                  j                  |      s| j
                  D ]'  }|j                  |      s|j                  |        
  |S )Nrequirements)	r   rb   r   rc   re   extsr=   rV   r   )clsr   resultsfname	full_pathsubfile_nameexts          r!   r   z-RequirementsFinder._get_files_from_dir_cached*  s     ZZ% 	EU*T51I ww}}Y'$&JJy$9 RL"xx R'005#NN277<<	<+PQRR  ww~~i(88 C~~c*y1	( r)   c              #   B   K   | j                  |      E d{    y7 w)z5Load required packages from path to requirements fileN)_get_names_cachedr   s     r!   r   zRequirementsFinder._get_namesE  s     ))$///r   c                 *   g }t        t        j                  j                  |            5  t	        t        |            }|j                         D ]*  }|j                  s|j                  |j                         , 	 d d d        |S # 1 sw Y   |S xY wr&   )	r   r   r   r   r   r	   valuesr   rV   )r   r   resultr   reqs        r!   r   z$RequirementsFinder._get_names_cachedI  sy     277??4() 	,-d4j9L#**, ,88MM#((+,	, 	, s   4B BBN)r1   r2   r3   r   boolr   r   r4   r   r   classmethodr   r   r   r   r   r5   r)   r!   r   r   "  s    D%&G9 9 9 rc d3i   20s 0x} 0 r	S 	T#Y 	  	r)   r   c                   "    e Zd Zdedee   fdZy)DefaultFinderr*   r   c                 .    | j                   j                  S r&   )r$   r   r.   s     r!   r/   zDefaultFinder.findX  s    {{***r)   Nr?   r5   r)   r!   r   r   W  s    + + +r)   r   c                   t    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Zdedee   fdZy)
FindersManager_default_finders_classesNr$   finder_classesr   c                    |j                   | _         || j                  }g }|D ]  }	 |j                   ||              t        |      | _        y # t        $ r1}| j                   rt	        |j
                   d| d       Y d }~cd }~ww xY w)N encountered an error (z)) during instantiation and cannot be used)verboser   rV   	Exceptionprintr1   tuplefinders)r'   r$   r   r   
finder_cls	exceptions         r!   r(   zFindersManager.__init__f  s     $^^!!::N$&( 	J
z&12	 05W~  <<)2233J9+ V? ?s   A	B'BBr*   c           
          | j                   D ]  }	 |j                  |      }||c S  y # t        $ r>}| j                  r(t	        |j
                  j                   d| d| d       Y d }~`d }~ww xY w)Nr   z) while trying to identify the z module)r   r/   r   r   r   r_   r1   )r'   r*   findersectionr   s        r!   r/   zFindersManager.find|  s    ll 	F ++k2&"N '	    <<!++4455LYK X22=gG	s   +	A24A--A2r&   )r1   r2   r3   r8   rA   rF   rx   r   r   r   r   r   r#   __annotations__r   r   r   r(   r4   r/   r5   r)   r!   r   r   \  sw    <htJ'78  VZ>>.6xZ@P7Q.R>	>,  r)   r   )4__doc__importlib.machineryr   r   r   os.pathrW   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   r4   r   r#   r8   rA   rF   rx   r   r   r   r   r5   r)   r!   <module>r     s   >   	  	 
  ' %     [ [ [  8 -
*    "7 "
: 
* ) )XO OdWZ Wt2 2j+J +
. .I
  G  s$   0C1 7C> 1C;:C;>DD