diff options
author | Jaime van Kessel <nallath@gmail.com> | 2019-09-10 11:46:23 +0300 |
---|---|---|
committer | Jaime van Kessel <nallath@gmail.com> | 2019-09-10 11:57:25 +0300 |
commit | e9862fb348219b536c50bf9b7e27d8ad8c1397ec (patch) | |
tree | 91a5a906c5eb1e2bd712f1a18bfd096bfa053b80 /plugins/VersionUpgrade/VersionUpgrade43to44 | |
parent | f8472d6414fb44164cdb9458df9e838d694fecfa (diff) |
Move version upgrade for intents from 4.1-4.2 to 4.3-4.4
CURA-6599
Diffstat (limited to 'plugins/VersionUpgrade/VersionUpgrade43to44')
4 files changed, 174 insertions, 0 deletions
diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py new file mode 100644 index 0000000000..0bf0073d73 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/VersionUpgrade43to44.py @@ -0,0 +1,68 @@ +import configparser +from typing import Tuple, List +import io +from UM.VersionUpgrade import VersionUpgrade + + +class VersionUpgrade43to44(VersionUpgrade): + pass + + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) # Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades Preferences to have the new version number. + # + # This renames the renamed settings in the list of visible settings. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "10" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades instance containers to have the new version + # number. + # + # This renames the renamed settings in the containers. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "10" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["metadata"]["setting_version"] = "10" + parser["general"]["version"] = "5" + + # We should only have 6 levels when we start. + assert "7" not in parser["containers"] + + # We added the intent container in Cura 4.4. This means that all other containers move one step down. + parser["containers"]["7"] = parser["containers"]["6"] + parser["containers"]["6"] = parser["containers"]["5"] + parser["containers"]["5"] = parser["containers"]["4"] + parser["containers"]["4"] = parser["containers"]["3"] + parser["containers"]["3"] = parser["containers"]["2"] + parser["containers"]["2"] = "empty_intent" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()]
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/__init__.py b/plugins/VersionUpgrade/VersionUpgrade43to44/__init__.py new file mode 100644 index 0000000000..53319197e1 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/__init__.py @@ -0,0 +1,62 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade43to44 + + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade43to44.VersionUpgrade43to44() + + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000009): ("preferences", 6000010, upgrade.upgradePreferences), + ("machine_stack", 4000009): ("machine_stack", 5000010, upgrade.upgradeStack), + ("extruder_train", 4000009): ("extruder_train", 5000010, upgrade.upgradeStack), + ("definition_changes", 4000009): ("definition_changes", 4000010, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000009): ("quality_changes", 4000010, upgrade.upgradeInstanceContainer), + ("quality", 4000009): ("quality", 4000010, upgrade.upgradeInstanceContainer), + ("user", 4000009): ("user", 4000010, 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/VersionUpgrade43to44/plugin.json b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json new file mode 100644 index 0000000000..355f2f58db --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.3 to 4.4", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.3 to Cura 4.4.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py b/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py new file mode 100644 index 0000000000..dc770c2c6f --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade43to44/tests/TestVersionUpgrade43To44.py @@ -0,0 +1,36 @@ +import configparser + +import VersionUpgrade43to44 + +before_update = """[general] +version = 4 +name = Ultimaker 3 +id = Ultimaker 3 + +[metadata] +type = machine + +[containers] +0 = user_profile +1 = quality_changes +2 = quality +3 = material +4 = variant +5 = definition_changes +6 = definition +""" + + +def test_upgrade(): + upgrader = VersionUpgrade43to44.VersionUpgrade43to44() + file_name, new_data = upgrader.upgradeStack(before_update, "whatever") + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(new_data[0]) + assert parser["containers"]["0"] == "user_profile" + assert parser["containers"]["1"] == "quality_changes" + assert parser["containers"]["2"] == "empty_intent" + assert parser["containers"]["3"] == "quality" + assert parser["containers"]["4"] == "material" + assert parser["containers"]["5"] == "variant" + assert parser["containers"]["6"] == "definition_changes" + assert parser["containers"]["7"] == "definition"
\ No newline at end of file |