List the URL patterns in synapse

This commit is contained in:
Mark Haines 2016-02-05 15:17:47 +00:00
parent 8f1031586f
commit b052621f67
1 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,54 @@
#! /usr/bin/python
import ast
import argparse
import os
import sys
import yaml
PATTERNS = []
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.append(node.args[0].s)
elif name == "client_v2_patterns":
PATTERNS.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)
yaml.dump(sorted(PATTERNS), sys.stdout, default_flow_style=False)