123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #! /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, dirs, 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)
|