Add some missing typing

This commit is contained in:
Jaime van Kessel 2020-01-10 14:25:35 +01:00
parent 3e07105edf
commit 81b33b8649
No known key found for this signature in database
GPG key ID: 3710727397403C91
18 changed files with 73 additions and 59 deletions

View file

@ -1,6 +1,6 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from typing import List from typing import List, Optional
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Logger import Logger from UM.Logger import Logger
@ -8,6 +8,7 @@ from UM.Math.Polygon import Polygon
from UM.Math.Vector import Vector from UM.Math.Vector import Vector
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
from cura.Arranging.ShapeArray import ShapeArray from cura.Arranging.ShapeArray import ShapeArray
from cura.BuildVolume import BuildVolume
from cura.Scene import ZOffsetDecorator from cura.Scene import ZOffsetDecorator
from collections import namedtuple from collections import namedtuple
@ -27,7 +28,7 @@ LocationSuggestion = namedtuple("LocationSuggestion", ["x", "y", "penalty_points
# #
# Note: Make sure the scale is the same between ShapeArray objects and the Arrange instance. # Note: Make sure the scale is the same between ShapeArray objects and the Arrange instance.
class Arrange: class Arrange:
build_volume = None build_volume = None # type: Optional[BuildVolume]
def __init__(self, x, y, offset_x, offset_y, scale= 0.5): def __init__(self, x, y, offset_x, offset_y, scale= 0.5):
self._scale = scale # convert input coordinates to arrange coordinates self._scale = scale # convert input coordinates to arrange coordinates

View file

@ -2,12 +2,16 @@
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import QTimer from PyQt5.QtCore import QTimer
from typing import Any, TYPE_CHECKING
from UM.Logger import Logger from UM.Logger import Logger
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
class AutoSave: class AutoSave:
def __init__(self, application): def __init__(self, application: "CuraApplication") -> None:
self._application = application self._application = application
self._application.getPreferences().preferenceChanged.connect(self._triggerTimer) self._application.getPreferences().preferenceChanged.connect(self._triggerTimer)
@ -22,14 +26,14 @@ class AutoSave:
self._enabled = True self._enabled = True
self._saving = False self._saving = False
def initialize(self): def initialize(self) -> None:
# only initialise if the application is created and has started # only initialise if the application is created and has started
self._change_timer.timeout.connect(self._onTimeout) self._change_timer.timeout.connect(self._onTimeout)
self._application.globalContainerStackChanged.connect(self._onGlobalStackChanged) self._application.globalContainerStackChanged.connect(self._onGlobalStackChanged)
self._onGlobalStackChanged() self._onGlobalStackChanged()
self._triggerTimer() self._triggerTimer()
def _triggerTimer(self, *args): def _triggerTimer(self, *args: Any) -> None:
if not self._saving: if not self._saving:
self._change_timer.start() self._change_timer.start()
@ -40,7 +44,7 @@ class AutoSave:
else: else:
self._change_timer.stop() self._change_timer.stop()
def _onGlobalStackChanged(self): def _onGlobalStackChanged(self) -> None:
if self._global_stack: if self._global_stack:
self._global_stack.propertyChanged.disconnect(self._triggerTimer) self._global_stack.propertyChanged.disconnect(self._triggerTimer)
self._global_stack.containersChanged.disconnect(self._triggerTimer) self._global_stack.containersChanged.disconnect(self._triggerTimer)
@ -51,7 +55,7 @@ class AutoSave:
self._global_stack.propertyChanged.connect(self._triggerTimer) self._global_stack.propertyChanged.connect(self._triggerTimer)
self._global_stack.containersChanged.connect(self._triggerTimer) self._global_stack.containersChanged.connect(self._triggerTimer)
def _onTimeout(self): def _onTimeout(self) -> None:
self._saving = True # To prevent the save process from triggering another autosave. self._saving = True # To prevent the save process from triggering another autosave.
Logger.log("d", "Autosaving preferences, instances and profiles") Logger.log("d", "Autosaving preferences, instances and profiles")

View file

@ -4,7 +4,7 @@
import os import os
import sys import sys
import time import time
from typing import cast, TYPE_CHECKING, Optional, Callable, List from typing import cast, TYPE_CHECKING, Optional, Callable, List, Any
import numpy import numpy
@ -193,7 +193,7 @@ class CuraApplication(QtApplication):
self._cura_package_manager = None self._cura_package_manager = None
self._machine_action_manager = None self._machine_action_manager = None # type: Optional[MachineActionManager.MachineActionManager]
self.empty_container = None # type: EmptyInstanceContainer self.empty_container = None # type: EmptyInstanceContainer
self.empty_definition_changes_container = None # type: EmptyInstanceContainer self.empty_definition_changes_container = None # type: EmptyInstanceContainer
@ -699,7 +699,7 @@ class CuraApplication(QtApplication):
self._message_box_callback_arguments = [] self._message_box_callback_arguments = []
# Cura has multiple locations where instance containers need to be saved, so we need to handle this differently. # Cura has multiple locations where instance containers need to be saved, so we need to handle this differently.
def saveSettings(self): def saveSettings(self) -> None:
if not self.started: if not self.started:
# Do not do saving during application start or when data should not be saved on quit. # Do not do saving during application start or when data should not be saved on quit.
return return
@ -989,8 +989,8 @@ class CuraApplication(QtApplication):
## Get the machine action manager ## Get the machine action manager
# We ignore any *args given to this, as we also register the machine manager as qml singleton. # We ignore any *args given to this, as we also register the machine manager as qml singleton.
# It wants to give this function an engine and script engine, but we don't care about that. # It wants to give this function an engine and script engine, but we don't care about that.
def getMachineActionManager(self, *args): def getMachineActionManager(self, *args: Any) -> MachineActionManager.MachineActionManager:
return self._machine_action_manager return cast(MachineActionManager.MachineActionManager, self._machine_action_manager)
@pyqtSlot(result = QObject) @pyqtSlot(result = QObject)
def getMaterialManagementModel(self) -> MaterialManagementModel: def getMaterialManagementModel(self) -> MaterialManagementModel:

View file

@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Tuple from typing import List, Tuple, TYPE_CHECKING, Optional
from cura.CuraApplication import CuraApplication #To find some resource types. from cura.CuraApplication import CuraApplication #To find some resource types.
from cura.Settings.GlobalStack import GlobalStack from cura.Settings.GlobalStack import GlobalStack
@ -9,12 +9,16 @@ from cura.Settings.GlobalStack import GlobalStack
from UM.PackageManager import PackageManager #The class we're extending. from UM.PackageManager import PackageManager #The class we're extending.
from UM.Resources import Resources #To find storage paths for some resource types. from UM.Resources import Resources #To find storage paths for some resource types.
if TYPE_CHECKING:
from UM.Qt.QtApplication import QtApplication
from PyQt5.QtCore import QObject
class CuraPackageManager(PackageManager): class CuraPackageManager(PackageManager):
def __init__(self, application, parent = None): def __init__(self, application: "QtApplication", parent: Optional["QObject"] = None):
super().__init__(application, parent) super().__init__(application, parent)
def initialize(self): def initialize(self) -> None:
self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer) self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer)
self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer) self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer)

View file

@ -33,10 +33,10 @@ class Layer:
def elementCount(self): def elementCount(self):
return self._element_count return self._element_count
def setHeight(self, height): def setHeight(self, height: float) -> None:
self._height = height self._height = height
def setThickness(self, thickness): def setThickness(self, thickness: float) -> None:
self._thickness = thickness self._thickness = thickness
def lineMeshVertexCount(self) -> int: def lineMeshVertexCount(self) -> int:

View file

@ -9,7 +9,7 @@ from cura.LayerData import LayerData
## Simple decorator to indicate a scene node holds layer data. ## Simple decorator to indicate a scene node holds layer data.
class LayerDataDecorator(SceneNodeDecorator): class LayerDataDecorator(SceneNodeDecorator):
def __init__(self): def __init__(self) -> None:
super().__init__() super().__init__()
self._layer_data = None # type: Optional[LayerData] self._layer_data = None # type: Optional[LayerData]

View file

@ -149,17 +149,17 @@ class LayerPolygon:
def getColors(self): def getColors(self):
return self._colors return self._colors
def mapLineTypeToColor(self, line_types): def mapLineTypeToColor(self, line_types: numpy.ndarray) -> numpy.ndarray:
return self._color_map[line_types] return self._color_map[line_types]
def isInfillOrSkinType(self, line_types): def isInfillOrSkinType(self, line_types: numpy.ndarray) -> numpy.ndarray:
return self._isInfillOrSkinTypeMap[line_types] return self._isInfillOrSkinTypeMap[line_types]
def lineMeshVertexCount(self): def lineMeshVertexCount(self) -> int:
return (self._vertex_end - self._vertex_begin) return self._vertex_end - self._vertex_begin
def lineMeshElementCount(self): def lineMeshElementCount(self) -> int:
return (self._index_end - self._index_begin) return self._index_end - self._index_begin
@property @property
def extruder(self): def extruder(self):
@ -202,7 +202,7 @@ class LayerPolygon:
return self._jump_count return self._jump_count
# Calculate normals for the entire polygon using numpy. # Calculate normals for the entire polygon using numpy.
def getNormals(self): def getNormals(self) -> numpy.ndarray:
normals = numpy.copy(self._data) normals = numpy.copy(self._data)
normals[:, 1] = 0.0 # We are only interested in 2D normals normals[:, 1] = 0.0 # We are only interested in 2D normals
@ -226,11 +226,11 @@ class LayerPolygon:
return normals return normals
__color_map = None # type: numpy.ndarray[Any] __color_map = None # type: numpy.ndarray
## Gets the instance of the VersionUpgradeManager, or creates one. ## Gets the instance of the VersionUpgradeManager, or creates one.
@classmethod @classmethod
def getColorMap(cls): def getColorMap(cls) -> numpy.ndarray:
if cls.__color_map is None: if cls.__color_map is None:
theme = QtApplication.getInstance().getTheme() theme = QtApplication.getInstance().getTheme()
cls.__color_map = numpy.array([ cls.__color_map = numpy.array([

View file

@ -26,7 +26,7 @@ class ContainerNode:
## Gets the metadata of the container that this node represents. ## Gets the metadata of the container that this node represents.
# Getting the metadata from the container directly is about 10x as fast. # Getting the metadata from the container directly is about 10x as fast.
# \return The metadata of the container in this node. # \return The metadata of the container in this node.
def getMetadata(self): def getMetadata(self) -> Dict[str, Any]:
return ContainerRegistry.getInstance().findContainersMetadata(id = self.container_id)[0] return ContainerRegistry.getInstance().findContainersMetadata(id = self.container_id)[0]
## Get an entry from the metadata of the container that this node contains. ## Get an entry from the metadata of the container that this node contains.

View file

@ -30,7 +30,7 @@ if TYPE_CHECKING:
# nodes that have children) but that child node may be a node representing the # nodes that have children) but that child node may be a node representing the
# empty instance container. # empty instance container.
class ContainerTree: class ContainerTree:
__instance = None __instance = None # type: Optional["ContainerTree"]
@classmethod @classmethod
def getInstance(cls): def getInstance(cls):
@ -75,7 +75,7 @@ class ContainerTree:
return self.machines[global_stack.definition.getId()].getQualityChangesGroups(variant_names, material_bases, extruder_enabled) return self.machines[global_stack.definition.getId()].getQualityChangesGroups(variant_names, material_bases, extruder_enabled)
## Ran after completely starting up the application. ## Ran after completely starting up the application.
def _onStartupFinished(self): def _onStartupFinished(self) -> None:
currently_added = ContainerRegistry.getInstance().findContainerStacks() # Find all currently added global stacks. currently_added = ContainerRegistry.getInstance().findContainerStacks() # Find all currently added global stacks.
JobQueue.getInstance().add(self._MachineNodeLoadJob(self, currently_added)) JobQueue.getInstance().add(self._MachineNodeLoadJob(self, currently_added))
@ -137,7 +137,7 @@ class ContainerTree:
# \param container_stacks All of the stacks to pre-load the container # \param container_stacks All of the stacks to pre-load the container
# trees for. This needs to be provided from here because the stacks # trees for. This needs to be provided from here because the stacks
# need to be constructed on the main thread because they are QObject. # need to be constructed on the main thread because they are QObject.
def __init__(self, tree_root: "ContainerTree", container_stacks: List["ContainerStack"]): def __init__(self, tree_root: "ContainerTree", container_stacks: List["ContainerStack"]) -> None:
self.tree_root = tree_root self.tree_root = tree_root
self.container_stacks = container_stacks self.container_stacks = container_stacks
super().__init__() super().__init__()

View file

@ -6,6 +6,7 @@ import time
from collections import deque from collections import deque
from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtProperty from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtProperty
from typing import Optional, Any, Set
from UM.Application import Application from UM.Application import Application
from UM.Logger import Logger from UM.Logger import Logger
@ -24,16 +25,16 @@ from UM.Settings.Validator import ValidatorState
# #
class MachineErrorChecker(QObject): class MachineErrorChecker(QObject):
def __init__(self, parent = None): def __init__(self, parent: Optional[QObject] = None) -> None:
super().__init__(parent) super().__init__(parent)
self._global_stack = None self._global_stack = None
self._has_errors = True # Result of the error check, indicating whether there are errors in the stack self._has_errors = True # Result of the error check, indicating whether there are errors in the stack
self._error_keys = set() # A set of settings keys that have errors self._error_keys = set() # type: Set[str] # A set of settings keys that have errors
self._error_keys_in_progress = set() # The variable that stores the results of the currently in progress check self._error_keys_in_progress = set() # type: Set[str] # The variable that stores the results of the currently in progress check
self._stacks_and_keys_to_check = None # a FIFO queue of tuples (stack, key) to check for errors self._stacks_and_keys_to_check = None # type: Optional[deque] # a FIFO queue of tuples (stack, key) to check for errors
self._need_to_check = False # Whether we need to schedule a new check or not. This flag is set when a new self._need_to_check = False # Whether we need to schedule a new check or not. This flag is set when a new
# error check needs to take place while there is already one running at the moment. # error check needs to take place while there is already one running at the moment.
@ -42,7 +43,7 @@ class MachineErrorChecker(QObject):
self._application = Application.getInstance() self._application = Application.getInstance()
self._machine_manager = self._application.getMachineManager() self._machine_manager = self._application.getMachineManager()
self._start_time = 0 # measure checking time self._start_time = 0. # measure checking time
# This timer delays the starting of error check so we can react less frequently if the user is frequently # This timer delays the starting of error check so we can react less frequently if the user is frequently
# changing settings. # changing settings.
@ -94,13 +95,13 @@ class MachineErrorChecker(QObject):
# Start the error check for property changed # Start the error check for property changed
# this is seperate from the startErrorCheck because it ignores a number property types # this is seperate from the startErrorCheck because it ignores a number property types
def startErrorCheckPropertyChanged(self, key, property_name): def startErrorCheckPropertyChanged(self, key: str, property_name: str) -> None:
if property_name != "value": if property_name != "value":
return return
self.startErrorCheck() self.startErrorCheck()
# Starts the error check timer to schedule a new error check. # Starts the error check timer to schedule a new error check.
def startErrorCheck(self, *args) -> None: def startErrorCheck(self, *args: Any) -> None:
if not self._check_in_progress: if not self._check_in_progress:
self._need_to_check = True self._need_to_check = True
self.needToWaitForResultChanged.emit() self.needToWaitForResultChanged.emit()

View file

@ -14,6 +14,7 @@ if TYPE_CHECKING:
from typing import Dict from typing import Dict
from cura.Machines.VariantNode import VariantNode from cura.Machines.VariantNode import VariantNode
## Represents a material in the container tree. ## Represents a material in the container tree.
# #
# Its subcontainers are quality profiles. # Its subcontainers are quality profiles.

View file

@ -1,10 +1,10 @@
# Copyright (c) 2019 Ultimaker B.V. # Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional from typing import Optional, Dict, Any
class BaseModel: class BaseModel:
def __init__(self, **kwargs): def __init__(self, **kwargs: Any) -> None:
self.__dict__.update(kwargs) self.__dict__.update(kwargs)
@ -53,9 +53,10 @@ class ResponseData(BaseModel):
redirect_uri = None # type: Optional[str] redirect_uri = None # type: Optional[str]
content_type = "text/html" # type: str content_type = "text/html" # type: str
## Possible HTTP responses. ## Possible HTTP responses.
HTTP_STATUS = { HTTP_STATUS = {
"OK": ResponseStatus(code = 200, message = "OK"), "OK": ResponseStatus(code = 200, message = "OK"),
"NOT_FOUND": ResponseStatus(code = 404, message = "NOT FOUND"), "NOT_FOUND": ResponseStatus(code = 404, message = "NOT FOUND"),
"REDIRECT": ResponseStatus(code = 302, message = "REDIRECT") "REDIRECT": ResponseStatus(code = 302, message = "REDIRECT")
} } # type: Dict[str, ResponseStatus]

View file

@ -1,26 +1,27 @@
# Copyright (c) 2015 Ultimaker B.V. # Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from UM.Math.Vector import Vector
from UM.Operations.Operation import Operation from UM.Operations.Operation import Operation
from UM.Operations.GroupedOperation import GroupedOperation from UM.Operations.GroupedOperation import GroupedOperation
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
## A specialised operation designed specifically to modify the previous operation. ## A specialised operation designed specifically to modify the previous operation.
class PlatformPhysicsOperation(Operation): class PlatformPhysicsOperation(Operation):
def __init__(self, node, translation): def __init__(self, node: SceneNode, translation: Vector):
super().__init__() super().__init__()
self._node = node self._node = node
self._old_transformation = node.getLocalTransformation() self._old_transformation = node.getLocalTransformation()
self._translation = translation self._translation = translation
self._always_merge = True self._always_merge = True
def undo(self): def undo(self) -> None:
self._node.setTransformation(self._old_transformation) self._node.setTransformation(self._old_transformation)
def redo(self): def redo(self) -> None:
self._node.translate(self._translation, SceneNode.TransformSpace.World) self._node.translate(self._translation, SceneNode.TransformSpace.World)
def mergeWith(self, other): def mergeWith(self, other: Operation) -> GroupedOperation:
group = GroupedOperation() group = GroupedOperation()
group.addOperation(other) group.addOperation(other)
@ -28,5 +29,5 @@ class PlatformPhysicsOperation(Operation):
return group return group
def __repr__(self): def __repr__(self) -> str:
return "PlatformPhysicsOp.(trans.={0})".format(self._translation) return "PlatformPhysicsOp.(trans.={0})".format(self._translation)

View file

@ -6,9 +6,9 @@ from UM.Operations.Operation import Operation
from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator
## Simple operation to set the buildplate number of a scenenode. ## Simple operation to set the buildplate number of a scenenode.
class SetBuildPlateNumberOperation(Operation): class SetBuildPlateNumberOperation(Operation):
def __init__(self, node: SceneNode, build_plate_nr: int) -> None: def __init__(self, node: SceneNode, build_plate_nr: int) -> None:
super().__init__() super().__init__()
self._node = node self._node = node
@ -16,11 +16,11 @@ class SetBuildPlateNumberOperation(Operation):
self._previous_build_plate_nr = None self._previous_build_plate_nr = None
self._decorator_added = False self._decorator_added = False
def undo(self): def undo(self) -> None:
if self._previous_build_plate_nr: if self._previous_build_plate_nr:
self._node.callDecoration("setBuildPlateNumber", self._previous_build_plate_nr) self._node.callDecoration("setBuildPlateNumber", self._previous_build_plate_nr)
def redo(self): def redo(self) -> None:
stack = self._node.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway. stack = self._node.callDecoration("getStack") #Don't try to get the active extruder since it may be None anyway.
if not stack: if not stack:
self._node.addDecorator(SettingOverrideDecorator()) self._node.addDecorator(SettingOverrideDecorator())

View file

@ -1,36 +1,37 @@
# Copyright (c) 2016 Ultimaker B.V. # Copyright (c) 2016 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher. # Uranium is released under the terms of the LGPLv3 or higher.
from typing import Optional
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
from UM.Operations import Operation from UM.Operations import Operation
from UM.Math.Vector import Vector from UM.Math.Vector import Vector
## An operation that parents a scene node to another scene node.
## An operation that parents a scene node to another scene node.
class SetParentOperation(Operation.Operation): class SetParentOperation(Operation.Operation):
## Initialises this SetParentOperation. ## Initialises this SetParentOperation.
# #
# \param node The node which will be reparented. # \param node The node which will be reparented.
# \param parent_node The node which will be the parent. # \param parent_node The node which will be the parent.
def __init__(self, node, parent_node): def __init__(self, node: SceneNode, parent_node: Optional[SceneNode]):
super().__init__() super().__init__()
self._node = node self._node = node
self._parent = parent_node self._parent = parent_node
self._old_parent = node.getParent() # To restore the previous parent in case of an undo. self._old_parent = node.getParent() # To restore the previous parent in case of an undo.
## Undoes the set-parent operation, restoring the old parent. ## Undoes the set-parent operation, restoring the old parent.
def undo(self): def undo(self) -> None:
self._set_parent(self._old_parent) self._set_parent(self._old_parent)
## Re-applies the set-parent operation. ## Re-applies the set-parent operation.
def redo(self): def redo(self) -> None:
self._set_parent(self._parent) self._set_parent(self._parent)
## Sets the parent of the node while applying transformations to the world-transform of the node stays the same. ## Sets the parent of the node while applying transformations to the world-transform of the node stays the same.
# #
# \param new_parent The new parent. Note: this argument can be None, which would hide the node from the scene. # \param new_parent The new parent. Note: this argument can be None, which would hide the node from the scene.
def _set_parent(self, new_parent): def _set_parent(self, new_parent: Optional[SceneNode]) -> None:
if new_parent: if new_parent:
current_parent = self._node.getParent() current_parent = self._node.getParent()
if current_parent: if current_parent:
@ -59,5 +60,5 @@ class SetParentOperation(Operation.Operation):
## Returns a programmer-readable representation of this operation. ## Returns a programmer-readable representation of this operation.
# #
# \return A programmer-readable representation of this operation. # \return A programmer-readable representation of this operation.
def __repr__(self): def __repr__(self) -> str:
return "SetParentOperation(node = {0}, parent_node={1})".format(self._node, self._parent) return "SetParentOperation(node = {0}, parent_node={1})".format(self._node, self._parent)

View file

@ -161,7 +161,7 @@ class PrintJobOutputModel(QObject):
self._time_elapsed = new_time_elapsed self._time_elapsed = new_time_elapsed
self.timeElapsedChanged.emit() self.timeElapsedChanged.emit()
def updateState(self, new_state): def updateState(self, new_state: str) -> None:
if self._state != new_state: if self._state != new_state:
self._state = new_state self._state = new_state
self.stateChanged.emit() self.stateChanged.emit()

View file

@ -43,7 +43,7 @@ class MachineActionManager(QObject):
# Dict of all actions that need to be done when first added by definition ID # Dict of all actions that need to be done when first added by definition ID
self._first_start_actions = {} # type: Dict[str, List[MachineAction]] self._first_start_actions = {} # type: Dict[str, List[MachineAction]]
def initialize(self): def initialize(self) -> None:
# Add machine_action as plugin type # Add machine_action as plugin type
PluginRegistry.addType("machine_action", self.addMachineAction) PluginRegistry.addType("machine_action", self.addMachineAction)