in tools/generate_taint_models/get_graphql_sources.py [0:0]
def gather_functions_to_model(self) -> Iterable[Callable[..., object]]:
# Get all graphql import names.
views: List[Callable[..., object]] = []
modules = []
module_argument = self.graphql_module
graphql_modules = (
[module_argument] if isinstance(module_argument, str) else module_argument
)
for graphql_module in graphql_modules:
for path in os.listdir(
os.path.dirname(import_module(graphql_module).__file__)
):
if path.endswith(".py") and path != "__init__.py":
modules.append(f"{graphql_module}.{path[:-3]}")
def visit_all_graphql_resolvers(module_name: str) -> None:
module = import_module(module_name)
for key in module.__dict__:
element = module.__dict__[key]
if not isinstance(element, self.graphql_object_type):
continue
try:
fields = element.fields
except AssertionError:
# GraphQL throws an exception when a GraphQL object is created
# with 0 fields. Since we don't control the library, we need to
# program defensively here :(
fields = []
for field in fields:
resolver = fields[field].resolve
if resolver is not None and resolver.__name__ != "<lambda>":
views.append(resolver)
for module_name in modules:
visit_all_graphql_resolvers(module_name)
return views