#! /usr/bin/python import argparse import ast import os import sys import yaml PATTERNS_V1 = [] PATTERNS_V2 = [] RESULT = {"v1": PATTERNS_V1, "v2": PATTERNS_V2} class CallVisitor(ast.NodeVisitor): def visit_Call(self, node): if isinstance(node.func, ast.Name): name = node.func.id else: return if name == "client_patterns": PATTERNS_V2.append(node.args[0].s) def find_patterns_in_code(input_code): input_ast = ast.parse(input_code) visitor = CallVisitor() visitor.visit(input_ast) def find_patterns_in_file(filepath): with open(filepath) as f: find_patterns_in_code(f.read()) parser = argparse.ArgumentParser(description="Find url patterns.") parser.add_argument( "directories", nargs="+", metavar="DIR", help="Directories to search for definitions", ) args = parser.parse_args() for directory in args.directories: for root, _, files in os.walk(directory): for filename in files: if filename.endswith(".py"): filepath = os.path.join(root, filename) find_patterns_in_file(filepath) PATTERNS_V1.sort() PATTERNS_V2.sort() yaml.dump(RESULT, sys.stdout, default_flow_style=False)