def getReferencesToModule(root, fqn): modulename = fqn.split(".")[-1] moduleobj = getTypeOf(root, fqn) moduleRefFinder = ModuleRefFinder(moduleobj) for ref in globalScanForMatches(moduleRefFinder, modulename): yield ref
def visitFrom(self, node): for elem in node.modname.split("."): if elem == self.targetmodule.name: getTypeOf(self.scope, elem) == self.targetmodule self.appendMatch(self.targetmodule.name) self.popWordsUpTo(elem) for name, alias in node.names: if name == self.targetmodule.name: if alias and \ getTypeOf(self.scope, alias) == self.targetmodule: self.appendMatch(self.targetmodule.name) elif getTypeOf(self.scope, name) == self.targetmodule: self.appendMatch(self.targetmodule.name) if name != "*": self.popWordsUpTo(name) if alias is not None: self.popWordsUpTo(alias)
def visitImport(self, node): for name, alias in node.names: if name.split(".")[-1] == self.targetmodule.name: if getTypeOf(self.scope, name) == self.targetmodule: self.appendMatch(self.targetmodule.name) for nameelem in name.split("."): self.popWordsUpTo(nameelem) if alias is not None: self.popWordsUpTo(alias)
def getRootClassesOfHierarchy(klass, pythonpath): if klass is None: # i.e. dont have base class in our ast return None if klass.getBaseClassNames() == []: # i.e. is a root class return [klass] else: rootclasses = [] for base in klass.getBaseClassNames(): baseclass = getTypeOf(klass, base, pythonpath) rootclass = getRootClassesOfHierarchy(baseclass, pythonpath) if rootclass is None: # base class not in our ast rootclass = [klass] rootclasses += rootclass return rootclasses
def getRootClassesOfHierarchy(klass): if klass is None: # i.e. dont have base class in our ast return None if klass.getBaseClassNames() == []: # i.e. is a root class return [klass] else: rootclasses = [] for base in klass.getBaseClassNames(): baseclass = getTypeOf(klass,base) rootclass = getRootClassesOfHierarchy(baseclass) if rootclass is None: # base class not in our ast rootclass = [klass] rootclasses+=rootclass return rootclasses