VersionUpgrade41to42.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # Copyright (c) 2019 Ultimaker B.V.
  2. # Cura is released under the terms of the LGPLv3 or higher.
  3. import configparser
  4. import io
  5. from typing import Dict, List, Tuple
  6. from UM.VersionUpgrade import VersionUpgrade
  7. _renamed_settings = {
  8. "support_minimal_diameter": "support_tower_maximum_supported_diameter"
  9. } #type: Dict[str, str]
  10. _removed_settings = ["prime_tower_circular"] # type: List[str]
  11. ## Upgrades configurations from the state they were in at version 4.1 to the
  12. # state they should be in at version 4.2.
  13. class VersionUpgrade41to42(VersionUpgrade):
  14. ## Gets the version number from a CFG file in Uranium's 4.1 format.
  15. #
  16. # Since the format may change, this is implemented for the 4.1 format only
  17. # and needs to be included in the version upgrade system rather than
  18. # globally in Uranium.
  19. #
  20. # \param serialised The serialised form of a CFG file.
  21. # \return The version number stored in the CFG file.
  22. # \raises ValueError The format of the version number in the file is
  23. # incorrect.
  24. # \raises KeyError The format of the file is incorrect.
  25. def getCfgVersion(self, serialised: str) -> int:
  26. parser = configparser.ConfigParser(interpolation = None)
  27. parser.read_string(serialised)
  28. format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
  29. setting_version = int(parser.get("metadata", "setting_version", fallback = "0"))
  30. return format_version * 1000000 + setting_version
  31. ## Upgrades instance containers to have the new version
  32. # number.
  33. #
  34. # This renames the renamed settings in the containers.
  35. def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
  36. parser = configparser.ConfigParser(interpolation = None)
  37. parser.read_string(serialized)
  38. #Update version number.
  39. parser["metadata"]["setting_version"] = "8"
  40. #Rename settings.
  41. if "values" in parser:
  42. for old_name, new_name in _renamed_settings.items():
  43. if old_name in parser["values"]:
  44. parser["values"][new_name] = parser["values"][old_name]
  45. del parser["values"][old_name]
  46. #Remove settings.
  47. for key in _removed_settings:
  48. if key in parser["values"]:
  49. del parser["values"][key]
  50. result = io.StringIO()
  51. parser.write(result)
  52. return [filename], [result.getvalue()]
  53. ## Upgrades Preferences to have the new version number.
  54. #
  55. # This renames the renamed settings in the list of visible settings.
  56. def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
  57. parser = configparser.ConfigParser(interpolation = None)
  58. parser.read_string(serialized)
  59. #Update version number.
  60. parser["metadata"]["setting_version"] = "8"
  61. #Renamed settings.
  62. if "visible_settings" in parser["general"]:
  63. visible_settings = parser["general"]["visible_settings"]
  64. visible_setting_set = set(visible_settings.split(";"))
  65. for old_name, new_name in _renamed_settings.items():
  66. if old_name in visible_setting_set:
  67. visible_setting_set.remove(old_name)
  68. visible_setting_set.add(new_name)
  69. for removed_key in _removed_settings:
  70. if removed_key in visible_setting_set:
  71. visible_setting_set.remove(removed_key)
  72. parser["general"]["visible_settings"] = ";".join(visible_setting_set)
  73. result = io.StringIO()
  74. parser.write(result)
  75. return [filename], [result.getvalue()]
  76. ## Upgrades stacks to have the new version number.
  77. def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
  78. parser = configparser.ConfigParser(interpolation = None)
  79. parser.read_string(serialized)
  80. #Update version number.
  81. parser["metadata"]["setting_version"] = "8"
  82. parser["general"]["version"] = "5"
  83. # We should only have 6 levels when we start.
  84. assert "7" not in parser["containers"]
  85. # We added the intent container in Cura 4.2. This means that all other containers move one step down.
  86. parser["containers"]["7"] = parser["containers"]["6"]
  87. parser["containers"]["6"] = parser["containers"]["5"]
  88. parser["containers"]["5"] = parser["containers"]["4"]
  89. parser["containers"]["4"] = parser["containers"]["3"]
  90. parser["containers"]["3"] = parser["containers"]["2"]
  91. parser["containers"]["2"] = "empty_intent"
  92. result = io.StringIO()
  93. parser.write(result)
  94. return [filename], [result.getvalue()]