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()
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
|
|
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