mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-07-03 14:45:12 +08:00
Update formulas handling
CURA-10901
This commit is contained in:
parent
388be81116
commit
e15049f2e0
@ -19,7 +19,7 @@ def getLinter(file: Path, settings: dict) -> Optional[List[Linter]]:
|
|||||||
|
|
||||||
if ".def" in file.suffixes and ".json" in file.suffixes:
|
if ".def" in file.suffixes and ".json" in file.suffixes:
|
||||||
if file.stem in ("fdmprinter.def", "fdmextruder.def"):
|
if file.stem in ("fdmprinter.def", "fdmextruder.def"):
|
||||||
return None
|
return [Formulas(file, settings)]
|
||||||
return [Directory(file, settings), Definition(file, settings), Formulas(file, settings)]
|
return [Directory(file, settings), Definition(file, settings), Formulas(file, settings)]
|
||||||
|
|
||||||
if file.parent.stem == "meshes":
|
if file.parent.stem == "meshes":
|
||||||
|
@ -1,20 +1,31 @@
|
|||||||
import json
|
import json
|
||||||
import re
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterator
|
from typing import Iterator
|
||||||
|
|
||||||
|
from UM.VersionUpgradeManager import VersionUpgradeManager
|
||||||
|
from unittest.mock import MagicMock
|
||||||
from ..diagnostic import Diagnostic
|
from ..diagnostic import Diagnostic
|
||||||
from .linter import Linter
|
from .linter import Linter
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser
|
||||||
from ..replacement import Replacement
|
from cura.CuraApplication import CuraApplication # To compare against the current SettingVersion.
|
||||||
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||||
|
|
||||||
class Formulas(Linter):
|
class Formulas(Linter):
|
||||||
""" Finds issues in definition files, such as overriding default parameters """
|
""" Finds issues in definition files, such as overriding default parameters """
|
||||||
def __init__(self, file: Path, settings: dict) -> None:
|
def __init__(self, file: Path, settings: dict) -> None:
|
||||||
super().__init__(file, settings)
|
super().__init__(file, settings)
|
||||||
|
self._all_keys = self.collectAllSettingIds()
|
||||||
self._definition = {}
|
self._definition = {}
|
||||||
|
|
||||||
|
def collectAllSettingIds(self):
|
||||||
|
VersionUpgradeManager._VersionUpgradeManager__instance = VersionUpgradeManager(MagicMock())
|
||||||
|
CuraApplication._initializeSettingDefinitions()
|
||||||
|
definition_container = DefinitionContainer("whatever")
|
||||||
|
with open(os.path.join(os.path.dirname(__file__), "..", "..","..","..", "resources", "definitions", "fdmprinter.def.json"),
|
||||||
|
encoding="utf-8") as data:
|
||||||
|
definition_container.deserialize(data.read())
|
||||||
|
return definition_container.getAllKeys()
|
||||||
|
|
||||||
def check(self) -> Iterator[Diagnostic]:
|
def check(self) -> Iterator[Diagnostic]:
|
||||||
if self._settings["checks"].get("diagnostic-incorrect-formula", False):
|
if self._settings["checks"].get("diagnostic-incorrect-formula", False):
|
||||||
@ -33,7 +44,7 @@ class Formulas(Linter):
|
|||||||
for key, value_dict in definition["overrides"].items():
|
for key, value_dict in definition["overrides"].items():
|
||||||
for value in value_dict:
|
for value in value_dict:
|
||||||
if value in ("enable", "resolve", "value", "minimum_value_warning", "maximum_value_warning", "maximum_value", "minimum_value"):
|
if value in ("enable", "resolve", "value", "minimum_value_warning", "maximum_value_warning", "maximum_value", "minimum_value"):
|
||||||
value_incorrect = self.checkValueIncorrect()
|
value_incorrect = self.checkValueIncorrect(value_dict[value].strip("="))
|
||||||
if value_incorrect:
|
if value_incorrect:
|
||||||
|
|
||||||
yield Diagnostic(
|
yield Diagnostic(
|
||||||
@ -77,5 +88,9 @@ class Formulas(Linter):
|
|||||||
|
|
||||||
return file_data
|
return file_data
|
||||||
|
|
||||||
def checkValueIncorrect(self):
|
def checkValueIncorrect(self, formula:str) -> bool:
|
||||||
|
try:
|
||||||
|
compiled_formula = compile(formula, "", "eval")
|
||||||
|
except SyntaxError:
|
||||||
return True
|
return True
|
||||||
|
return False
|
||||||
|
Loading…
x
Reference in New Issue
Block a user