ó 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#R1tAssertionErrortcountt ImportErrortjoinRLtrfind(R'RVR:tpnameRXR((s$/usr/lib64/python2.7/modulefinder.pyRR™sB             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>RcRR!RdR?R_(R'RYRZR[RRetmname((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!RdR_(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.pyRds6  " 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#RRzRGR?R{(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_BUILTINRRz(R'R(RRXR’((s$/usr/lib64/python2.7/modulefinder.pyRzà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----(R1RstsortR#R"tany_missing_maybeR2R`(R'RstkeyR[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( R2R5RaRR1RR R%R&Rµ(R'R¸R¹R(RRntpkgnametpkg((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@RPRQRRRSRTRURiRdRGR‘R“tstructRœR¡R¤RŠR�RˆRzR»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.*Rh(tgetoptR0targvRrRLRKtpathsepRRtdirnameR9R/RQR RPR@R»(RÓtoptsR<R=R3tdomodstaddpathtexcludetotatscriptRtitemtmfR((s$/usr/lib64/python2.7/modulefinder.pyttesthsX #                 RBs [interrupt]( t__doc__t __future__RtdisRER†RKR0RÃRÒRjt __stdout__RDtopmapRRRRR›R R RRRRRR R/RàR!RßtKeyboardInterrupt(((s$/usr/lib64/python2.7/modulefinder.pytsB                  ÿÿ ;