synapse/scripts-dev/list_url_patterns.py

63 lines
1.3 KiB
Python
Raw Normal View History

2016-02-05 18:17:47 +03:00
#! /usr/bin/python
import argparse
import ast
2016-02-05 18:17:47 +03:00
import os
import sys
2016-02-05 18:17:47 +03:00
import yaml
PATTERNS_V1 = []
PATTERNS_V2 = []
2016-02-05 18:17:47 +03:00
RESULT = {"v1": PATTERNS_V1, "v2": PATTERNS_V2}
2016-02-05 18:17:47 +03:00
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)
2016-02-05 18:17:47 +03:00
elif name == "client_v2_patterns":
PATTERNS_V2.append(node.args[0].s)
2016-02-05 18:17:47 +03:00
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",
2016-02-05 18:17:47 +03:00
)
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()
2016-02-05 18:17:47 +03:00
yaml.dump(RESULT, sys.stdout, default_flow_style=False)