List the URL patterns in synapse
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts-dev/list_url_patterns.py b/scripts-dev/list_url_patterns.py
new file mode 100755
index 0000000000..23bcc6b034
--- /dev/null
+++ b/scripts-dev/list_url_patterns.py
@@ -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)
|