summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2016-02-05 15:17:47 +0000
committerMark Haines <mark.haines@matrix.org>2016-02-05 15:18:58 +0000
commitb052621f679103052426baf086fd48074199e81b (patch)
tree0a567b63b395852ea0c8e46e437cf71976cb54d7
parentMerge pull request #550 from matrix-org/daniel/guestnames (diff)
downloadsynapse-b052621f679103052426baf086fd48074199e81b.tar.xz
List the URL patterns in synapse
Diffstat (limited to '')
-rwxr-xr-xscripts-dev/list_url_patterns.py54
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)