def chase_imports(self): modules = set() queue = [self.file_name_root] for name in queue: try: modobj = filepath.try_import(module_name=name) file = getattr(modobj, '__file__', None) if not file: sys.stderr.write("Module object %s missing __name__ att\n" % name) raise Exception (base, _) = os.path.splitext(file) m = ModuleCompiler(base + '.py') if file not in (m.file, m.pycfile): sys.stderr.write("Module cannot be parsed: %s\n" % file) raise Exception if not os.path.exists(m.file): sys.stderr.write("Module does not exist: %s\n" % m.file) raise Exception if not filepath.is_writable(m.pycfile): sys.stderr.write("Path cannot be written to: %s\n" % m.pycfile) else: modules.add(m) found = m.find_imports() for f in found: if f not in queue: queue.append(f) except: raise return list(modules)
def __init__(self, obj): if not obj: self = None return self.modulename = obj.__module__ # original name self.set_default_module_name() self.objname = obj.__name__ try: path = filepath.try_import(module_name=self.modulename).__file__ except ImportError: raise # XXX capitulate? self.file = os.path.abspath(path)
def load_spec(self, file): spec = filepath.try_import(module_file=file) aspnames = (aspname for aspname in spec.__all__) aspects = (getattr(spec, aspname) for aspname in aspnames) return Worklist(*aspects)