def by_fullname_or_import_as(self): """ Map from C{fullname} and C{import_as} to L{Import}s. >>> import pprint >>> db = ImportDB('from aa.bb import cc as dd') >>> pprint.pprint(db.by_fullname_or_import_as) {'aa': (Import('import aa'),), 'aa.bb': (Import('import aa.bb'),), 'dd': (Import('from aa.bb import cc as dd'),)} @rtype: C{dict} mapping from C{str} to tuple of L{Import}s """ # TODO: make known_imports take into account the below forget_imports, # then move this function into ImportSet d = defaultdict(set) for imp in self.known_imports.imports: # Given an import like "from foo.bar import quux as QUUX", add the # following entries: # - "QUUX" => "from foo.bar import quux as QUUX" # - "foo.bar" => "import foo.bar" # - "foo" => "import foo" # We don't include an entry labeled "quux" because the user has # implied he doesn't want to pollute the global namespace with # "quux", only "QUUX". d[imp.import_as].add(imp) for prefix in dotted_prefixes(imp.fullname)[:-1]: d[prefix].add(Import.from_parts(prefix, prefix)) return dict((k, tuple(sorted(v - set(self.forget_imports.imports)))) for k, v in six.iteritems(d))
def test_Import_from_parts_1(): imp = Import.from_parts(".foo.bar", "bar") assert imp.fullname == ".foo.bar" assert imp.import_as == "bar" assert imp.split == ImportSplit(".foo", "bar", None) assert str(imp) == "from .foo import bar"