mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-13 01:37:51 -06:00
Mirrored the changes made to the models in Commons
This commit is contained in:
parent
1012eb7553
commit
403010aa90
6 changed files with 124 additions and 15 deletions
|
@ -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)
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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])
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue