Mirrored the changes made to the models in Commons

This commit is contained in:
Marijn Dee 2018-12-20 16:32:00 +01:00
parent 1012eb7553
commit 403010aa90
6 changed files with 124 additions and 15 deletions

View file

@ -0,0 +1,13 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from .BaseCloudModel import BaseCloudModel
## Class representing a cluster printer
# Spec: https://api-staging.ultimaker.com/connect/v1/spec
class CloudClusterBuildPlate(BaseCloudModel):
## Create a new build plate
# \param type: The type of buildplate glass or aluminium
def __init__(self, type: str = "glass", **kwargs) -> None:
self.type = type
super().__init__(**kwargs)

View file

@ -10,7 +10,7 @@ from .BaseCloudModel import BaseCloudModel
## Class representing a cloud cluster printer configuration ## Class representing a cloud cluster printer configuration
# Spec: https://api-staging.ultimaker.com/connect/v1/spec # Spec: https://api-staging.ultimaker.com/connect/v1/spec
class CloudClusterPrinterConfiguration(BaseCloudModel): class CloudClusterPrintCoreConfiguration(BaseCloudModel):
## Creates a new cloud cluster printer configuration object ## Creates a new cloud cluster printer configuration object
# \param extruder_index: The position of the extruder on the machine as list index. Numbered from left to right. # \param extruder_index: The position of the extruder on the machine as list index. Numbered from left to right.
# \param material: The material of a configuration object in a cluster printer. May be in a dict or an object. # \param material: The material of a configuration object in a cluster printer. May be in a dict or an object.
@ -18,10 +18,9 @@ class CloudClusterPrinterConfiguration(BaseCloudModel):
# \param print_core_id: The type of print core inserted at this position, e.g. 'AA 0.4'. # \param print_core_id: The type of print core inserted at this position, e.g. 'AA 0.4'.
def __init__(self, extruder_index: int, def __init__(self, extruder_index: int,
material: Union[None, Dict[str, Any], CloudClusterPrinterConfigurationMaterial], material: Union[None, Dict[str, Any], CloudClusterPrinterConfigurationMaterial],
nozzle_diameter: Optional[str] = None, print_core_id: Optional[str] = None, **kwargs) -> None: print_core_id: Optional[str] = None, **kwargs) -> None:
self.extruder_index = extruder_index self.extruder_index = extruder_index
self.material = self.parseModel(CloudClusterPrinterConfigurationMaterial, material) if material else None self.material = self.parseModel(CloudClusterPrinterConfigurationMaterial, material) if material else None
self.nozzle_diameter = nozzle_diameter
self.print_core_id = print_core_id self.print_core_id = print_core_id
super().__init__(**kwargs) super().__init__(**kwargs)

View file

@ -0,0 +1,28 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional
from .BaseCloudModel import BaseCloudModel
## Model for the types of changes that are needed before a print job can start
# Spec: https://api-staging.ultimaker.com/connect/v1/spec
class CloudClusterPrintJobConfigurationChange(BaseCloudModel):
## Creates a new print job constraint.
# \param type_of_change: The type of configuration change, one of: "material", "print_core_change"
# \param index: The hotend slot or extruder index to change
# \param target_id: Target material guid or hotend id
# \param origin_id: Original/current material guid or hotend id
# \param target_name: Target material name or hotend id
# \param origin_name: Original/current material name or hotend id
def __init__(self, type_of_change: Optional[str] = None, index: Optional[int] = None,
target_id: Optional[str] = None,origin_id: Optional[str] = None,
target_name: Optional[str] = None,origin_name: Optional[str] = None,
**kwargs) -> None:
self.type_of_change = type_of_change
self.index = index
self.target_id = target_id
self.origin_id = origin_id
self.target_name = target_name
self.origin_name = origin_name
super().__init__(**kwargs)

View file

@ -0,0 +1,15 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from .BaseCloudModel import BaseCloudModel
## Class representing the reasons that prevent this job from being printed on the associated printer
# Spec: https://api-staging.ultimaker.com/connect/v1/spec
class CloudClusterPrintJobImpediment(BaseCloudModel):
## Creates a new print job constraint.
# \param translation_key: A string indicating a reason the print cannot be printed, such as 'does_not_fit_in_build_volume'
# \param severity: A number indicating the severity of the problem, with higher being more severe
def __init__(self, translation_key: str, severity: int, **kwargs) -> None:
self.translation_key = translation_key
self.severity = severity
super().__init__(**kwargs)

View file

@ -4,11 +4,14 @@ from typing import List, Optional, Union, Dict, Any
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from plugins.UM3NetworkPrinting.src.Cloud.CloudOutputController import CloudOutputController from plugins.UM3NetworkPrinting.src.Cloud.CloudOutputController import CloudOutputController
from .CloudClusterPrinterConfiguration import CloudClusterPrinterConfiguration from src.ConfigurationChangeModel import ConfigurationChangeModel
from .CloudClusterBuildPlate import CloudClusterBuildPlate
from .CloudClusterPrintJobConfigurationChange import CloudClusterPrintJobConfigurationChange
from .CloudClusterPrintJobImpediment import CloudClusterPrintJobImpediment
from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration
from .CloudClusterPrintJobConstraint import CloudClusterPrintJobConstraints from .CloudClusterPrintJobConstraint import CloudClusterPrintJobConstraints
from .BaseCloudModel import BaseCloudModel from .BaseCloudModel import BaseCloudModel
## Class representing a print job ## Class representing a print job
from plugins.UM3NetworkPrinting.src.UM3PrintJobOutputModel import UM3PrintJobOutputModel from plugins.UM3NetworkPrinting.src.UM3PrintJobOutputModel import UM3PrintJobOutputModel
@ -34,15 +37,29 @@ class CloudClusterPrintJobStatus(BaseCloudModel):
# \param time_elapsed: The remaining printing time in seconds. # \param time_elapsed: The remaining printing time in seconds.
# \param time_total: The total printing time in seconds. # \param time_total: The total printing time in seconds.
# \param uuid: UUID of this print job. Should be used for identification purposes. # \param uuid: UUID of this print job. Should be used for identification purposes.
# \param deleted_at: The time when this print job was deleted.
# \param printed_on_uuid: UUID of the printer used to print this job.
# \param configuration_changes_required: List of configuration changes the printer this job is associated with
# needs to make in order to be able to print this job
# \param build_plate: The build plate (type) this job needs to be printed on.
# \param compatible_machine_families: Family names of machines suitable for this print job
# \param impediments_to_printing: A list of reasons that prevent this job from being printed on the associated
# printer
def __init__(self, created_at: str, force: bool, machine_variant: str, name: str, started: bool, status: str, def __init__(self, created_at: str, force: bool, machine_variant: str, name: str, started: bool, status: str,
time_total: int, uuid: str, time_total: int, uuid: str,
configuration: List[Union[Dict[str, Any], CloudClusterPrinterConfiguration]], configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]],
constraints: List[Union[Dict[str, Any], CloudClusterPrintJobConstraints]], constraints: List[Union[Dict[str, Any], CloudClusterPrintJobConstraints]],
last_seen: Optional[float] = None, network_error_count: Optional[int] = None, last_seen: Optional[float] = None, network_error_count: Optional[int] = None,
owner: Optional[str] = None, printer_uuid: Optional[str] = None, time_elapsed: Optional[int] = None, owner: Optional[str] = None, printer_uuid: Optional[str] = None, time_elapsed: Optional[int] = None,
assigned_to: Optional[str] = None, **kwargs) -> None: assigned_to: Optional[str] = None, deleted_at: Optional[str] = None,
printed_on_uuid: Optional[str] = None,
configuration_changes_required: List[
Union[Dict[str, Any], CloudClusterPrintJobConfigurationChange]] = None,
build_plate: Optional[str] = None, compatible_machine_families: List[str] = None,
impediments_to_printing: List[Union[Dict[str, Any], CloudClusterPrintJobImpediment]] = None,
**kwargs) -> None:
self.assigned_to = assigned_to self.assigned_to = assigned_to
self.configuration = self.parseModels(CloudClusterPrinterConfiguration, configuration) self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration)
self.constraints = self.parseModels(CloudClusterPrintJobConstraints, constraints) self.constraints = self.parseModels(CloudClusterPrintJobConstraints, constraints)
self.created_at = created_at self.created_at = created_at
self.force = force self.force = force
@ -57,6 +74,14 @@ class CloudClusterPrintJobStatus(BaseCloudModel):
self.time_elapsed = time_elapsed self.time_elapsed = time_elapsed
self.time_total = time_total self.time_total = time_total
self.uuid = uuid self.uuid = uuid
self.deleted_at = deleted_at
self.printed_on_uuid = printed_on_uuid
self.configuration_changes_required = self.parseModels(CloudClusterPrintJobConfigurationChange,
configuration_changes_required)
self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate)
self.compatible_machine_families = compatible_machine_families
self.impediments_to_printing = self.parseModels(CloudClusterPrintJobImpediment, impediments_to_printing)
super().__init__(**kwargs) super().__init__(**kwargs)
## Creates an UM3 print job output model based on this cloud cluster print job. ## Creates an UM3 print job output model based on this cloud cluster print job.
@ -77,11 +102,28 @@ class CloudClusterPrintJobStatus(BaseCloudModel):
## Updates an UM3 print job output model based on this cloud cluster print job. ## Updates an UM3 print job output model based on this cloud cluster print job.
# \param model: The model to update. # \param model: The model to update.
def updateOutputModel(self, model: UM3PrintJobOutputModel) -> None: def updateOutputModel(self, model: UM3PrintJobOutputModel) -> None:
# TODO: Add `compatible_machine_families` to the cloud, than add model.setCompatibleMachineFamilies()
# TODO: Add `impediments_to_printing` to the cloud, see ClusterUM3OutputDevice._updatePrintJob
# TODO: Use model.updateConfigurationChanges, see ClusterUM3OutputDevice#_createConfigurationChanges
model.updateConfiguration(self._createConfigurationModel()) model.updateConfiguration(self._createConfigurationModel())
model.updateTimeTotal(self.time_total) model.updateTimeTotal(self.time_total)
model.updateTimeElapsed(self.time_elapsed) model.updateTimeElapsed(self.time_elapsed)
model.updateOwner(self.owner) model.updateOwner(self.owner)
model.updateState(self.status) model.updateState(self.status)
model.setCompatibleMachineFamilies(self.compatible_machine_families)
model.updateTimeTotal(self.time_total)
model.updateTimeElapsed(self.time_elapsed)
model.updateOwner(self.owner)
status_set_by_impediment = False
for impediment in self.impediments_to_printing:
if impediment.severity == "UNFIXABLE": # TODO: impediment.severity is defined as int, this will not work, is there a translation?
status_set_by_impediment = True
model.updateState("error")
break
if not status_set_by_impediment:
model.updateState(self.status)
model.updateConfigurationChanges([ConfigurationChangeModel(type_of_change=change.type_of_change,
index=change.index,
target_name=change.target_name,
origin_name=change.origin_name)
for change in self.configuration_changes_required])

View file

@ -4,7 +4,8 @@ from typing import List, Union, Dict, Optional, Any
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
from .CloudClusterPrinterConfiguration import CloudClusterPrinterConfiguration from .CloudClusterBuildPlate import CloudClusterBuildPlate
from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration
from .BaseCloudModel import BaseCloudModel from .BaseCloudModel import BaseCloudModel
@ -22,12 +23,19 @@ class CloudClusterPrinterStatus(BaseCloudModel):
# \param uuid: The unique ID of the printer, also known as GUID. # \param uuid: The unique ID of the printer, also known as GUID.
# \param configuration: The active print core configurations of this printer. # \param configuration: The active print core configurations of this printer.
# \param reserved_by: A printer can be claimed by a specific print job. # \param reserved_by: A printer can be claimed by a specific print job.
# \param maintenance_required: Indicates if maintenance is necessary
# \param firmware_update_status: Whether the printer's firmware is up-to-date, value is one of: "up_to_date",
# "pending_update", "update_available", "update_in_progress", "update_failed", "update_impossible"
# \param latest_available_firmware: The version of the latest firmware that is available
# \param build_plate: The build plate that is on the printer
def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str, def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str,
status: str, unique_name: str, uuid: str, status: str, unique_name: str, uuid: str,
configuration: List[Union[Dict[str, Any], CloudClusterPrinterConfiguration]], configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]],
reserved_by: Optional[str] = None, **kwargs) -> None: reserved_by: Optional[str] = None, maintenance_required: Optional[bool] = None,
firmware_update_status: Optional[str] = None, latest_available_firmware: Optional[str] = None,
build_plate: Optional[str] = None, **kwargs) -> None:
self.configuration = self.parseModels(CloudClusterPrinterConfiguration, configuration) self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration)
self.enabled = enabled self.enabled = enabled
self.firmware_version = firmware_version self.firmware_version = firmware_version
self.friendly_name = friendly_name self.friendly_name = friendly_name
@ -37,6 +45,10 @@ class CloudClusterPrinterStatus(BaseCloudModel):
self.unique_name = unique_name self.unique_name = unique_name
self.uuid = uuid self.uuid = uuid
self.reserved_by = reserved_by self.reserved_by = reserved_by
self.maintenance_required = maintenance_required
self.firmware_update_status = firmware_update_status
self.latest_available_firmware = latest_available_firmware
self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate)
super().__init__(**kwargs) super().__init__(**kwargs)
## Creates a new output model. ## Creates a new output model.