�`^c@s�dZddlmZddlZddlZddlZddlZddlZddlZddl Z e
ejd�r�dZndZe
ejjd��Ze
ejjd��Ze
ejjd ��Ze
ejjd
��ZeegZe
ej�ZiZd�ZiZd�Zd
fd��YZdfd��YZd�Zedkr�y
e�ZWnek
r�dGHnXndS(s3Find modules used by a script, using introspection.i�(t
generatorsNtnewlinestUtrt
LOAD_CONSTtIMPORT_NAMEt
STORE_NAMEtSTORE_GLOBALcCs-tj|g�}|j|�|t|<dS(N(tpackagePathMaptgettappend(tpackagenametpathtpaths((s"/sys/lib/python2.7/modulefinder.pytAddPackagePath#s
cCs|t|<dS(N(treplacePackageMap(toldnametnewname((s"/sys/lib/python2.7/modulefinder.pytReplacePackage/stModulecBs eZddd�Zd�ZRS(cCs:||_||_||_d|_i|_i|_dS(N(t__name__t__file__t__path__tNonet__code__tglobalnameststarimports(tselftnametfileR((s"/sys/lib/python2.7/modulefinder.pyt__init__5s cCsjd|jf}|jdk r6|d|jf}n|jdk r\|d|jf}n|d}|S(Ns Module(%rs, %rt)(RRRR(Rts((s"/sys/lib/python2.7/modulefinder.pyt__repr__Bs
N(Rt
__module__RRR!(((s"/sys/lib/python2.7/modulefinder.pyR3s
tModuleFindercBseZddggd�Zd�Zd�Zd�Zd�Zd�Zdddd�Z dd �Z
d
�Zd�Zdd�Z
d
�Zd�Zd�Zd�Zdd�Zejd�Zejd�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�ZRS(icCsd|dkrtj}n||_i|_i|_||_d|_||_||_g|_ dS(Ni(
RtsysRtmodulest
badmodulestdebugtindenttexcludest
replace_pathstprocessed_paths(RRR'R)R*((s"/sys/lib/python2.7/modulefinder.pyRMs cGsT||jkrPxt|j�D]
}dGqW|Gx|D]}t|�Gq8WHndS(Ns (R'trangeR(trepr(Rtleveltstrtargstitarg((s"/sys/lib/python2.7/modulefinder.pytmsgYs
cGs=|d}||jkr9|jd|_|j|�ndS(Nii(R'R(R3(RR0R.((s"/sys/lib/python2.7/modulefinder.pytmsginbs
cGs=|d}||jkr9|jd|_|j|�ndS(Nii(R'R(R3(RR0R.((s"/sys/lib/python2.7/modulefinder.pytmsgouths
cCsN|jdd|�t|t�}ddtjf}|jd|||�dS(Nit
run_scripttRt__main__(R3topent READ_MODEtimpt PY_SOURCEtload_module(Rtpathnametfptstuff((s"/sys/lib/python2.7/modulefinder.pyR6nscCsktjj|�\}}tjj|�\}}t|t�}|dtjf}|j||||�dS(NR( tosRtsplittsplitextR9R:R;R<R=(RR>tdirRtextR?R@((s"/sys/lib/python2.7/modulefinder.pyt load_filets
i�c Cs�|jdd||||�|j|d|�}|j||�\}}|j||�}|se|S|jr�|j||�ndS(Nitimport_hookR.(R3tdetermine_parenttfind_head_packaget load_tailRtensure_fromlistR( RRtcallertfromlistR.tparenttqttailtm((s"/sys/lib/python2.7/modulefinder.pyRG{s cCs�|jdd||�|s)|dkr=|jdd�dS|j}|dkr|jrh|d8}n|dkr�|j|}||ks�t�|jdd|�|S|jd�|kr�td�ndj |j
d�| �}|j|}|jdd|�|S|jrK|j|}||ks4t�|jdd|�|Sd|kr�|jd�}|| }|j|}|j|ks�t�|jdd|�|S|jdd�dS( NiRHisdetermine_parent -> Noneisdetermine_parent ->t.srelative importpath too deep(R4R5RRRR%tAssertionErrortcounttImportErrortjoinRBtrfind(RRLR.tpnameRNR1((s"/sys/lib/python2.7/modulefinder.pyRH�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(
NiRIRRiR7s%s.%ssfind_head_package ->s"raise ImportError: No module namedsNo module named (R4tfindRt
import_moduleR5RRU(RRNRR1theadRPtqnameRO((s"/sys/lib/python2.7/modulefinder.pyRI�s.
cCs�|jdd||�|}x�|r�|jd�}|dkrOt|�}n|| ||d}}d|j|f}|j|||�}|s|jdd|�td|�qqW|jdd |�|S(
NiRJRRiis%s.%ss"raise ImportError: No module namedsNo module named sload_tail ->(R4RYtlenRRZR5RU(RRORPRQR1R[tmname((s"/sys/lib/python2.7/modulefinder.pyRJ�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(NiRKt*is%s.%ssNo module named (R3tfind_all_submodulesRKthasattrRRZRU(RRQRMt recursivetsubtalltsubnametsubmod((s"/sys/lib/python2.7/modulefinder.pyRK�s
cCs|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�|||<q�q�WqKW|j
�S(Niiscan't list directoryR(RR;tget_suffixesR
RAtlistdirterrorR3RR]tkeys(RRQR%tsuffixesttripleRDtnamesRtmodtsufftn((s"/sys/lib/python2.7/modulefinder.pyR`�s,
cCsW|jdd|||�y|j|}Wntk
r=nX|jdd|�|S||jkrx|jdd�dS|r�|jdkr�|jdd�dSy+|j||o�|j|�\}}}Wn%tk
r�|jddd�dSXz|j ||||�}Wd|r&|j
�nX|r@t|||�n|jdd|�|S(NiRZsimport_module ->simport_module -> None(R4R%tKeyErrorR5R&RRtfind_moduleRUR=tclosetsetattr(RtpartnametfqnameRNRQR?R>R@((s"/sys/lib/python2.7/modulefinder.pyRZ�s6
"
c
Csr|\}}}|jdd||o'd|�|tjkrf|j||�}|jdd|�|S|tjkr�t|j�d|d�} nr|tjkr|jd�tj �kr�jdd|�t
d |�n|jd�tj|�} nd} |j|�}||_| r[|jr?|j| �} n| |_|j| |�n|jdd|�|S(
NiR=R?sload_module ->s
texecis#raise ImportError: Bad magic numbersBad magic number in %s(R4R;t
PKG_DIRECTORYtload_packageR5R<tcompiletreadtPY_COMPILEDt get_magicRUtmarshaltloadRt
add_moduleRR*treplace_paths_in_codeRt scan_code(
RRvR?R>t file_infotsuffixtmodettypeRQtco((s"/sys/lib/python2.7/modulefinder.pyR=s0
cCsQ||jkri|j|<n|r<d|j||j<nd|j|d<dS(Nit-(R&R(RRRL((s"/sys/lib/python2.7/modulefinder.pyt_add_badmodule5s
cCs,||jkr#|j||�dSy|j||d|�Wn<tk
r{}|jddt|��|j||�n�X|r(x�|D]�}||jkr�|j||�q�ny |j|||gd|�Wq�tk
r }|jddt|��|d|}|j||�q�Xq�WndS(NR.isImportError:RR(R&R�RGRUR3R/(RRRLRMR.R3Rctfullname((s"/sys/lib/python2.7/modulefinder.pyt_safe_import_hook=s&
c
cs�|j}|j}|j}x�|r�d}|tkru|d|dd!�\}d||ffV|d}qn|tkr�|dtkr�|d|d �\}} d|||| ffV|d}qn|tkr�d}q|d}qWdS( Nis<Hiitstores<xHxHitimport(tco_codetco_namest co_constst STORE_OPSRRt
HAVE_ARGUMENT(
RR�tunpacktcodeRmtconststctopargtoparg_1toparg_2((s"/sys/lib/python2.7/modulefinder.pytscan_opcodesTs$
c
csi|j}|j}|j}ttt}x9|rd|d}|tkr�|d|dd!�\}d||ffV|d}q,n|ddd�|kr>|d|d �\} }
}|| }|dkr� ||
||ffVnD|dkrd
||
||ffVnd|||
||ffV|d}q,n|tkrW|d}q,|d}q,WdS(Nis<HiiR�i s<xHxHxHi�R�tabsolute_importtrelative_import(R�R�R�RRR�R�(
RR�R�R�RmR�tLOAD_LOAD_AND_IMPORTR�R�R�R�toparg_3R.((s"/sys/lib/python2.7/modulefinder.pytscan_opcodes_25ls0
cCs�|j}tjd
kr$|j}n |j}x||�D]\}}|dkrk|\}d|j|<q:|dkr�|\}}d} |dk r�d|kr�d} ng|D]}
|
dkr�|
^q�}n|dkr�}nd }|j|||d
|�| r@d}|jr;|j j
|jd|�}n|dkr\|j j
|�}n|dk r�|jj|j�|j
j|j
�|jdkr�d|j
|<q�q�d|j
|<q@q:|dkr4|\}}}|r|j|||d
|�q@|j|d
|�}
|j|
jd|d
d�q:t|��q:Wx9|jD].}t|t|��rN|j||�qNqNWdS(NiiR�iR�R�iR_i�R.RRR�(ii(simportsabsolute_import(R�R$tversion_infoR�R�RRR�RR%R RtupdateRRRHtRuntimeErrorR�t
isinstanceR�R�(RR�RQR�tscannertwhatR0RRMt have_startfR.tmmRNR�((s"/sys/lib/python2.7/modulefinder.pyR��sR ( cCs�|jdd||�tj|�}|r4|}n|j|�}||_|g|_|jtj|g�|_|jd|j�\}}}|j||||�|j dd|�|S(NiRyRsload_package ->(
R4RR R�RRRRrR=R5(RRvR>RRQR?tbufR@((s"/sys/lib/python2.7/modulefinder.pyRy�s cCs5||jkr|j|St|�|j|<}|S(N(R%R(RRvRQ((s"/sys/lib/python2.7/modulefinder.pyR��scCs�|dk r |jd|}n|}||jkrT|jdd|�t|�n|dkr�|tjkr�ddddtjffS|j }ntj
||�S(NRRisfind_module -> ExcludedR7(RRR)R5RUR$tbuiltin_module_namesR;t C_BUILTINRRr(RRRRNR�((s"/sys/lib/python2.7/modulefinder.pyRr�scCs<HddGHddGH|jj�}|j�xE|D]=}|j|}|jrVdGndGd|G|jpndGHq3W|j�\}}|r�Hd GHxH|D]=}|j|j�}|j�d
G|GdGdj|�GHq�Wn|r8Hd
GdGHxH|D]=}|j|j�}|j�d
G|GdGdj|�GHq�dS(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----tPRQs%-25sR7sMissing 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----(R%RjtsortRRtany_missing_maybeR&RV(RRjtkeyRQtmissingtmaybeRtmods((s"/sys/lib/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�(RR�R�((s"/sys/lib/python2.7/modulefinder.pytany_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.
RRiiN(
R&R)RWR
R%R RRRR�(RR�R�RR1Retpkgnametpkg((s"/sys/lib/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||�||<q��tj|j|j|j|j|jt|�|j|j||j|j|j|j|j�S(Nisco_filename %r changed to %rs co_filename %r remains unchanged( RARtnormpathtco_filenameR*t
startswithR]R'R+R5R
tlistR�R,R�R�R�ttypestCodeTypetco_argcountt
co_nlocalstco_stacksizetco_flagsR�ttupleR�tco_varnamestco_nametco_firstlinenot co_lnotabtco_freevarstco_cellvars(RR�tnew_filenametoriginal_filenameR�RR�R1((s"/sys/lib/python2.7/modulefinder.pyR�Ds*N(RR"RRR3R4R5R6RFRGRHRIRJRKR`RZR=R�R�tstructR�R�R�R�RyR�RrR�R�R�R�(((s"/sys/lib/python2.7/modulefinder.pyR#Ks4 # 6 % .cCs"ddl}y#|jtjdd�\}}Wn|jk
rM}|GHdSXd}d}g}g}x�|D]�\}} |dkr�|d}n|dkr�d}n|dkr�|| jtj�}n|dkr�}n|d krm|j| �qmqmW|sd
}
n
|d}
tj}tjj |
�|d<||}|dkrxdGHx |D]}dGt
|�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.*R_(tgetoptR$targvRiRBRAtpathsepR
RtdirnameR-R#RGRRFR6R�(R�toptsR0R3R'tdomodstaddpathtexcludetotatscriptRtitemtmfR2((s"/sys/lib/python2.7/modulefinder.pyttest`sX#
R8s
[interrupt]( t__doc__t
__future__RtdisR;R~RAR$R�R�Rat
__stdout__R:tchrtopnametindexRRRRR�R�RRRRRR#R�RR�tKeyboardInterrupt(((s"/sys/lib/python2.7/modulefinder.pyt<module>s> � ;
|