1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- #! /usr/bin/python
- import ast
- import argparse
- 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_path_patterns":
- PATTERNS_V1.append(node.args[0].s)
- elif name == "client_v2_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)
|