From 762a1b1bfdbb7fcb37bfa08013870793f5d20640 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 3 Jul 2018 12:06:06 +0200 Subject: [PATCH] Fix code-style --- cura/Arranging/Arrange.py | 5 +++-- cura/CuraActions.py | 7 ++++--- cura/CuraApplication.py | 9 ++++++--- cura/Machines/MaterialManager.py | 7 ++++--- .../Models/QualityProfilesDropDownMenuModel.py | 2 +- cura/PrinterOutputDevice.py | 2 +- cura/Settings/ContainerManager.py | 3 ++- cura/Settings/CuraContainerStack.py | 11 ++++++++--- cura/Settings/MachineManager.py | 8 ++++---- cura/Settings/PerObjectContainerStack.py | 2 ++ cura/Settings/SettingInheritanceManager.py | 3 ++- plugins/3MFReader/ThreeMFWorkspaceReader.py | 15 +++++++-------- run_mypy.py | 6 +++--- 13 files changed, 47 insertions(+), 33 deletions(-) diff --git a/cura/Arranging/Arrange.py b/cura/Arranging/Arrange.py index ee5db3f1fb..5657ee991a 100644 --- a/cura/Arranging/Arrange.py +++ b/cura/Arranging/Arrange.py @@ -97,8 +97,9 @@ class Arrange: # Ensure that the object is above the build platform node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator) - if node.getBoundingBox(): - center_y = node.getWorldPosition().y - node.getBoundingBox().bottom + bbox = node.getBoundingBox() + if bbox: + center_y = node.getWorldPosition().y - bbox.bottom else: center_y = 0 diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 1ddc41717e..1b2c6c576c 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -49,9 +49,10 @@ class CuraActions(QObject): def homeCamera(self) -> None: scene = cura.CuraApplication.CuraApplication.getInstance().getController().getScene() camera = scene.getActiveCamera() - camera.setPosition(Vector(-80, 250, 700)) - camera.setPerspective(True) - camera.lookAt(Vector(0, 0, 0)) + if camera: + camera.setPosition(Vector(-80, 250, 700)) + camera.setPerspective(True) + camera.lookAt(Vector(0, 0, 0)) ## Center all objects in the selection @pyqtSlot() diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index b404e841b7..8f738d8937 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -84,6 +84,7 @@ from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager from cura.Machines.VariantManager import VariantManager +from plugins.SliceInfoPlugin.SliceInfo import SliceInfo from .SingleInstance import SingleInstance from .AutoSave import AutoSave @@ -1722,11 +1723,13 @@ class CuraApplication(QtApplication): if not Selection.hasSelection(): node = self.getController().getScene().findObject(cast(SelectionPass, self.getRenderer().getRenderPass("selection")).getIdAtPosition(x, y)) if node: - while(node.getParent() and node.getParent().callDecoration("isGroup")): - node = node.getParent() + parent = node.getParent() + while(parent and parent.callDecoration("isGroup")): + node = parent + parent = node.getParent() Selection.add(node) @pyqtSlot() def showMoreInformationDialogForAnonymousDataCollection(self): - self._plugin_registry.getPluginObject("SliceInfoPlugin").showMoreInfoDialog() + cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")).showMoreInfoDialog() diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 4c6f9148c3..b66ba3c94c 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -4,7 +4,7 @@ from collections import defaultdict, OrderedDict import copy import uuid -from typing import Dict +from typing import Dict, cast from typing import Optional, TYPE_CHECKING from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot @@ -416,13 +416,14 @@ class MaterialManager(QObject): ## Get default material for given global stack, extruder position and extruder variant name # you can provide the extruder_definition and then the position is ignored (useful when building up global stack in CuraStackBuilder) - def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, extruder_variant_name: Optional[str], extruder_definition: Optional["ExtruderStack"] = None) -> Optional["MaterialNode"]: + def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, extruder_variant_name: Optional[str], extruder_definition: Optional["DefinitionContainer"] = None) -> Optional["MaterialNode"]: node = None machine_definition = global_stack.definition if extruder_definition is None: extruder_definition = global_stack.extruders[position].definition if parseBool(global_stack.getMetaDataEntry("has_materials", False)): - material_diameter = extruder_definition.getProperty("material_diameter", "value") + # At this point the extruder_definition is not None + material_diameter = cast(DefinitionContainer, extruder_definition).getProperty("material_diameter", "value") if isinstance(material_diameter, SettingFunction): material_diameter = material_diameter(global_stack) approximate_material_diameter = str(round(material_diameter)) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index 02de23b10a..59c4f4fa5b 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -104,6 +104,6 @@ class QualityProfilesDropDownMenuModel(ListModel): else: # Look for layer_height in the GlobalStack from material -> definition container = global_stack.definition - if container.hasProperty("layer_height", "value"): + if container and container.hasProperty("layer_height", "value"): layer_height = container.getProperty("layer_height", "value") return float(layer_height) diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 67f02415e4..5ea65adb8e 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -61,7 +61,7 @@ class PrinterOutputDevice(QObject, OutputDevice): uniqueConfigurationsChanged = pyqtSignal() def __init__(self, device_id: str, parent: QObject = None) -> None: - super().__init__(device_id = device_id, parent = parent) + super().__init__(device_id = device_id, parent = parent) # type: ignore # MyPy complains with the multiple inheritance self._printers = [] # type: List[PrinterOutputModel] self._unique_configurations = [] # type: List[ConfigurationModel] diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 238f4dfc32..12f5b6b0a3 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -4,6 +4,7 @@ import os import urllib.parse import uuid +from typing import Any from typing import Dict, Union from PyQt5.QtCore import QObject, QUrl, QVariant @@ -43,7 +44,7 @@ class ContainerManager(QObject): self._machine_manager = self._application.getMachineManager() self._material_manager = self._application.getMaterialManager() self._quality_manager = self._application.getQualityManager() - self._container_name_filters = {} + self._container_name_filters = {} # type: Dict[str, Dict[str, Any]] @pyqtSlot(str, str, result=str) def getContainerMetaDataEntry(self, container_id, entry_name): diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index 0cee696a8d..4b1ab7c19a 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -244,8 +244,9 @@ class CuraContainerStack(ContainerStack): # # \throws InvalidContainerStackError Raised when no definition can be found for the stack. @override(ContainerStack) - def deserialize(self, contents: str, file_name: Optional[str] = None) -> None: - super().deserialize(contents, file_name) + def deserialize(self, serialized: str, file_name: Optional[str] = None) -> str: + # update the serialized data first + serialized = super().deserialize(serialized, file_name) new_containers = self._containers.copy() while len(new_containers) < len(_ContainerIndexes.IndexTypeMap): @@ -253,10 +254,11 @@ class CuraContainerStack(ContainerStack): # Validate and ensure the list of containers matches with what we expect for index, type_name in _ContainerIndexes.IndexTypeMap.items(): + container = None try: container = new_containers[index] except IndexError: - container = None + pass if type_name == "definition": if not container or not isinstance(container, DefinitionContainer): @@ -283,6 +285,9 @@ class CuraContainerStack(ContainerStack): from cura.Settings.CuraStackBuilder import CuraStackBuilder CuraStackBuilder.createDefinitionChangesContainer(self, self.getId() + "_settings") + ## TODO; Deserialize the containers. + return serialized + ## protected: # Helper to make sure we emit a PyQt signal on container changes. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 6d0aed8519..065dc84df1 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -3,7 +3,7 @@ import collections import time -from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional +from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -1137,7 +1137,7 @@ class MachineManager(QObject): quality_changes_container = self._empty_quality_changes_container quality_container = self._empty_quality_container if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer(): - quality_changes_container = quality_changes_group.node_for_global.getContainer() + quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer()) if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer(): quality_container = quality_group.node_for_global.getContainer() @@ -1153,7 +1153,7 @@ class MachineManager(QObject): quality_changes_container = self._empty_quality_changes_container quality_container = self._empty_quality_container if quality_changes_node and quality_changes_node.getContainer(): - quality_changes_container = quality_changes_node.getContainer() + quality_changes_container = cast(InstanceContainer, quality_changes_node.getContainer()) if quality_node and quality_node.getContainer(): quality_container = quality_node.getContainer() @@ -1279,7 +1279,7 @@ class MachineManager(QObject): continue # The current material is not available, find the preferred one - material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, position, current_variant_name) + material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, position_item, current_variant_name) if material_node is not None: self._setMaterial(position_item, material_node) diff --git a/cura/Settings/PerObjectContainerStack.py b/cura/Settings/PerObjectContainerStack.py index 9f4576317f..3589029517 100644 --- a/cura/Settings/PerObjectContainerStack.py +++ b/cura/Settings/PerObjectContainerStack.py @@ -19,6 +19,8 @@ class PerObjectContainerStack(CuraContainerStack): context.pushContainer(self) global_stack = Application.getInstance().getGlobalContainerStack() + if not global_stack: + return None # Return the user defined value if present, otherwise, evaluate the value according to the default routine. if self.getContainer(0).hasProperty(key, property_name): diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 6d4176ebf1..9cd24558b7 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -171,7 +171,8 @@ class SettingInheritanceManager(QObject): return False ## Also check if the top container is not a setting function (this happens if the inheritance is restored). - if isinstance(stack.getTop().getProperty(key, "value"), SettingFunction): + user_container = stack.getTop() + if user_container and isinstance(user_container.getProperty(key, "value"), SettingFunction): return False ## Mash all containers for all the stacks together. diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 3df3d9d4a2..008bf24cda 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -4,8 +4,7 @@ from configparser import ConfigParser import zipfile import os -from typing import Dict, List, Tuple - +from typing import Dict, List, Tuple, cast import xml.etree.ElementTree as ET @@ -98,13 +97,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): self._3mf_mesh_reader = None self._container_registry = ContainerRegistry.getInstance() - # suffixes registered with the MineTypes don't start with a dot '.' - self._definition_container_suffix = "." + ContainerRegistry.getMimeTypeForContainer(DefinitionContainer).preferredSuffix + # suffixes registered with the MimeTypes don't start with a dot '.' + self._definition_container_suffix = "." + cast(MimeType, ContainerRegistry.getMimeTypeForContainer(DefinitionContainer)).preferredSuffix self._material_container_suffix = None # We have to wait until all other plugins are loaded before we can set it - self._instance_container_suffix = "." + ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix - self._container_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(ContainerStack).preferredSuffix - self._extruder_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(ExtruderStack).preferredSuffix - self._global_stack_suffix = "." + ContainerRegistry.getMimeTypeForContainer(GlobalStack).preferredSuffix + self._instance_container_suffix = "." + cast(MimeType, ContainerRegistry.getMimeTypeForContainer(InstanceContainer)).preferredSuffix + self._container_stack_suffix = "." + cast(MimeType, ContainerRegistry.getMimeTypeForContainer(ContainerStack)).preferredSuffix + self._extruder_stack_suffix = "." + cast(MimeType, ContainerRegistry.getMimeTypeForContainer(ExtruderStack)).preferredSuffix + self._global_stack_suffix = "." + cast(MimeType, ContainerRegistry.getMimeTypeForContainer(GlobalStack)).preferredSuffix # Certain instance container types are ignored because we make the assumption that only we make those types # of containers. They are: diff --git a/run_mypy.py b/run_mypy.py index 2a2c72dbbe..b324dfb3d2 100644 --- a/run_mypy.py +++ b/run_mypy.py @@ -34,13 +34,13 @@ def main(): os.putenv("MYPYPATH", ":".join(mypyPathParts)) # Mypy really needs to be run via its Python script otherwise it can't find its data files. - mypyExe = where("mypy.bat" if sys.platform == "win32" else "mypy") - mypyModule = os.path.join(os.path.dirname(mypyExe), "mypy") + mypyExe = where("mypy.exe" if sys.platform == "win32" else "mypy") + mypyModule = os.path.join(os.path.dirname(mypyExe), "mypy.exe") plugins = findModules("plugins") plugins.sort() - mods = ["cura"] + plugins + findModules("plugins/VersionUpgrade") + mods = plugins + findModules("plugins/VersionUpgrade") for mod in mods: print("------------- Checking module {mod}".format(**locals()))