Cura/cura/MachineActionManager.py
Jaime van Kessel 4beec2982e Fixed typo
CURA-1385
2016-06-17 15:23:15 +02:00

116 lines
4.8 KiB
Python

# Copyright (c) 2016 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher.
from UM.Logger import Logger
## Raised when trying to add an unknown machine action as a required action
class UnknownMachineAction(Exception):
pass
## Raised when trying to add a machine action that does not have an unique key.
class NotUniqueMachineAction(Exception):
pass
class MachineActionManager:
def __init__(self):
## Dict of all known machine actions
self._machine_actions = {}
## Dict of all required actions by machine reference.
self._required_actions = {}
## Dict of all supported actions by machine reference
self._supported_actions = {}
## Dict of all actions that need to be done when first added by machine reference.
self._first_start_actions = {}
## Add a required action to a machine
# Raises an exception when the action is not recognised.
def addRequiredAction(self, machine, action_key):
if action_key in self._machine_actions:
if machine in self._required_actions:
self._required_actions[machine] |= {self._machine_actions[action_key]}
else:
self._required_actions[machine] = {self._machine_actions[action_key]}
else:
raise UnknownMachineAction("Action %s, which is required for %s is not known." % (action_key, machine.getKey()))
## Add a supported action to a machine.
def addSupportedAction(self, machine, action_key):
if action_key in self._machine_actions:
if machine in self._supported_actions:
self._supported_actions[machine] |= {self._machine_actions[action_key]}
else:
self._supported_actions[machine] = {self._machine_actions[action_key]}
else:
Logger.log("W", "Unable to add %s to %s, as the action is not recognised", action_key, machine.getKey())
## Add an action to the first start list of a machine.
def addFirstStartAction(self, machine, action_key, index = None):
if action_key in self._machine_actions:
if machine in self._first_start_actions:
if index is not None:
self._first_start_actions[machine].insert(index, self._machine_actions[action_key])
else:
self._first_start_actions[machine].append(self._machine_actions[action_key])
else:
self._first_start_actions[machine] = [self._machine_actions[action_key]]
else:
Logger.log("W", "Unable to add %s to %s, as the action is not recognised", action_key, machine.getKey())
## Add a (unique) MachineAction
# if the Key of the action is not unique, an exception is raised.
def addMachineAction(self, action):
if action.getKey() not in self._machine_actions:
self._machine_actions[action.getKey()] = action
else:
raise NotUniqueMachineAction("MachineAction with key %s was already added. Actions must have unique keys.", action.getKey())
## Get all actions supported by given machine
# \param machine The machine you want the supported actions of
# \returns set of supported actions.
def getSupportedActions(self, machine):
if machine in self._supported_actions:
return self._supported_actions[machine]
else:
return set()
## Get all actions required by given machine
# \param machine The machine you want the required actions of
# \returns set of required actions.
def getRequiredActions(self, machine):
if machine in self._required_actions:
return self._required_actions[machine]
else:
return set()
## Get all actions that need to be performed upon first start of a given machine.
# Note that contrary to required / supported actions a list is returned (as it could be required to run the same
# action multiple times).
# \param machine The machine you want the first start actions of
# \returns List of actions.
def getFirstStartActions(self, machine):
if machine in self._first_start_actions:
return self._first_start_actions[machine]
else:
return []
## Remove Machine action from manager
# \param action to remove
def removeMachineAction(self, action):
try:
del self._machine_actions[action.getKey()]
except KeyError:
Logger.log("w", "Trying to remove MachineAction (%s) that was already removed", action.getKey())
## Get MachineAction by key
# \param key String of key to select
# \return Machine action if found, None otherwise
def getMachineAction(self, key):
if key in self._machine_actions:
return self._machine_actions[key]
else:
return None