
    yIf7                     ^   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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$          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              #      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     L/var/www/piapp/venv/lib/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__.   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#   -   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}t          ||          st          |d|z             r|c S Fd S )N*.)r$   forced_separateendswithr   )r'   r*   r<   	path_globs       r!   r/   zForcedSeparateFinder.find7   s|    #{: 	' 	'O'I"++C00 2.111	{I.. ''+sY2W2W '&&&&'tr)   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dS )LocalFinderr*   r   c                 4    |                     d          rdS d S )Nr;   LOCALFOLDER)
startswithr.   s     r!   r/   zLocalFinder.findD   s"    !!#&& 	! =tr)   Nr?   r5   r)   r!   rA   rA   C   s:               r)   rA   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 r5   )_parse_known_pattern).0known_patternpatternr'   s      r!   
<listcomp>z/KnownPatternFinder.__init__.<locals>.<listcomp>U   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_keyrS   rL   regexp	__class__s	   `       r!   r(   zKnownPatternFinder.__init__K   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)   rM   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 r5   )r   r   isdirjoinr$   	directory)rK   filenamerM   r'   s     r!   rN   z;KnownPatternFinder._parse_known_pattern.<locals>.<listcomp>a   sT       7==dk.CWh!W!WXX  r)   )r=   r   r   seplistdirrf   r$   rg   )r'   rM   patternss   `` r!   rJ   z'KnownPatternFinder._parse_known_pattern^   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)rf   )rK   first_kpartss     r!   	<genexpr>z*KnownPatternFinder.find.<locals>.<genexpr>n   s7       c cw%/!:!: c c c c c cr)   r   )splitrangelenrS   match)r'   r*   module_names_to_checkmodule_name_to_checkrM   r^   ro   s         @r!   r/   zKnownPatternFinder.findk   s    !!#&& c c c c%PSTYPZPZ\]_aJbJb c c c$9 	% 	% &*&9 % %"==!566 %$$$$$$%% tr)   )r1   r2   r3   r   r(   r4   r   rJ   r   r/   __classcell__rb   s   @r!   rF   rF   J   s        Lv L$ L L L L L L&C DI             r)   rF   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   )rR   r(   r   r   abspathpathsr$   virtual_envenvironrU   realpathvirtual_env_srcr   r[   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_pathrb   s              r!   r(   zPathFinder.__init__w   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   )rK   
ext_suffixpackage_paths     r!   rp   z"PathFinder.find.<locals>.<genexpr>   sD        " *,*CDD     r)   z/__init__.pyzsite-packageszdist-packages)r   rf   rr   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$   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;   )	r1   r2   r3   r   r4   r(   r   r/   rx   ry   s   @r!   r{   r{   v   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&   )rR   r(   r   enabled_load_mappingmapping_load_namesnames)r'   r$   r   rb   s      r!   r(   zReqsBaseFinder.__init__   s`       	< 	,--//DL))++DJJJ	, 	,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                     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getfilerf   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   rU   rZ   rV   )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   rV   r   r   r   )r'   r*   _sep_submodulesr   s        r!   r/   zReqsBaseFinder.find  s~    | 	4)4)>)>s)C)C&T;!'')) 	4J 	+ 	+Dd""**** #tr)   r   )r1   r2   r3   r   r   r4   r(   r   r   r   r   staticmethodr   r
   r   r   r   r   r   r   r/   rx   ry   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   rj   r   rf   re   extsr=   r[   r   )clsr   resultsfname	full_pathsubfile_nameexts          r!   r   z-RequirementsFinder._get_files_from_dir_cached*  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_namesE  s2      ))$///////////r)   c                 <   g }t          t          j                            |                    5  t	          t          |                    }|                                D ]#}|j        r|                    |j                   $	 d d d            n# 1 swxY w Y   |S r&   )	r   r   r   r   r   r	   valuesr   r[   )r   r   resultr   reqs        r!   r   z$RequirementsFinder._get_names_cachedI  s     27??4(()) 	, 	,-d4jj99L#**,, , ,8 ,MM#(+++,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, s   ABBBN)r1   r2   r3   r   boolr   r   r4   r   r   classmethodr   r   r   r   r   r5   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dedee         fdZdS )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                       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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printr1   tuplefinders)r'   r$   r   r   
finder_cls	exceptions         r!   r(   zFindersManager.__init__f  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   r/   r   r   r   rb   r1   )r'   r*   findersectionr   s        r!   r/   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&   )r1   r2   r3   r8   rA   rF   r{   r   r   r   r   r   r#   __annotations__r   r   r   r(   r4   r/   r5   r)   r!   r   r   \  s         <htJ'78    VZ> >>.6xZ@P7Q.R>	> > > >,       r)   r   )4__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   r4   r   r#   r8   rA   rF   r{   r   r   r   r   r5   r)   r!   <module>r     s   > >      				  				 



     ' ' ' ' ' ' ' ' % % % % % %                         [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [       8 8 8 8 8 8 8 8 - - - - - -   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+ + + + +J + + +
. . . . . . . . . .s$   0A7 7B BB BB