o ?OgQ_@s dZddlZddlZddlZddlZddlZddlZddlZej dZ ej dZ ej dZ ej dZ e e fZejZdZdZdZd Zd Zd Zd ZiZd dZiZddZdddZGdddZGdddZddZedkrzeZ WdSe!ye"dYdSwdS)z3Find modules used by a script, using introspection.N LOAD_CONST IMPORT_NAME STORE_NAME STORE_GLOBALcCst|g|dSN)packagePathMap setdefaultappend)Z packagenamepathr3/opt/alt/python310/lib64/python3.10/modulefinder.pyAddPackagePath&srcCs |t|<dSr )replacePackageMap)ZoldnamenewnamerrrReplacePackage1s rcCstjjtjj||}|durtdj|d|d|jtjjur+ddddt ffS|jtjj ur:ddddt ffS|j }|j |rOdtj|ddtffSt|jtjjrZt}nt|jtjjret}nt|jtjjrpt}nddddtffSt|}tj|d}|||d|ffS)zDAn importlib reimplementation of imp.find_module (for our purposes).NzNo module named {name!r})namerb) importlib machinery PathFinderinvalidate_caches find_spec ImportErrorformatloaderBuiltinImporter _C_BUILTINFrozenImporter _PY_FROZENorigin is_packageosrdirname_PKG_DIRECTORY isinstanceSourceFileLoader _PY_SOURCEExtensionFileLoader _C_EXTENSIONSourcelessFileLoader _PY_COMPILED _SEARCH_ERRORio open_codesplitext)rrspecZ file_pathkindfilesuffixrrr _find_module5s*   r;c@seZdZdddZddZdS)ModuleNcCs(||_||_||_d|_i|_i|_dSr )__name____file____path____code__ globalnames starimports)selfrr9rrrr__init__ds  zModule.__init__cCsLd|jf}|jdur|d|jf}|jdur |d|jf}|d}|S)Nz Module(%rz, %r))r=r>r?)rCsrrr__repr__qs   zModule.__repr__)NN)r= __module__ __qualname__rDrGrrrrr<bs  r<c@seZdZd6ddZddZddZd d Zd d Zd dZd7ddZ d8ddZ ddZ ddZ d9ddZ ddZddZddZd d!Zd8d"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd:d,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS); ModuleFinderNrcCsZ|durtj}||_i|_i|_||_d|_|dur|ng|_|dur%|ng|_g|_dS)Nr) sysrmodules badmodulesdebugindentexcludes replace_pathsprocessed_paths)rCrrNrPrQrrrrD|s zModuleFinder.__init__cGsZ||jkr+t|jD]}tdddq t|dd|D] }tt|ddqtdSdS)N  end)rNrangerOprintrepr)rClevelstrargsiargrrrmsgs   zModuleFinder.msgcGs0|d}||jkr|jd|_|j|dSdSNrrrNrOr_rCr\rZrrrmsgin   zModuleFinder.msgincGs0|d}||jkr|jd|_|j|dSdSr`rarbrrrmsgoutrdzModuleFinder.msgoutcCsX|dd|t|}ddtf}|d|||WddS1s%wYdS)Nr run_scriptrr__main__)r_r4r5r. load_module)rCpathnamefpstuffrrrrfs   "zModuleFinder.run_scriptcCsjtj|\}}tj|\}}t|}|dtf}|||||WddS1s.wYdS)Nr)r)rsplitr6r4r5r.rh)rCridirrZextrjrkrrr load_files   "zModuleFinder.load_filerc Cs\|dd|||||j||d}|||\}}|||}|s#|S|jr,|||dS)Nr import_hookrZ)r_determine_parentfind_head_package load_tailr?ensure_fromlist) rCrcallerfromlistrZparentqtailmrrrros  zModuleFinder.import_hookcCsJ|dd|||r|dkr|dddS|j}|dkrb|jr$|d8}|dkr<|j|}||us3J|dd||S|d|krGtdd|dd| }|j|}|dd||S|jry|j|}||uspJ|dd||Sd|vr| d}|d|}|j|}|j|ksJ|dd||S|dddS) Nrqrzdetermine_parent -> Nonerzdetermine_parent ->.zrelative importpath too deep) rcrer=r?rLcountr joinrlrfind)rCrurZZpnamerwr]rrrrqsB           zModuleFinder.determine_parentcCs|dd||d|vr |d}|d|}||dd}n|}d}|r.d|j|f}n|}||||}|rF|dd||f||fS|rb|}d}||||}|rb|dd||f||fS|dd|td |) Nr{rrr|rr%s.%szfind_head_package ->"raise ImportError: No module namedNo module named )rcfindr= import_modulerer )rCrwrr]headryZqnamerxrrrrrs.   zModuleFinder.find_head_packagecCs|dd|||}|rG|d}|dkrt|}|d|||dd}}d|j|f}||||}|sE|dd|td||s |dd ||S) Nr{rsr|rrrrrz load_tail ->)rcrlenr=rrer )rCrxryrzr]rZmnamerrrrss   zModuleFinder.load_tailcCs|dd||||D]2}|dkr"|s!||}|r!|||dq t||s=d|j|f}||||}|s=td|q dS)Nr{rt*rrr)r_find_all_submodulesrthasattrr=rr )rCrzrv recursivesuballsubnameZsubmodrrrrts   zModuleFinder.ensure_fromlistc Cs|jsdSi}g}|tjjdd7}|tjjdd7}|tjjdd7}|jD]F}zt|}WntyC| dd|Yq*w|D])}d}|D]}t |} || d|krd|d| }nqL|ro|dkro|||<qFq*| S)Nrzcan't list directoryrD) r?rrEXTENSION_SUFFIXESSOURCE_SUFFIXESBYTECODE_SUFFIXESr)listdirOSErrorr_rkeys) rCrzrLsuffixesrmnamesrmodZsuffnrrrrs6    z ModuleFinder.find_all_submodulescCs|dd|||z|j|}Wn tyYn w|dd||S||jvr0|dddS|r?|jdur?|dddSz|||oG|j|\}}}Wnty_|dddYdSwz|||||}W|rp| n|rx| ww|rt ||||dd||S)Nrrzimport_module ->zimport_module -> None) rcrLKeyErrorrerMr? find_moduler rhclosesetattr)rCZpartnamefqnamerwrzrjrirkrrrr,sD        zModuleFinder.import_modulec Cs|\}}}|dd||o d||tkr#|||}|dd||S|tkr0t||d} n9|tkrgz|} tj | |iWnt yZ} z |ddt | |d} ~ wwt t| dd} nd} ||}||_| r|jr{|| } | |_|| ||dd||S)Nrrhrjzload_module ->execzraise ImportError: )rcr+ load_packagerer.compilereadr2r_bootstrap_external _classify_pycr r[marshalloads memoryview add_moduler>rQreplace_paths_in_coder@ scan_code) rCrrjri file_infor:modetyperzcodataexcrrrrhLs8     zModuleFinder.load_modulecCs>||jvr i|j|<|rd|j||j<dSd|j|d<dS)Nr-)rMr=)rCrrurrr_add_badmoduleis  zModuleFinder._add_badmodulec CsJ||jvr |||dSz |j|||dWnCty9}z|ddt||||WYd}~dSd}~wtyZ}z|ddt||||WYd}~dSd}~ww|r|D]C}|d|}||jvrs|||q_z |j|||g|dWq_ty}z|ddt||||WYd}~q_d}~wwdSdS)Nrprz ImportError:z SyntaxError:r|)rMrror r_r[ SyntaxError)rCrrurvrZr_rfullnamerrr_safe_import_hookqs:     zModuleFinder._safe_import_hookc cs|j}|j}|j}ddt|D}t|D]`\}\}}|tvr+d||ffVq|tkrx|dkrx||dd||ddkrItkrxnq|||dd} |||dd} | dkrmd| ||ffVn d| | ||ffVqqdS) NcSs"g|] \}}}|tkr||fqSr) EXTENDED_ARG).0_opr^rrr sz-ModuleFinder.scan_opcodes..storerrrabsolute_importrelative_import) co_codeco_names co_constsdisZ_unpack_opargs enumerate STORE_OPSrr) rCrcoderconstsZopargsr]rZopargrZrvrrr scan_opcodess&0zModuleFinder.scan_opcodescCs||j}|j}||D]\}}|dkr|\}d|j|<q |dkr~|\}}d} |dur6d|vr/d} dd|D}|j|||dd| r}d} |jrQ|j|jd |} | dur[|j|} | durx|j| j|j | j | j durwd|j |<q d|j |<q |d kr|\} }}|r|j|||| dq |j || d} |j| jd|ddq t ||j D]} t| t|r|| |qdS) NrrrrrcSsg|]}|dkr|qS)rr)rfrrrrsz*ModuleFinder.scan_code..rpr|r)rrrArr?rLgetr=updaterBr@rq RuntimeErrorrr,rr)rCrrzrscannerZwhatr\rrvZ have_starZmmrZrwcrrrrsP        zModuleFinder.scan_codecCs|dd||t|}|r|}||}||_|g|_|jt|g|_|d|j\}}}z|||||| dd||W|rJ| SS|rR| ww)NrrrDzload_package ->) rcrrrr>r?r rrhrer)rCrrirrzrjZbufrkrrrrs$    zModuleFinder.load_packagecCs*||jvr |j|St||j|<}|Sr )rLr<)rCrrzrrrrs  zModuleFinder.add_modulecCsn|dur |jd|}n|}||jvr|dd|t||dur2|tjvr/ddddtffS|j}t||S)Nr|rzfind_module -> Excludedr) r=rPrer rKbuiltin_module_namesr$rr;)rCrrrwrrrrrs   zModuleFinder.find_modulecCsttddtddt|j}|D]!}|j|}|jr)tdddntdddtd||jp7d q|\}}|rattd |D]}t|j|}td |d d |qK|rttdddtd|D]}t|j|}td |d d |qrdSdS)zPrint a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. z %-25s %s)NameZFile)----rPrTrUrzz%-25srzMissing modules:?z imported fromz, z7Submodules that appear to be missing, but could also bez#global names in the parent package:N) rXsortedrLrr?r>any_missing_mayberMr~)rCrkeyrzmissingmayberZmodsrrrreports4      zModuleFinder.reportcCs|\}}||S)zReturn a list of modules that appear to be missing. Use any_missing_maybe() if you want to know which modules are certain to be missing, and which *may* be missing. )r)rCrrrrr any_missing s zModuleFinder.any_missingcCsg}g}|jD]V}||jvrq|d}|dkr||q||dd}|d|}|j|}|durX||j|vrC||q||jvrIq|jrR||q||q||q||||fS)aReturn two lists, one with modules that are certainly missing and one with modules that *may* be missing. The latter names could either be submodules *or* just global names in the package. The reason it can't always be determined is that it's impossible to tell which names are imported when "from module import *" is done with an extension module, short of actually importing it. r|rrN) rMrPrrrLrrArBsort)rCrrrr]rZpkgnameZpkgrrrr(s0            zModuleFinder.any_missing_maybecCstj|j}}|jD]\}}||r!||t|d}nq |jrH||jvrH||kr9| dd||fn | dd|f|j |t |j }t t|D]}t||t|rg|||||<qS|jt||dS)Nrzco_filename %r changed to %rz co_filename %r remains unchanged)r co_filename)r)rnormpathrrQ startswithrrNrRrerlistrrWr,rrreplacetuple)rCrZ new_filenameZoriginal_filenamerrrr]rrrrVs*   z"ModuleFinder.replace_paths_in_code)NrNN)NNr)r)rr )r=rHrIrDr_rcrerfrnrorqrrrsrtrrrhrrrrrrrrrrrrrrrrJzs4     #   1 " .rJc Csddl}z|tjddd\}}Wn|jy+}z t|WYd}~dSd}~wwd}d}g}g}|D]-\}} |dkrB|d}|dkrHd}|dkrT|| tj}|dkrZd}|dkrc|| q6|sid } n|d} tj dd} tj | | d<|| } |dkrtd | D] } td t | qt | ||} |ddD]+}|dkrd}q|r|d dd kr| |dd ddgq| |q| |q| | | | S)Nrrzdmp:qx:z-dz-mz-pz-qz-xzhello.pyzpath:rSz.*r)getoptrKargverrorrXrlr)pathseprrr*rYrJrornrfr)rZoptsr\r_rNZdomodsZaddpathZexcludeoaZscriptritemmfr^rrrtestns^      rrgz [interrupted]r )#__doc__rZimportlib._bootstrap_externalrimportlib.machineryrr)r4rKZopmaprrrrrrr3r.r2r0r+r$r&r rrrr;r<rJrr=rKeyboardInterruptrXrrrrsN     -w;