7ec@sZdZddlmZeddd[ddlZddlZddlZddlZddlZddd gZe d Z e eZ ddd YZ ddd YZ erd pdZdeZdZdaadZdZdZd e fdYZde fdYZdZdddYZdZdZdS(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 ImportManagertImportertBuiltinImportertcBsqeZdZeedZdZdZd Z d dZ d d d dZ dZ dZ dZRS( sManage the import process.cCsEt|trt|}n|d|_||_|j|d(R R6t parent_fqnameR:ti((s/usr/lib64/python2.7/imputil.pyR)s       cCsXxQtjD]F}t|tr7|jj||}n|j|}|r |Sq WdS(N(R+tpathRt _StringTypeRtimport_from_dirt import_topR(R tnametitemR;((s/usr/lib64/python2.7/imputil.pyR.scCs(|jjd}|sntddS(s*Python calls this hook to reload a module.R'sreload not yet implementedN(R1R2t SystemError(R R;R=((s/usr/lib64/python2.7/imputil.pyt _reload_hooksN(R>t __module__t__doc__R t __builtin__RRRRRR$R R)R.RI(((s/usr/lib64/python2.7/imputil.pyRs   ? ' cBsVeZdZdZdZdZdZdZdZdZ dZ RS( s3Base class for replacing standard import functions.cCs|jd||S(sImport a top-level module.N(t _import_oneR(R RF((s/usr/lib64/python2.7/imputil.pyREscCs<|j||}|s|S|jr8|j||n|S(N(t _load_tailR&t_import_fromlist(R ttopR9R8tbottom((s/usr/lib64/python2.7/imputil.pyR3s  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/lib64/python2.7/imputil.pyRMs  cBs|\}}}e|e}|r-|}nej|}||_||_|jj||ej |<|sy||jUWq|ej krej |=nqXnej |}||_ |S(N( RRRt new_moduleR'R&R1tupdateR+R,R>(R RVR5tispkgtcodetvaluest is_moduleR;((s/usr/lib64/python2.7/imputil.pyRSs&        cCsSxL|D]D}d|j|f}|j|||}|std|qqW|S(sImport 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/lib64/python2.7/imputil.pyRNAs  cCsd|kr4t|t|jjdg}nxk|D]c}|dkr;t|| r;d|j|f}|j|||}|std|qq;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/lib64/python2.7/imputil.pyROMs   cCsQ|d}|jd|}|j|||}|s:dS|j||d|S(sAttempt 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/lib64/python2.7/imputil.pyR*_s  cCs tddS(sFind 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/lib64/python2.7/imputil.pyRRrs( R>RJRKRER3RMRSRNROR*RR(((s/usr/lib64/python2.7/imputil.pyRs  #  %  tctos.pycCst|dj}|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. trUis texectwbssRJRR(((s/usr/lib64/python2.7/imputil.pyRsRcBs5eZdZdZdZdZdZRS(cCs g|_dS(N(tsuffixes(R ((s/usr/lib64/python2.7/imputil.pyR$scCs/t|dst|jj||fdS(NR(RRRtappend(R RR((s/usr/lib64/python2.7/imputil.pyRscCs5|jt|||}|r1|j||SdS(N(t_import_pathnameRRSR(R tdirR5RV((s/usr/lib64/python2.7/imputil.pyRDscCsg|s tx<|jD]1}|jt|||}|dk r|SqW|jt|j||S(N(Rt__path__RRRt __pkgdir__(R R:RUR5tsubmodule_pathRZ((s/usr/lib64/python2.7/imputil.pyRRs  c Cst|rc|jt|d|}|r_|d}||d<|g|dRJR$RRDRRR(((s/usr/lib64/python2.7/imputil.pyRs     c Cs|d t}t|d}t|}d}|dk r||krt|d}|jdtjkrtj d|jdd}||krt j |}qn|j n|dkr|}t ||}nd|i|d6fS(NiitrbisRJR$R (((s/usr/lib64/python2.7/imputil.pyRYs cCs^tjj}|jx>|D]6\}}|rM|G|jjddGHq |GdGHq WdS(NR's-- no importers-- non-existent module(R+R,titemstsortR1R2(RRFR;((s/usr/lib64/python2.7/imputil.pyt_print_importersfs  cCs'tjtjjdtdS(Ni(RRR+RBtinsertR(((s/usr/lib64/python2.7/imputil.pyt _test_revampos ((((RKtwarningsRRR+RLRtRvR`RRCRRRt __debug__RqRRRRRRRRRRR!RRR(((s/usr/lib64/python2.7/imputil.pyt s4           $  6