From 13b2b8dcfea9e59870833af84d86067fe401bd94 Mon Sep 17 00:00:00 2001 From: parmentelat Date: Wed, 16 May 2018 14:30:32 +0200 Subject: [PATCH] new strategy for scanning PLC/Methods : when running 'make sync' from an unclean environment, we need to be more picky so as to avoid loading broken code --- PLC/Methods/__init__.py | 42 ++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/PLC/Methods/__init__.py b/PLC/Methods/__init__.py index d72755e..dbf9959 100644 --- a/PLC/Methods/__init__.py +++ b/PLC/Methods/__init__.py @@ -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) -- 2.43.0