new strategy for scanning PLC/Methods : when running 'make sync' from an unclean...
authorparmentelat <thierry.parmentelat@inria.fr>
Wed, 16 May 2018 12:30:32 +0000 (14:30 +0200)
committerparmentelat <thierry.parmentelat@inria.fr>
Wed, 16 May 2018 12:30:32 +0000 (14:30 +0200)
PLC/Methods/__init__.py

index d72755e..dbf9959 100644 (file)
@@ -1,20 +1,32 @@
 #!/usr/bin/python -tt
 
+from __future__ import print_function
+
 import os
+import glob
+
 native_methods = []
 toppath = os.path.dirname(__file__)
-for path, dirs, methods in os.walk(toppath):
-    remove_dirs = []
-    for dir in dirs:
-        if dir.startswith("."):
-            remove_dirs.append(dir)
-    for dir in remove_dirs:
-        dirs.remove(dir)
-    prefix = path + "/"
-    prefix = prefix[len(toppath) + 1:].replace("/", ".")
-    for method in methods:
-        if method == "__init__.py":
-            continue
-        if not method.endswith(".py"):
-            continue
-        native_methods.append(prefix + method[:-3])
+
+# do not blindly scan this directory, as when using devel tools
+# like `make sync` we can easily end up with more files that needed
+# which breaks in production
+
+contents = [
+    ('.', '[A-Z][a-zA-Z]*.py'),
+    ('system', '[a-zA-Z]*.py'),
+]
+
+for dir, pattern in contents:
+    prefix = len(dir) + 1
+    matches = glob.glob("{}/{}".format(dir, pattern))
+    print(matches)
+    for match in matches:
+        filename = match[prefix:][:-3]
+        python_name = filename if dir == '.' \
+            else "{}.{}".format(dir, filename)
+        native_methods.append(python_name)
+
+if __name__ == '__main__':
+    native_methods.sort()
+    print(native_methods)