ž ¦ÿfžZc @s…dZddlZddlZddlZddlZddlZddlZddlZddl Z e ej j dƒgƒZ e ej j dƒgƒZe ej j dƒgƒZe ej j dƒgƒZeegZe ejgƒZiZdd„ZiZd d „ZGd d „d ƒZGd d„dƒZdd„Zedkry eƒZWnek r}edƒYnXndS(u3Find modules used by a script, using introspection.iNu LOAD_CONSTu IMPORT_NAMEu STORE_NAMEu STORE_GLOBALcCstj|gƒj|ƒdS(N(upackagePathMapu setdefaultuappend(u packagenameupath((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuAddPackagePathsuAddPackagePathcCs|t| Noneiudetermine_parent ->u.urelative importpath too deep( umsginumsgoutuNoneu__name__u__path__umodulesuAssertionErrorucountu ImportErrorujoinuspliturfind(uselfucallerulevelupnameuparentui((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyudetermine_parentsB      #     uModuleFinder.determine_parentcCs>|jdd||ƒd|krX|jdƒ}|d|…}||dd…}n |}d}|r€d|j|f}n|}|j|||ƒ}|rÄ|jdd||fƒ||fS|r|}d}|j|||ƒ}|r|jdd||fƒ||fSn|jdd|ƒtd |ƒ‚dS( Niufind_head_packageu.iuu%s.%sufind_head_package ->u"raise ImportError: No module nameduNo module named (umsginufindu__name__u import_moduleumsgoutuNoneu ImportError(uselfuparentunameuiuheadutailuqnameuq((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyufind_head_package¢s.   uModuleFinder.find_head_packagecCsã|jdd||ƒ|}x­|rË|jdƒ}|dkrOt|ƒ}n|d|…||dd…}}d|j|f}|j|||ƒ}|s|jdd|ƒtd|ƒ‚qqW|jdd |ƒ|S( Niu load_tailu.iiu%s.%su"raise ImportError: No module nameduNo module named u load_tail ->(umsginufindulenu__name__u import_moduleumsgoutu ImportError(uselfuqutailumuiuheadumname((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_tail½s  %uModuleFinder.load_tailcCsÄ|jdd|||ƒx¤|D]œ}|dkri|s¼|j|ƒ}|rf|j||dƒqfq¼q t||ƒs d|j|f}|j|||ƒ}|s¼td|ƒ‚q¼q q WdS(Niuensure_fromlistu*iu%s.%suNo module named (umsgufind_all_submodulesuensure_fromlistuhasattru__name__u import_moduleu ImportError(uselfumufromlistu recursiveusubuallusubnameusubmod((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuensure_fromlistÌs  uModuleFinder.ensure_fromlistc CsE|js dSi}g}|tjjdd…7}|tjjdd…7}|tjjdd…7}xÑ|jD]Æ}ytj|ƒ}Wn+tjk r·|j dd|ƒwqYnXx||D]t}d}xF|D]>}t |ƒ} || d…|krÒ|d| …}PqÒqÒW|r¿|dkr¿|||YnX|jdd|ƒ|S||jkry|jddƒdS|r¢|jdkr¢|jddƒdSy+|j||oº|j|ƒ\}}}Wn)tk rø|jdddƒdSYnXz|j ||||ƒ}Wd|r+|j ƒnX|rEt |||ƒn|jdd|ƒ|S(Niu import_moduleuimport_module ->uimport_module -> None( umsginumodulesuKeyErrorumsgoutu badmodulesuNoneu__path__u find_moduleu ImportErroru load_moduleucloseusetattr(uselfupartnameufqnameuparentumufpupathnameustuff((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu import_moduleös6  "  uModuleFinder.import_modulec Csu|\}}}|jdd||o'd|ƒ|tjkrf|j||ƒ}|jdd|ƒ|S|tjkr”t|jƒd|dƒ} nu|tjkr|jdƒtj ƒkrä|jdd|ƒt d |ƒ‚n|jd ƒt j |ƒ} nd} |j|ƒ}||_| r^|jrB|j| ƒ} n| |_|j| |ƒn|jdd|ƒ|S( Niu load_moduleufpuload_module ->u uexeciu#raise ImportError: Bad magic numberuBad magic number in %si(umsginuimpu PKG_DIRECTORYu load_packageumsgoutu PY_SOURCEucompileureadu PY_COMPILEDu get_magicu ImportErrorumarshaluloaduNoneu add_moduleu__file__u replace_pathsureplace_paths_in_codeu__code__u scan_code( uselfufqnameufpupathnameu file_infousuffixumodeutypeumuco((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_modules0    uModuleFinder.load_modulecCsQ||jkri|j|ys u*ModuleFinder.scan_code..ulevelu.urelative_import(uco_codeuscan_opcodes_25u globalnamesuNoneu_safe_import_hooku__path__umodulesugetu__name__uupdateu starimportsu__code__udetermine_parentu RuntimeErroru co_constsu isinstanceutypeu scan_code(uselfucoumucodeuscanneruwhatuargsunameufromlistu have_starummuleveluparentuc((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu scan_codelsH              uModuleFinder.scan_codec CsÞ|jdd||ƒtj|ƒ}|r4|}n|j|ƒ}||_|g|_|jtj|gƒ|_|jd|jƒ\}}}z1|j||||ƒ|j dd|ƒ|SWd|rÙ|j ƒnXdS(Niu load_packageu__init__uload_package ->( umsginureplacePackageMapugetu add_moduleu__file__u__path__upackagePathMapu find_moduleu load_moduleumsgoutuclose(uselfufqnameupathnameunewnameumufpubufustuff((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu load_packages   uModuleFinder.load_packagecCs5||jkr|j|St|ƒ|j|<}|S(N(umodulesuModule(uselfufqnameum((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu add_module²s uModuleFinder.add_modulecCs§|dk r |jd|}n|}||jkrW|jdd|ƒt|ƒ‚n|dkr—|tjkr‹ddddtjffS|j }ntj ||ƒS(Nu.iufind_module -> Excludedu( uNoneu__name__uexcludesumsgoutu ImportErrorusysubuiltin_module_namesuimpu C_BUILTINupathu find_module(uselfunameupathuparentufullname((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu find_module¸s   uModuleFinder.find_modulecCs‚tƒtddƒtddƒt|jjƒƒ}xa|D]Y}|j|}|jrntdddƒntdddƒtd ||jp”d ƒq?W|jƒ\}}|rtƒtd ƒxF|D];}t|j|jƒƒ}td |d dj|ƒƒqÌWn|r~tƒtdddƒtdƒxF|D];}t|j|jƒƒ}td |d dj|ƒƒq<WndS(u’Print a report to stdout, listing the found modules with their paths, as well as modules that are missing, or seem to be missing. u %-25s %suNameuFileu----uPuendu umu%-25suuMissing modules:u?u imported fromu, u7Submodules that appear to be missing, but could also beu#global names in the parent package:N(uNameuFile(u----u----( uprintusortedumodulesukeysu__path__u__file__uany_missing_maybeu badmodulesujoin(uselfukeysukeyumumissingumaybeunameumods((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyureportÉs0     #  uModuleFinder.reportcCs|jƒ\}}||S(u½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. (uany_missing_maybe(uselfumissingumaybe((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyu any_missingësuModuleFinder.any_missingcCs.g}g}x|jD]ö}||jkr1qn|jdƒ}|dkr_|j|ƒqn||dd…}|d|…}|jj|ƒ}|dk rÿ||j|krÄ|j|ƒq ||jkrÖq |jrï|j|ƒq |j|ƒq|j|ƒqW|j ƒ|j ƒ||fS(u®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. u.iiN( u badmodulesuexcludesurfinduappendumodulesugetuNoneu globalnamesu starimportsusort(uselfumissingumaybeunameuiusubnameupkgnameupkg((u1/opt/alt/python33/lib64/python3.3/modulefinder.pyuany_missing_maybeós0       uModuleFinder.any_missing_maybecCsˆtjj|jƒ}}xD|jD]9\}}|j|ƒr#||t|ƒd…}Pq#q#W|jrË||jkrË||kr¡|j dd||fƒn|j dd|fƒ|jj |ƒnt |j ƒ}xMt t|ƒƒD]9}t||t|ƒƒrí|j||ƒ||s6           ÿú ;