ó õ^‚Rc@sZdZddlmZedddƒ[ddlZddlZddlZddlZddlZddd gZe d ƒZ e eƒZ ddd „ƒYZ ddd „ƒYZ er¾d pÁdZdeZd„Zdaad„Zd„Zd„Zd e fd„ƒYZde fd„ƒYZd„Zddd„ƒYZd„Zd„ZdS(s Import utilities Exported classes: ImportManager Manage the import process Importer Base class for replacing standard import functions BuiltinImporter Emulate the import mechanism for builtin and frozen modules DynLoadSuffixImporter iÿÿÿÿ(twarnpy3ks1the imputil module has been removed in Python 3.0t stackleveliNt ImportManagertImportertBuiltinImportertcBsqeZdZeeƒd„Zd„Zd„Zd Z d d„Z d d d d„Z d„Z d„Z d„ZRS( sManage the import process.cCsEt|tƒrt|ƒ}n|d|_||_|j|d(R R6t parent_fqnameR:ti((s/usr/lib/python2.7/imputil.pyR)•s       cCsXxQtjD]F}t|tƒr7|jj||ƒ}n|j|ƒ}|r |Sq WdS(N(R+tpathRt _StringTypeRtimport_from_dirt import_topR(R tnametitemR;((s/usr/lib/python2.7/imputil.pyR.¼scCs(|jjdƒ}|sntd‚dS(s*Python calls this hook to reload a module.R'sreload not yet implementedN(R1R2t SystemError(R R;R=((s/usr/lib/python2.7/imputil.pyt _reload_hookÈsN(R>t __module__t__doc__R t __builtin__RRRRRR$R R)R.RI(((s/usr/lib/python2.7/imputil.pyRs   ? ' cBsVeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z RS( s3Base class for replacing standard import functions.cCs|jd||ƒS(sImport a top-level module.N(t _import_oneR(R RF((s/usr/lib/python2.7/imputil.pyREÜscCs<|j||ƒ}|s|S|jr8|j||ƒn|S(N(t _load_tailR&t_import_fromlist(R ttopR9R8tbottom((s/usr/lib/python2.7/imputil.pyR3äs  cCswytj|SWntk r"nX|j|||ƒ}|dkrHdS|j||ƒ}|rst|||ƒn|S(sImport a single module.N(R+R,R-tget_codeRt_process_resulttsetattr(R R:tmodnameR5tresultR;((s/usr/lib/python2.7/imputil.pyRMs  cBsÆ|\}}}e|eƒ}|r-|}nej|ƒ}||_||_|jj|ƒ|ej |<|s¬y||jUWq¬|ej kr¢ej |=n‚q¬Xnej |}||_ |S(N( RRRt new_moduleR'R&R1tupdateR+R,R>(R RVR5tispkgtcodetvaluest is_moduleR;((s/usr/lib/python2.7/imputil.pyRSs&        cCsSxL|D]D}d|j|f}|j|||ƒ}|std|‚qqW|S(sˆImport the rest of the modules, down from the top-level module. Returns the last module in the dotted list of modules. s%s.%ssNo module named (R>RMR/(R tmR9tpartR5((s/usr/lib/python2.7/imputil.pyRNAs  cCs¦d|kr4t|ƒt|jjdgƒƒ}nxk|D]c}|dkr;t||ƒ r;d|j|f}|j|||ƒ}|sžtd|‚qžq;q;WdS(s*Import any sub-modules in the "from" list.t*t__all__s%s.%sscannot import name N(tlistR1R2RR>RMR/(R tpackageR8tsubtsubnametsubmod((s/usr/lib/python2.7/imputil.pyROMs   cCsQ|d}|jd|}|j|||ƒ}|s:dS|j||d|ƒS(s¨Attempt to import the module relative to parent. This method is used when the import context specifies that imported the parent module. iR%iN(R>RMRR3(R R:R9R8ttop_namet top_fqnameR<((s/usr/lib/python2.7/imputil.pyR*_s  cCs td‚dS(s£Find and retrieve the code for the given module. parent specifies a parent module to define a context for importing. It may be None, indicating no particular context for the search. modname specifies a single module (not dotted) within the parent. fqname specifies the fully-qualified module name. This is a (potentially) dotted name from the "root" of the module namespace down to the modname. If there is no parent, then modname==fqname. This method should return None, or a 3-tuple. * If the module was not found, then None should be returned. * The first item of the 2- or 3-tuple should be the integer 0 or 1, specifying whether the module that was found is a package or not. * The second item is the code object for the module (it will be executed within the new module's namespace). This item can also be a fully-loaded module object (e.g. loaded from a shared lib). * The third item is a dictionary of name/value pairs that will be inserted into new module before the code object is executed. This is provided in case the module's code expects certain values (such as where the module was found). When the second item is a module object, then these names/values will be inserted *after* the module has been loaded/initialized. sget_code not implementedN(t RuntimeError(R R:RUR5((s/usr/lib/python2.7/imputil.pyRRrs( R>RJRKRER3RMRSRNROR*RR(((s/usr/lib/python2.7/imputil.pyRÙs  #  %  tctos.pycCsét|dƒjƒ}|r8|ddkr8|d}ntj||dƒ}yt|tdƒ}Wntk rwnnX|jdƒ|jtjd|ƒƒt j ||ƒ|j ƒ|j ddƒ|jt jƒƒ|jƒ|S( sNCompile (and cache) a Python source file. The file specified by is compiled to a code object and returned. Presuming the appropriate privileges exist, the bytecodes will be saved back to the filesystem for future imports. The source file's modification timestamp must be provided as a Long value. trUiÿÿÿÿs texectwbtsRJRR(((s/usr/lib/python2.7/imputil.pyRøsRcBs5eZd„Zd„Zd„Zd„Zd„ZRS(cCs g|_dS(N(tsuffixes(R ((s/usr/lib/python2.7/imputil.pyR$scCs/t|dƒst‚|jj||fƒdS(NR(RRRtappend(R RR((s/usr/lib/python2.7/imputil.pyRscCs5|jt||ƒ|ƒ}|r1|j||ƒSdS(N(t_import_pathnameRŽRSR(R tdirR5RV((s/usr/lib/python2.7/imputil.pyRDscCsg|s t‚x<|jD]1}|jt||ƒ|ƒ}|dk r|SqW|jt|j|ƒ|ƒS(N(Rt__path__RŸRŽRt __pkgdir__(R R:RUR5tsubmodule_pathRZ((s/usr/lib/python2.7/imputil.pyRRs  c Cs¿t|ƒrc|jt|dƒ|ƒ}|r_|d}||d<|g|dRJR$RRDRRRŸ(((s/usr/lib/python2.7/imputil.pyRs     c Cs÷|d t}t|dƒ}t|ƒ}d}|dk r¿||kr¿t|dƒ}|jdƒtjƒkr²tj d|jdƒƒd}||kr²t j |ƒ}q²n|j ƒn|dkrã|}t ||ƒ}nd|i|d6fS(NiýÿÿÿitrbisRJR$R (((s/usr/lib/python2.7/imputil.pyRYs cCs^tjjƒ}|jƒx>|D]6\}}|rM|G|jjddƒGHq |GdGHq WdS(NR's-- no importers-- non-existent module(R+R,titemstsortR1R2(R°RFR;((s/usr/lib/python2.7/imputil.pyt_print_importersfs  cCs'tƒjƒtjjdtƒƒdS(Ni(RRR+RBtinsertR(((s/usr/lib/python2.7/imputil.pyt _test_revampos ((((RKtwarningsRRR+RLRuRwR`RœRCRRRt __debug__RrR¨RRRRŽRR“R–RRR!RR²R´(((s/usr/lib/python2.7/imputil.pyt s4       »Á    $  6