
    yIfF                       d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
 ddlmZmZ ddlmZ ddlmZmZ ddlmZmZ dd	lmZ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Z(ddZ) G d d          Z*dS )zastroid manager: avoid multiple astroid build of a same module when
possible by providing a class responsible to get astroid representation
from various source and using a cache of built modules)
    )annotationsN)CallableIteratorSequence)AnyClassVar)nodes)InferenceContext_invalidate_cache)AstroidBuildingErrorAstroidImportError)specutil)	NoSourceFile_cache_normalize_path_file_info_from_modpathget_source_file2is_module_name_part_of_extension_package_whitelistis_python_sourceis_stdlib_moduleload_module_from_namemodpath_from_file)TransformVisitor)AstroidManagerBrainInferenceResult)z.zipz.eggz.whlz.pyzz.pyzwobjr   returnstrc                D    	 t          |           S # t          $ r Y dS w xY w)Nz???)repr	Exception)r   s    C/var/www/piapp/venv/lib/python3.11/site-packages/astroid/manager.py	safe_reprr#   (   s5    Cyy   uus    
c            	         e Zd ZU dZdZi i g ddd e             e            dZded<   dHd
Z	e
dId            Zej        dJd            Ze
dId            Zej        dJd            Ze
dKd            Zej        dLd            Ze
d             Ze
d             Ze
dMd            ZdNdZ	 	 	 dOdPd$Z	 dQdRd'ZdSd(ZdTd+ZdUd,Z	 	 dVdWd/ZdXd1ZdYd4Z	 dZd[d7ZdZd\d;Z	 dZd]dAZd^dDZd_dEZdHdFZ dHdGZ!dS )`AstroidManagerz_Responsible to build astroid from files or modules.

    Use the Borg (singleton) pattern.
    zastroid loaderFd   )astroid_cache_mod_file_cache_failed_import_hooksalways_load_extensionsoptimize_astmax_inferable_valuesextension_package_whitelist
_transformzClassVar[AstroidManagerBrain]brainr   Nonec                    t           j        d         | _        t           j        d         | _        t           j        d         | _        t           j        d         | _        t           j        d         | _        d S )Nr'   r(   r)   r-   r.   )r%   r/   r'   r(   r)   r-   r.   selfs    r"   __init__zAstroidManager.__init__A   s\    +1/B-34EF$2$89O$P!+9+?),
( ).|<    boolc                &    t           j        d         S Nr*   r%   r/   r2   s    r"   r*   z%AstroidManager.always_load_extensionsK   s    #$<==r5   valuec                $    |t           j        d<   d S r8   r9   r3   r:   s     r"   r*   z%AstroidManager.always_load_extensionsO   s    9>5666r5   c                &    t           j        d         S Nr+   r9   r2   s    r"   r+   zAstroidManager.optimize_astS   s    #N33r5   c                $    |t           j        d<   d S r>   r9   r<   s     r"   r+   zAstroidManager.optimize_astW   s    /4^,,,r5   intc                &    t           j        d         S Nr,   r9   r2   s    r"   r,   z#AstroidManager.max_inferable_values[   s    #$:;;r5   c                $    |t           j        d<   d S rB   r9   r<   s     r"   r,   z#AstroidManager.max_inferable_values_   s    7<3444r5   c                    | j         j        S N)r.   register_transformr2   s    r"   rF   z!AstroidManager.register_transformc   s     11r5   c                    | j         j        S rE   )r.   unregister_transformr2   s    r"   rH   z#AstroidManager.unregister_transformh   s    33r5   nodes.Modulec                    | j         d         S )Nbuiltins)r'   r2   s    r"   builtins_modulezAstroidManager.builtins_modulel   s    !*--r5   nodenodes.NodeNGr   c                6    | j                             |          S )z8Visit the transforms and apply them to the given *node*.)r.   visit)r3   rM   s     r"   visit_transformszAstroidManager.visit_transformsp   s    $$T***r5   NTfilepathr   modname
str | Nonefallbacksourcec                   |6	 d                     t          |                    }n# t          $ r |}Y nw xY w|| j        v r#| j        |         j        |k    r| j        |         S 	 t          |d          }d}n# t          $ r Y nw xY w|| j        v r#| j        |         j        |k    r| j        |         S |r%ddlm}  ||           	                    ||          S |r|r| 
                    |          S t          d|          )	/Given a module name, return the astroid object.N.T)include_no_extr   AstroidBuilderz"Unable to build an AST for {path}.)path)joinr   ImportErrorr'   filer   r   astroid.builderr\   
file_buildast_from_module_namer   )r3   rR   rS   rU   rV   r\   s         r"   ast_from_filezAstroidManager.ast_from_filet   sf    ?#((#4X#>#>?? # # #"# t)))"7+0H<<%g..	&xEEEHFF 	 	 	D	 t)))"7+0H<<%g.. 	F666666!>$''228WEEE 	6 	6,,W555"#GhWWWWs   "' 66&A: :
BB datac                N    ddl m}  ||                               |||          S )z]Given some source code as a string, return its corresponding astroid
        object.
        r   r[   ra   r\   string_build)r3   rf   rS   rR   r\   s        r"   ast_from_stringzAstroidManager.ast_from_string   s8     	322222~d##00wIIIr5   c                L    ddl m}  ||                               d|          S )Nr   r[   re   rh   )r3   rS   r\   s      r"   _build_stub_modulez!AstroidManager._build_stub_module   s4    222222~d##00W===r5   r]   Sequence[str]c                &    ddl m}  |||          S )Nr   )build_namespace_package_module)ra   ro   )r3   rS   r]   ro   s       r"   _build_namespace_modulez&AstroidManager._build_namespace_module   s*     	CBBBBB--gt<<<r5   c                `    | j         rdS t          |          rdS t          || j                  S NT)r*   r   r   r-   )r3   rS   s     r"   _can_load_extensionz"AstroidManager._can_load_extension   sA    & 	4G$$ 	4AT5
 
 	
r5   context_file	use_cachec                <   |t          d          || j        v r|r| j        |         S |dk    r|                     |          S |rDt          j                    }t          j        t          j                            |                     	 |                     ||          }|j	        t          j        j        k    r7|                     |j                  }|||rt          j        |           S S n|j	        t          j        j        t          j        j        fv r|j	        t          j        j        k    rA|                     |          s,|                     |          |rt          j        |           S S 	 t%          |          }n*# t&          $ r}t)          d||j                  |d}~ww xY w|                     ||          |rt          j        |           S S |j	        t          j        j        k    rt)          d||j                  |j	        t          j        j        k    r4|                     ||j        pg           |rt          j        |           S S |j	        t          j        j        k    rg|j        ,|                     |          |rt          j        |           S S |                     |j        |d          |rt          j        |           S S |j        t)          d	|
          |                     |j        |d          |rt          j        |           S S # t           $ rJ}| j        D ];}		  |	|          c cY d}~|rt          j        |           S S # t           $ r Y 8w xY w|d}~ww xY w# |rt          j        |           w w xY w)rX   NzNo module name given.__main__z&Loading {modname} failed with:
{error})rS   r]   z)Unable to load compiled module {modname}.F)rU   z'Can't find a file for module {modname}.)rS   )r   r'   rl   osgetcwdchdirr]   dirnamefile_from_module_nametyper   
ModuleTypePY_ZIPMODULEzip_import_datalocation	C_BUILTINC_EXTENSIONrs   r   r!   r   ast_from_modulePY_COMPILEDPY_NAMESPACErp   submodule_search_locations	PY_FROZENrd   r)   )
r3   rS   rt   ru   old_cwd
found_specmodulenamed_moduleehooks
             r"   rc   z#AstroidManager.ast_from_module_name   se    ?&'>???
 d(((Y(%g..j  **7333 	4ikkGHRW__\22333;	"33G\JJJ$/">>>--j.ABB%!j  "!!!!"m & )+%  
 Ot'BBB 44W== C  227;;V  "!!!!"U#8#A#ALL    ,A ''0   	 ++L'BBD  "!!!!"A DO$???(?##,    DO$@@@33ZBHb 0  "!!!!"+ DO$===&.227;;&  "!!!!"! ))**=wQV)WW   "!!!!" "*(=w    %%j&97U%SS  "!!!!" $ 	 	 	1  4==(((((((
  "!!!!"	 ,   DG	  "!!!!"s   AL+ 1A.L+ 8F L+ 
F/F**F//L+ A'L+ 5L+ +L+ 4L+ +
M?5	M:?
M(	M:M?N (
M52M:4M55M::M??N Nnodes.Module | Nonec                   t           d S ddlm}  ||           }t          D ]}	 |                    |t
          j        j        z   d          \  }}n# t          $ r Y ;w xY w	 t          j	        ||z             }|
                    t
          j        j        d          }|                    |          r|dz   }|                    |                    |          ||          }	|	c S # t          $ r Y w xY wd S )Nr   r[      rY   z	.__init__)	zipimportra   r\   ZIP_IMPORT_EXTSrsplitrx   r]   sep
ValueErrorzipimporterreplace
is_packageri   
get_sourcer!   )
r3   rR   r\   builderexteggpathresourceimporterzmodnamer   s
             r"   r   zAstroidManager.zip_import_data  s3   4 	322222 .&&" 	 	C$,OOC"'+4Eq$I$I!   
$03??#++BGK==&&x00 6'+5H --''118X     ts$   +A
AA"BC&&
C32C3contextfilespec.ModuleSpecc           	     x   	 | j         ||f         }n~# t          $ rq 	 t          |                    d          |          }n<# t          $ r/}t          d||                    d                     }Y d }~nd }~ww xY w|| j         ||f<   Y nw xY wt          |t                    r|                    d           |S )NrY   )rt   z6Failed to import module {modname} with error:
{error}.)rS   error)	r(   KeyErrorr   splitr_   r   with_traceback
isinstancer   )r3   rS   r   r:   r   s        r"   r|   z$AstroidManager.file_from_module_name)  s   	A(';)?@EE 	A 	A 	A.MM#&&[      *M#**400	   <AD ';!7888	A e122 	-&&t,,,s8    
B$AB
A;%A61B6A;;BBr   types.ModuleTypec                   |p|j         }|| j        v r| j        |         S 	 |j        }t          |          r|                     ||          S n# t
          $ r Y nw xY wddlm}  ||                               ||          S )z4Given an imported module, return the astroid object.r   r[   )	__name__r'   __file__r   rd   AttributeErrorra   r\   module_build)r3   r   rS   rR   r\   s        r"   r   zAstroidManager.ast_from_moduleA  s     ,V_d(((%g..	H)) =))(G<<<=  	 	 	D	 	322222~d##00AAAs   +A 
AAklassr}   nodes.ClassDefc                $   |<	 |j         }n3# t          $ r&}t          d|t          |          |          |d}~ww xY w|                     |          }|                    |j                  d         }t          |t          j	                  sJ |S )z Get astroid for the given class.Nz,Unable to get module for class {class_name}.)cls
class_reprrS   r   )

__module__r   r   r#   rc   getattrr   r   r	   ClassDef)r3   r   rS   exc
modastroidrets         r"   ast_from_classzAstroidManager.ast_from_classV  s    ?*!   *B(//#	  
  ..w77
  003#u~.....
s    
<!7<r   objectcontextInferenceContext | NoneIterator[InferenceResult]c              #  @  K   t          |d          rt          |t                    s|j        }n7t          |t                    r|}nt	          ddt          |                    	 |j        }n_# t          $ r%}t	          d|t          |                    |d}~wt          $ r%}t          d|t          |                    |d}~ww xY w	 |j
        }n_# t          $ r%}t	          d|t          |                    |d}~wt          $ r%}t          d|t          |                    |d}~ww xY w|                     |          }||u r|                    ||          D ]}|V  dS |                    ||          D ]}|                                V  dS )	z"Infer astroid for the given class.	__class__z$Unable to get type for {class_repr}.N)r   r   z&Unable to get module for {class_repr}.zBUnexpected error while retrieving module for {class_repr}:
{error}z%Unable to get name for {class_repr}:
z@Unexpected error while retrieving name for {class_repr}:
{error})hasattrr   r}   r   r   r#   r   r   r!   r   r   rc   igetattrinstantiate_class)	r3   r   r   r   rS   r   namer   inferreds	            r"   infer_ast_from_somethingz'AstroidManager.infer_ast_from_somethingg  sL      3$$ 		ZT-B-B 		MEET"" 	EE&6$S>>   
	&GG 	 	 	&8$U++   	
  	 	 	$$U++	  
 		>DD 	 	 	&8$U++   	
  	 	 	$S$U++   		 ..w77
C<<&//g>>    '//g>> 3 3002222223 3sH   (A0 0
C: BC' CCC 
D4" DD4 D//D4r   Callable[[str], nodes.Module]c                :    | j                             |           dS )a}  Registers a hook to resolve imports that cannot be found otherwise.

        `hook` must be a function that accepts a single argument `modname` which
        contains the name of the module or package that could not be imported.
        If `hook` can resolve the import, must return a node of type `astroid.Module`,
        otherwise, it must raise `AstroidBuildingError`.
        N)r)   append)r3   r   s     r"   register_failed_import_hookz*AstroidManager.register_failed_import_hook  s!     	!((.....r5   c                F    | j                             |j        |           dS )z<Cache a module if no module with the same name is known yet.N)r'   
setdefaultr   )r3   r   s     r"   cache_modulezAstroidManager.cache_module  s#    %%fk6:::::r5   c                :    ddl m} |                                 dS )zBootstrap the required AST modules needed for the manager to work.

        The bootstrap usually involves building the AST for the builtins
        module, which is required by the rest of astroid to work correctly.
        r   )raw_buildingN)astroidr   _astroid_bootstrapping)r3   r   s     r"   	bootstrapzAstroidManager.bootstrap  s.     	)(((((++-----r5   c                   ddl m} ddlm} ddlm} ddlm} ddlm	}  |             t                       | j                                         t          j        t                    t           j        d         _        |j        t(          t*          j        |j        |j        fD ]}|                                 |                                   ||            dS )	zgClear the underlying caches, bootstrap the builtins module and
        re-register transforms.
        r   )register_all_brains)clear_inference_tip_cache)ObjectModel)LookupMixIn)r   r.   N)astroid.brain.helpersr   astroid.inference_tipr   astroid.interpreter.objectmodelr   astroid.nodes._base_nodesr   astroid.nodes.scoped_nodesr   r   r'   clearcollectionsdefaultdictlistr%   r/   
transformslookupr   r   is_namespace
attributes_metaclass_lookup_attributecache_clearr   )r3   r   r   r   r   r   	lru_caches          r"   clear_cachezAstroidManager.clear_cache  s    	>=====CCCCCC??????999999777777!!###  """8C8OPT8U8U\*5 ""0
 	$ 	$I !!#### 	D!!!!!r5   )r   r0   )r   r6   )r:   r6   r   r0   )r   r@   )r:   r@   r   r0   )r   rI   )rM   rN   r   r   )NTF)
rR   r   rS   rT   rU   r6   rV   r6   r   rI   )re   N)rf   r   rS   r   rR   rT   r   rI   )rS   r   r   rI   )rS   r   r]   rm   r   rI   )rS   r   r   r6   rr   )rS   rT   rt   rT   ru   r6   r   rI   )rR   r   r   r   )rS   r   r   rT   r   r   rE   )r   r   rS   rT   r   rI   )r   r}   rS   rT   r   r   )r   r   r   r   r   r   )r   r   r   r0   )r   rI   r   r0   )"r   r   __qualname____doc__r   setr   r/   __annotations__r4   propertyr*   setterr+   r,   rF   rH   rL   rQ   rd   rj   rl   rp   rs   rc   r   r|   r   r   r   r   r   r   r    r5   r"   r%   r%   /   s?         
 D ""' #'*suu&&((	, 	,E 	 	 	 	= = = = > > > X> "? ? ? #"? 4 4 4 X4 5 5 5 5 < < < X<  = = = ! = 2 2 X2 4 4 X4 . . . X.+ + + + #&X &X &X &X &XR DH	J 	J 	J 	J 	J> > > >= = = =
 
 
 
 $(	O" O" O" O" O"b   4   2 ?CB B B B B*    $ ?C23 23 23 23 23h/ / / /; ; ; ;. . . ." " " " " "r5   r%   )r   r   r   r   )+r   
__future__r   r   rx   typesr   collections.abcr   r   r   typingr   r   r   r	   astroid.contextr
   r   astroid.exceptionsr   r   astroid.interpreter._importr   r   astroid.modutilsr   r   r   r   r   r   r   r   r   astroid.transformsr   astroid.typingr   r   r   r#   r%   r   r5   r"   <module>r      s  
 
 # " " " " "     				      8 8 8 8 8 8 8 8 8 8                       ? ? ? ? ? ? ? ? G G G G G G G G 2 2 2 2 2 2 2 2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 0 / / / / / ? ? ? ? ? ? ? ?;   c" c" c" c" c" c" c" c" c" c"r5   