Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/CuraTests.cmake7
-rwxr-xr-xdocker/build.sh11
-rw-r--r--scripts/check_invalid_imports.py60
3 files changed, 67 insertions, 11 deletions
diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake
index b1d3e0ddc4..c76019d310 100644
--- a/cmake/CuraTests.cmake
+++ b/cmake/CuraTests.cmake
@@ -56,6 +56,13 @@ function(cura_add_test)
endif()
endfunction()
+#Add test for whether the shortcut alt-keys are unique in every translation.
+add_test(
+ NAME "invalid-imports"
+ COMMAND ${Python3_EXECUTABLE} scripts/check_invalid_imports.py
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+)
+
cura_add_test(NAME pytest-main DIRECTORY ${CMAKE_SOURCE_DIR}/tests PYTHONPATH "${CMAKE_SOURCE_DIR}|${URANIUM_DIR}")
file(GLOB_RECURSE _plugins plugins/*/__init__.py)
diff --git a/docker/build.sh b/docker/build.sh
index 9bff78c2a3..a500663c64 100755
--- a/docker/build.sh
+++ b/docker/build.sh
@@ -13,18 +13,7 @@ export PKG_CONFIG_PATH="${CURA_BUILD_ENV_PATH}/lib/pkgconfig:${PKG_CONFIG_PATH}"
cd "${PROJECT_DIR}"
-# Check for plugins.* import statements. These imports may work when running from source,
-# but will fail in some build types (linux and mac)
-GREP_OUTPUT=$(grep -Ern "^\s*(from plugins|import plugins)" --include \*.py "${PROJECT_DIR}" || true)
-echo "$GREP_OUTPUT"
-if [ -z "$GREP_OUTPUT" ]
-then
- echo "invalid imports checker: OK"
-else
- echo "error: sources contain invalid imports. Use relative imports when referencing plugin source files"
- exit 1
-fi
#
# Clone Uranium and set PYTHONPATH first
diff --git a/scripts/check_invalid_imports.py b/scripts/check_invalid_imports.py
new file mode 100644
index 0000000000..121184e739
--- /dev/null
+++ b/scripts/check_invalid_imports.py
@@ -0,0 +1,60 @@
+import os
+import re
+import sys
+from pathlib import Path
+
+"""
+Run this file with the Cura project root as the working directory
+"""
+
+class InvalidImportsChecker:
+ # compile regex
+ REGEX = re.compile(r"^\s*(from plugins|import plugins)")
+
+ def check(self):
+ """ Checks for invalid imports
+
+ :return: True if checks passed, False when the test fails
+ """
+ cwd = os.getcwd()
+ cura_result = checker.check_dir(os.path.join(cwd, "cura"))
+ plugins_result = checker.check_dir(os.path.join(cwd, "plugins"))
+ result = cura_result and plugins_result
+ if not result:
+ print("error: sources contain invalid imports. Use relative imports when referencing plugin source files")
+
+ return result
+
+ def check_dir(self, root_dir: str) -> bool:
+ """ Checks a directory for invalid imports
+
+ :return: True if checks passed, False when the test fails
+ """
+ passed = True
+ for path_like in Path(root_dir).rglob('*.py'):
+ if not self.check_file(str(path_like)):
+ passed = False
+
+ return passed
+
+ def check_file(self, file_path):
+ """ Checks a file for invalid imports
+
+ :return: True if checks passed, False when the test fails
+ """
+ passed = True
+ with open(file_path, 'r', encoding = "utf-8") as inputFile:
+ # loop through each line in file
+ for line_i, line in enumerate(inputFile, 1):
+ # check if we have a regex match
+ match = self.REGEX.search(line)
+ if match:
+ path = os.path.relpath(file_path)
+ print("{path}:{line_i}:{match}".format(path=path, line_i=line_i, match=match.group(1)))
+ passed = False
+ return passed
+
+
+if __name__ == "__main__":
+ checker = InvalidImportsChecker()
+ sys.exit(0 if checker.check() else 1)