mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 15:07:28 -06:00
Rewrite invalid imports checker to Python
Makes it consistent with other checkers we already have
This commit is contained in:
parent
66105e8a3a
commit
b830a6faa3
3 changed files with 67 additions and 11 deletions
|
@ -56,6 +56,13 @@ function(cura_add_test)
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
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}")
|
cura_add_test(NAME pytest-main DIRECTORY ${CMAKE_SOURCE_DIR}/tests PYTHONPATH "${CMAKE_SOURCE_DIR}|${URANIUM_DIR}")
|
||||||
|
|
||||||
file(GLOB_RECURSE _plugins plugins/*/__init__.py)
|
file(GLOB_RECURSE _plugins plugins/*/__init__.py)
|
||||||
|
|
|
@ -13,18 +13,7 @@ export PKG_CONFIG_PATH="${CURA_BUILD_ENV_PATH}/lib/pkgconfig:${PKG_CONFIG_PATH}"
|
||||||
|
|
||||||
cd "${PROJECT_DIR}"
|
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
|
# Clone Uranium and set PYTHONPATH first
|
||||||
|
|
60
scripts/check_invalid_imports.py
Normal file
60
scripts/check_invalid_imports.py
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue