# queries to do with module/class/function relationships from __future__ import generators from bike.globals import * from getTypeOf import getTypeOf, getTypeOfExpr from bike.parsing.newstuff import generateModuleFilenamesInPythonPath, generateModuleFilenamesInPackage, getPythonPath from bike.parsing.pathutils import getPackageBaseDirectory from bike.query.common import MatchFinder, walkLinesContainingStrings, getScopeForLine from bike import log from bike.parsing.fastparserast import Module import re 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