Fix typing in ThreeMFWorkspaceReader

CURA-7644
This commit is contained in:
Kostas Karmas 2020-08-07 17:05:54 +02:00
parent 41a1ef12d7
commit 7f941f7f6b

View File

@ -5,11 +5,12 @@ from configparser import ConfigParser
import zipfile import zipfile
import os import os
import json import json
from typing import cast, Dict, List, Optional, Tuple, Any, Set from typing import cast, Dict, List, Optional, Tuple, Any, Set, Union
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from UM.FileHandler.FileReader import FileReader from UM.FileHandler.FileReader import FileReader
from UM.Util import parseBool
from UM.Workspace.WorkspaceReader import WorkspaceReader from UM.Workspace.WorkspaceReader import WorkspaceReader
from UM.Application import Application from UM.Application import Application
@ -55,12 +56,12 @@ _ignored_machine_network_metadata = {
class ContainerInfo: class ContainerInfo:
def __init__(self, file_name: Optional[str], serialized: Optional[str], parser: Optional[ConfigParser]) -> None: def __init__(self, file_name: Optional[str] = None, serialized: Optional[str] = None, parser: Optional[ConfigParser] = None) -> None:
self.file_name = file_name self.file_name = file_name # type: Optional[str]
self.serialized = serialized self.serialized = serialized # type: Optional[str]
self.parser = parser self.parser = parser # type: Optional[ConfigParser]
self.container = None self.container = None # type: Optional[InstanceContainer]
self.definition_id = None self.definition_id = None # type: Optional[str]
class QualityChangesInfo: class QualityChangesInfo:
@ -72,34 +73,33 @@ class QualityChangesInfo:
class MachineInfo: class MachineInfo:
def __init__(self) -> None: def __init__(self) -> None:
self.container_id = None self.container_id = None # type: Optional[str]
self.name = None self.name = None # type: Optional[str]
self.definition_id = None self.definition_id = None # type: Optional[str]
self.metadata_dict = {} # type: Dict[str, str] self.metadata_dict = {} # type: Dict[str, str]
self.quality_type = None self.quality_type = None # type: Optional[str]
self.intent_category = None self.intent_category = None # type: Optional[str]
self.custom_quality_name = None self.custom_quality_name = None # type: Optional[str]
self.quality_changes_info = QualityChangesInfo() self.quality_changes_info = None # type: Optional[QualityChangesInfo]
self.variant_info = None self.variant_info = None # type: Optional[ContainerInfo]
self.definition_changes_info = None # type: Optional[ContainerInfo]
self.user_changes_info = None # type: Optional[ContainerInfo]
self.definition_changes_info = None self.extruder_info_dict = {} # type: Dict[str, ExtruderInfo]
self.user_changes_info = None
self.extruder_info_dict = {} # type: Dict[str, ExtruderInfo]
class ExtruderInfo: class ExtruderInfo:
def __init__(self) -> None: def __init__(self) -> None:
self.position = None self.position = None # type: Optional[str]
self.enabled = True self.enabled = True # type: bool
self.variant_info = None self.variant_info = None # type: Optional[ContainerInfo]
self.root_material_id = None self.root_material_id = None # type: Optional[str]
self.definition_changes_info = None self.definition_changes_info = None # type: Optional[ContainerInfo]
self.user_changes_info = None self.user_changes_info = None # type: Optional[ContainerInfo]
self.intent_info = None self.intent_info = None # type: Optional[ContainerInfo]
class ThreeMFWorkspaceReader(WorkspaceReader): class ThreeMFWorkspaceReader(WorkspaceReader):
@ -330,7 +330,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._machine_info.quality_changes_info = QualityChangesInfo() self._machine_info.quality_changes_info = QualityChangesInfo()
quality_changes_info_list = [] quality_changes_info_list = []
instance_container_info_dict = {} # id -> parser instance_container_info_dict = {} # type: Dict[str, ContainerInfo] # id -> parser
for instance_container_file_name in instance_container_files: for instance_container_file_name in instance_container_files:
container_id = self._stripFileToId(instance_container_file_name) container_id = self._stripFileToId(instance_container_file_name)
@ -352,16 +352,18 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if container_type == "quality_changes": if container_type == "quality_changes":
quality_changes_info_list.append(container_info) quality_changes_info_list.append(container_info)
if not parser.has_option("metadata", "position"): if self._machine_info.quality_changes_info:
self._machine_info.quality_changes_info.name = parser["general"]["name"] if not parser.has_option("metadata", "position"):
self._machine_info.quality_changes_info.global_info = container_info self._machine_info.quality_changes_info.name = parser["general"]["name"]
else: self._machine_info.quality_changes_info.global_info = container_info
position = parser["metadata"]["position"] else:
self._machine_info.quality_changes_info.extruder_info_dict[position] = container_info position = parser["metadata"]["position"]
self._machine_info.quality_changes_info.extruder_info_dict[position] = container_info
custom_quality_name = parser["general"]["name"] custom_quality_name = parser["general"]["name"]
values = parser["values"] if parser.has_section("values") else dict() if parser.has_section("values"):
num_settings_overridden_by_quality_changes += len(values) num_settings_overridden_by_quality_changes += len(parser["values"])
# Check if quality changes already exists. # Check if quality changes already exists.
quality_changes = self._container_registry.findInstanceContainers(name = custom_quality_name, quality_changes = self._container_registry.findInstanceContainers(name = custom_quality_name,
type = "quality_changes") type = "quality_changes")
@ -443,7 +445,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
quality_container_id = parser["containers"][str(_ContainerIndexes.Quality)] quality_container_id = parser["containers"][str(_ContainerIndexes.Quality)]
quality_type = "empty_quality" quality_type = "empty_quality"
if quality_container_id not in ("empty", "empty_quality"): if quality_container_id not in ("empty", "empty_quality"):
quality_type = instance_container_info_dict[quality_container_id].parser["metadata"]["quality_type"] quality_parser = cast(ConfigParser, instance_container_info_dict[quality_container_id].parser)
quality_type = quality_parser["metadata"]["quality_type"]
# Get machine info # Get machine info
serialized = archive.open(global_stack_file).read().decode("utf-8") serialized = archive.open(global_stack_file).read().decode("utf-8")
@ -497,7 +500,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
extruder_info = ExtruderInfo() extruder_info = ExtruderInfo()
extruder_info.position = position extruder_info.position = position
if parser.has_option("metadata", "enabled"): if parser.has_option("metadata", "enabled"):
extruder_info.enabled = parser["metadata"]["enabled"] extruder_info.enabled = parseBool(parser["metadata"]["enabled"])
if variant_id not in ("empty", "empty_variant"): if variant_id not in ("empty", "empty_variant"):
if variant_id in instance_container_info_dict: if variant_id in instance_container_info_dict:
extruder_info.variant_info = instance_container_info_dict[variant_id] extruder_info.variant_info = instance_container_info_dict[variant_id]
@ -591,7 +594,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._machine_info.intent_category = intent_category self._machine_info.intent_category = intent_category
is_printer_group = False is_printer_group = False
if machine_conflict: if machine_conflict and existing_global_stack:
group_name = existing_global_stack.getMetaDataEntry("group_name") group_name = existing_global_stack.getMetaDataEntry("group_name")
if group_name is not None: if group_name is not None:
is_printer_group = True is_printer_group = True
@ -616,7 +619,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._dialog.setMachineType(machine_type) self._dialog.setMachineType(machine_type)
self._dialog.setExtruders(extruders) self._dialog.setExtruders(extruders)
self._dialog.setVariantType(variant_type_name) self._dialog.setVariantType(variant_type_name)
self._dialog.setHasObjectsOnPlate(Application.getInstance().platformActivity) self._dialog.setHasObjectsOnPlate(CuraApplication.getInstance().platformActivity)
self._dialog.show() self._dialog.show()
# Block until the dialog is closed. # Block until the dialog is closed.