From 2395c0b1bed98e64c61b61f9e8a5472ed2ae2b84 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 2 Sep 2020 01:20:59 +0200 Subject: Add version upgrade for Cura 4.8 We're changing the unit of one of our settings, so we need to implement a version upgrade to change that for our users in case they changed this setting themselves. Contributes to issue CURA-7118. --- .../VersionUpgrade47to48/VersionUpgrade47to48.py | 79 ++++++++++++++++++++++ .../VersionUpgrade47to48/__init__.py | 59 ++++++++++++++++ .../VersionUpgrade47to48/plugin.json | 8 +++ 3 files changed, 146 insertions(+) create mode 100644 plugins/VersionUpgrade/VersionUpgrade47to48/VersionUpgrade47to48.py create mode 100644 plugins/VersionUpgrade/VersionUpgrade47to48/__init__.py create mode 100644 plugins/VersionUpgrade/VersionUpgrade47to48/plugin.json (limited to 'plugins/VersionUpgrade/VersionUpgrade47to48') diff --git a/plugins/VersionUpgrade/VersionUpgrade47to48/VersionUpgrade47to48.py b/plugins/VersionUpgrade/VersionUpgrade47to48/VersionUpgrade47to48.py new file mode 100644 index 0000000000..cd7cefc846 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade47to48/VersionUpgrade47to48.py @@ -0,0 +1,79 @@ +# Copyright (c) 2020 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +from typing import Tuple, List +import io + +from UM.VersionUpgrade import VersionUpgrade + + +class VersionUpgrade47to48(VersionUpgrade): + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades preferences to have the new version number. + :param serialized: The original contents of the preferences file. + :param filename: The file name of the preferences file. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "16" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades instance containers to have the new version number. + + This this also changes the unit of the Scaling Factor Shrinkage + Compensation setting. + :param serialized: The original contents of the instance container. + :param filename: The original file name of the instance container. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ()) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "16" + + if "values" in parser: + # Shrinkage factor used to be a percentage based around 0% (where 0% meant that it doesn't shrink or expand). + # Since 4.8, it is a percentage based around 100% (where 100% means that it doesn't shrink or expand). + if "material_shrinkage_percentage" in parser["values"]: + shrinkage_percentage = parser["values"]["meshfix_maximum_deviation"] + if shrinkage_percentage.startswith("="): + shrinkage_percentage = shrinkage_percentage[1:] + shrinkage_percentage = "=(" + shrinkage_percentage + ") + 100" + parser["values"]["material_shrinkage_percentage"] = shrinkage_percentage + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades stacks to have the new version number. + :param serialized: The original contents of the stack. + :param filename: The original file name of the stack. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "16" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade47to48/__init__.py b/plugins/VersionUpgrade/VersionUpgrade47to48/__init__.py new file mode 100644 index 0000000000..2149b93798 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade47to48/__init__.py @@ -0,0 +1,59 @@ +# Copyright (c) 2020 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade47to48 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade47to48.VersionUpgrade47to48() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000015): ("preferences", 6000016, upgrade.upgradePreferences), + ("machine_stack", 4000015): ("machine_stack", 4000016, upgrade.upgradeStack), + ("extruder_train", 4000015): ("extruder_train", 4000016, upgrade.upgradeStack), + ("definition_changes", 4000015): ("definition_changes", 4000016, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000015): ("quality_changes", 4000016, upgrade.upgradeInstanceContainer), + ("quality", 4000015): ("quality", 4000016, upgrade.upgradeInstanceContainer), + ("user", 4000015): ("user", 4000016, upgrade.upgradeInstanceContainer), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app: "Application") -> Dict[str, Any]: + return {"version_upgrade": upgrade} diff --git a/plugins/VersionUpgrade/VersionUpgrade47to48/plugin.json b/plugins/VersionUpgrade/VersionUpgrade47to48/plugin.json new file mode 100644 index 0000000000..8ea79beebc --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade47to48/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.7 to 4.8", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.7 to Cura 4.8.", + "api": "7.3.0", + "i18n-catalog": "cura" +} -- cgit v1.2.3