Update formulas handling

CURA-10901
This commit is contained in:
Saumya Jain 2024-04-08 15:26:55 +02:00
parent 388be81116
commit e15049f2e0
2 changed files with 22 additions and 7 deletions

View File

@ -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":

View File

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