grthtrhthjhtyjytjytkergtrhtrjytjerhrfhó zfc@sldZddlmZddlZddlZddlZddlZddlZddlZddl Z e ej dƒr…dZ ndZ ej dZej dZej d Zej d ZeefZejZejZd „ZiZd „ZiZd „Zdfd„ƒYZdfd„ƒYZd„Zedkrhy eƒZWnek rddGHnXndS(s3Find modules used by a script, using introspection.iÿÿÿÿ(t generatorsNtnewlinestUtrt LOAD_CONSTt IMPORT_NAMEt STORE_NAMEt STORE_GLOBALccsÅd}t|ƒ}d}x¦||krÀt||ƒ}|}|d}d}|tkr¯t||ƒt||dƒd|}d}|d}|tkr¯|d}q¯n|||fVqWdS(Niiiii(tlentordtNonet HAVE_ARGUMENTt EXTENDED_ARG(tcodet extended_argtntitoptoffsettarg((s$/usr/lib64/python2.7/modulefinder.pyt_unpack_opargss   *  cCs-tj|gƒ}|j|ƒ|t| Noneisdetermine_parent ->t.srelative importpath too deep( R>R?R R!R#R1tcountt ImportErrortjoinRLtrfind(R'RVR:tpnameRXR((s$/usr/lib64/python2.7/modulefinder.pyRR™s<             cCs/|jdd||ƒd|krL|jdƒ}|| }||d}n |}d}|rtd|j|f}n|}|j|||ƒ}|r¸|jdd||fƒ||fS|r |}d}|j|||ƒ}|r |jdd||fƒ||fSn|jdd|ƒtd |‚dS( NiRSR\iRAs%s.%ssfind_head_package ->s"raise ImportError: No module namedsNo module named (R>tfindR!t import_moduleR?R R^(R'RXR(RtheadRZtqnameRY((s$/usr/lib64/python2.7/modulefinder.pyRS¼s.    cCsÔ|jdd||ƒ|}xž|r¼|jdƒ}|dkrOt|ƒ}n|| ||d}}d|j|f}|j|||ƒ}|s|jdd|ƒtd|‚qqW|jdd |ƒ|S( NiRTR\iis%s.%ss"raise ImportError: No module namedsNo module named s load_tail ->(R>RbRR!RcR?R^(R'RYRZR[RRdtmname((s$/usr/lib64/python2.7/modulefinder.pyRT×s  cCsÁ|jdd|||ƒx¡|D]™}|dkri|s¹|j|ƒ}|rf|j||dƒqfq¹q t||ƒs d|j|f}|j|||ƒ}|s¹td|‚q¹q q WdS(NiRUt*is%s.%ssNo module named (R=tfind_all_submodulesRUthasattrR!RcR^(R'R[RWt recursivetsubtalltsubnametsubmod((s$/usr/lib64/python2.7/modulefinder.pyRUæs  c Cs|js dSi}g}x%tjƒD]}|j|dƒq&WxÄ|jD]¹}ytj|ƒ}Wn*tjk r�|jdd|ƒqKnXxp|D]h}d}x:|D]2} t | ƒ} || | kr«|| }Pq«q«W|r˜|dkr˜|||simport_module -> None( R>R1tKeyErrorR?R2R R#t find_moduleR^RGtclosetsetattr(R'tpartnametfqnameRXR[RIRHRJ((s$/usr/lib64/python2.7/modulefinder.pyRcs6  " c Csr|\}}}|jdd||o'd|ƒ|tjkrf|j||ƒ}|jdd|ƒ|S|tjkr”t|jƒd|dƒ} nr|tjkr|jdƒtj ƒkrá|jdd|ƒt d |‚n|jdƒt j |ƒ} nd} |j|ƒ}||_| r[|jr?|j| ƒ} n| |_|j| |ƒn|jdd|ƒ|S( NiRGRIsload_module ->s texecis#raise ImportError: Bad magic numbersBad magic number in %s(R>REt PKG_DIRECTORYt load_packageR?RFtcompiletreadt PY_COMPILEDt get_magicR^tmarshaltloadR t add_moduleR"R6treplace_paths_in_codeR$t scan_code( R'R}RIRHt file_infotsuffixtmodettypeR[tco((s$/usr/lib64/python2.7/modulefinder.pyRG-s0    cCsQ||jkri|j|( R>RRR‡R"R#RRyRGR?Rz(R'R}RHRR[RItbufRJ((s$/usr/lib64/python2.7/modulefinder.pyR€Çs    cCs5||jkr|j|St|ƒ|j|<}|S(N(R1R (R'R}R[((s$/usr/lib64/python2.7/modulefinder.pyR‡Ús cCs¤|dk r |jd|}n|}||jkrT|jdd|ƒt|‚n|dkr”|tjkrˆddddtjffS|j }ntj ||ƒS(NR\isfind_module -> ExcludedRA( R R!R5R?R^R0tbuiltin_module_namesREt C_BUILTINRRy(R'R(RRXR‘((s$/usr/lib64/python2.7/modulefinder.pyRyàs    cCs<HddGHddGH|jjƒ}|jƒxE|D]=}|j|}|jrVdGndGd|G|jpndGHq3W|jƒ\}}|rÝHd GHxH|D]=}|j|jƒ}|jƒd G|Gd Gd j|ƒGHq™Wn|r8Hd GdGHxH|D]=}|j|jƒ}|jƒd G|Gd Gd j|ƒGHqôWndS(s’Print a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. s %-25s %stNametFiles----tPR[s%-25sRAsMissing modules:t?s imported froms, s7Submodules that appear to be missing, but could also bes#global names in the parent package:N(R°R±(s----s----(R1RrtsortR#R"tany_missing_maybeR2R_(R'RrtkeyR[tmissingtmaybeR(tmods((s$/usr/lib64/python2.7/modulefinder.pytreportñs6        !  cCs|jƒ\}}||S(s½Return 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µ(R'R·R¸((s$/usr/lib64/python2.7/modulefinder.pyt any_missingscCs"g}g}xõ|jD]ê}||jkr1qn|jdƒ}|dkr_|j|ƒqn||d}|| }|jj|ƒ}|dk ró||j|kr¸|j|ƒq||jkrÊq|jrã|j|ƒq|j|ƒq|j|ƒqW|j ƒ|j ƒ||fS(s®Return 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\iiN( R2R5R`RR1RR R%R&R´(R'R·R¸R(RRmtpkgnametpkg((s$/usr/lib64/python2.7/modulefinder.pyRµs0        cCs‚tjj|jƒ}}x>|jD]3\}}|j|ƒr#||t|ƒ}Pq#q#W|jrÅ||jkrÅ||kr›|j dd||fƒn|j dd|fƒ|jj |ƒnt |j ƒ}xMt t|ƒƒD]9}t||t|ƒƒrç|j||ƒ||R?R@RPRQRRRSRTRURhRcRGR�R’tstructR›R R£R‰R€R‡RyRºR»RµRˆ(((s$/usr/lib64/python2.7/modulefinder.pyR/^s4     #          6    %  .cCs"ddl}y#|jtjddƒ\}}Wn|jk rM}|GHdSXd}d}g}g}x˜|D]�\}} |dkr’|d}n|dkr§d}n|dkrÌ|| jtjƒ}n|dkrád}n|d krm|j| ƒqmqmW|sd } n |d} tj} tjj | ƒ| d<|| } |dkrxd GHx | D]} d Gt | ƒGHq\Wnt | ||ƒ} xz|dD]n}|dkr³d}q•n|rö|d dkræ| j |d ddgƒq| j |ƒq•| j|ƒq•W| j| ƒ| jƒ| S(Niÿÿÿÿisdmp:qx:is-ds-ms-ps-qs-xshello.pyspath:s iþÿÿÿs.*Rg(tgetoptR0targvRqRLRKtpathsepRRtdirnameR9R/RQR RPR@Rº(RÒtoptsR<R=R3tdomodstaddpathtexcludetotatscriptRtitemtmfR((s$/usr/lib64/python2.7/modulefinder.pyttesthsX #                 RBs [interrupt]( t__doc__t __future__RtdisRER…RKR0RÂRÑRit __stdout__RDtopmapRRRRRšR R RRRRRR R/RßR!RÞtKeyboardInterrupt(((s$/usr/lib64/python2.7/modulefinder.pytsB                  ÿÿ ;