def dumpAllMachinesDefaultSettings(self, output_dir: str) -> None: yaml.add_representer(OrderedDict, represent_ordereddict) # Make sure the output directory exists os.makedirs(output_dir, mode=0o775, exist_ok=True) container_registry = self._application.getContainerRegistry() machine_manager = self._application.getMachineManager() machine_definition_metadata_list = container_registry.findDefinitionContainersMetadata( type="machine") machine_definition_metadata_list = sorted( machine_definition_metadata_list, key=lambda x: x["id"]) for machine_def_metadata in machine_definition_metadata_list: machine_def_id = machine_def_metadata["id"] machine_name = "{}_1".format(machine_def_metadata["name"]) file_name = os.path.join(output_dir, "{}.yaml".format(machine_def_id)) Logger.log("i", "Creating machine [%s] ...", machine_def_id) global_stack = CuraStackBuilder.createMachine( machine_name, machine_def_id) # Some resolve functions depends on the active machine, so this machine needs to be activated first. machine_manager.setActiveMachine(global_stack.getId()) self.dumpGlobalStack(global_stack, file_name) Logger.log("i", "All machines processed, Exiting Cura ...") sys.exit(0)
def _create_machine(self, device_id: str) -> None: """Creates a machine. Called when user adds a discovered machine. Args: device_id: device identifier. """ Logger.log('d', 'Creating machine with device id %s.', device_id) device = cast(MPSM2NetworkedPrinterOutputDevice, self._discovered_devices.get(device_id)) if device is None: return machine_manager = CuraApplication.getInstance().getMachineManager() machine = machine_manager.getMachine( 'monoprice_select_mini_v2', {_METADATA_MPSM2_KEY: device_id}) if machine is None: new_machine = CuraStackBuilder.createMachine( device.name, device.printerType) if not new_machine: Logger.log('e', 'Failed to create a new machine.') return new_machine.setMetaDataEntry('group_name', device.name) new_machine.setMetaDataEntry(_METADATA_MPSM2_KEY, device.key) CuraApplication.getInstance().getMachineManager().setActiveMachine( new_machine.getId()) _connect_to_output_device(device, new_machine) self._create_heartbeat_thread(device.ipAddress)
def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, quality_changes_container): variant_manager = MagicMock(name = "Variant Manager") quality_manager = MagicMock(name = "Quality Manager") global_variant_node = MagicMock( name = "global variant node") global_variant_node.getContainer = MagicMock(return_value = global_variant) variant_manager.getDefaultVariantNode = MagicMock(return_value = global_variant_node) quality_group = QualityGroup(name = "zomg", quality_type = "normal") quality_group.node_for_global = MagicMock(name = "Node for global") quality_group.node_for_global.getContainer = MagicMock(return_value = quality_container) quality_manager.getQualityGroups = MagicMock(return_value = {"normal": quality_group}) application.getContainerRegistry = MagicMock(return_value=container_registry) application.getVariantManager = MagicMock(return_value = variant_manager) application.getQualityManager = MagicMock(return_value = quality_manager) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_quality_changes_container = quality_changes_container metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def test_createMachineWithUnknownDefinition(application, container_registry): application.getContainerRegistry = MagicMock( return_value=container_registry) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): with patch( "UM.ConfigurationErrorMessage.ConfigurationErrorMessage.getInstance" ) as mocked_config_error: assert CuraStackBuilder.createMachine("Whatever", "NOPE") is None assert mocked_config_error.addFaultyContainers.called_with("NOPE")
def _createMachineFromDiscoveredDevice(self, key: str) -> None: device = self._remote_clusters[key] if not device: return # Create a new machine and activate it. # We do not use use MachineManager.addMachine here because we need to set the cluster ID before activating it. new_machine = CuraStackBuilder.createMachine(device.name, device.printerType) if not new_machine: Logger.log("e", "Failed creating a new machine") return new_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) CuraApplication.getInstance().getMachineManager().setActiveMachine(new_machine.getId()) self._connectToOutputDevice(device, new_machine)
def _createMachineFromDiscoveredDevice(self, key: str, activate: bool = True) -> None: device = self._remote_clusters[key] if not device: return # Create a new machine. # We do not use use MachineManager.addMachine here because we need to set the cluster ID before activating it. new_machine = CuraStackBuilder.createMachine(device.name, device.printerType) if not new_machine: Logger.log("e", "Failed creating a new machine") return self._setOutputDeviceMetadata(device, new_machine) if activate: CuraApplication.getInstance().getMachineManager().setActiveMachine(new_machine.getId())
def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, intent_container, quality_changes_container): variant_manager = MagicMock(name="Variant Manager") quality_manager = MagicMock(name="Quality Manager") global_variant_node = MagicMock(name="global variant node") global_variant_node.container = global_variant variant_manager.getDefaultVariantNode = MagicMock( return_value=global_variant_node) quality_group = QualityGroup(name="zomg", quality_type="normal") quality_group.node_for_global = MagicMock(name="Node for global") quality_group.node_for_global.container = quality_container quality_manager.getQualityGroups = MagicMock( return_value={"normal": quality_group}) application.getContainerRegistry = MagicMock( return_value=container_registry) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_intent_container = intent_container application.empty_quality_changes_container = quality_changes_container application.empty_variant_container = global_variant metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) quality_node = MagicMock() machine_node = MagicMock() machine_node.preferredGlobalQuality = MagicMock(return_value=quality_node) quality_node.container = quality_container # Patch out the creation of MachineNodes since that isn't under test (and would require quite a bit of extra setup) with patch("cura.Machines.ContainerTree.MachineNode", MagicMock(return_value=machine_node)): with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def _createMachineFromDiscoveredDevice(self, device_id: str) -> None: device = self._discovered_devices.get(device_id) if device is None: return # Create a new machine and activate it. # We do not use use MachineManager.addMachine here because we need to set the network key before activating it. # If we do not do this the auto-pairing with the cloud-equivalent device will not work. new_machine = CuraStackBuilder.createMachine(device.name, device.printerType) if not new_machine: Logger.log("e", "Failed creating a new machine") return new_machine.setMetaDataEntry(self.META_NETWORK_KEY, device.key) CuraApplication.getInstance().getMachineManager().setActiveMachine( new_machine.getId()) self._connectToOutputDevice(device, new_machine) self._showCloudFlowMessage(device)
def test_createMachine(application, container_registry, definition_container, global_variant, material_instance_container, quality_container, quality_changes_container): variant_manager = MagicMock(name="Variant Manager") quality_manager = MagicMock(name="Quality Manager") global_variant_node = MagicMock(name="global variant node") global_variant_node.getContainer = MagicMock(return_value=global_variant) variant_manager.getDefaultVariantNode = MagicMock( return_value=global_variant_node) quality_group = QualityGroup(name="zomg", quality_type="normal") quality_group.node_for_global = MagicMock(name="Node for global") quality_group.node_for_global.getContainer = MagicMock( return_value=quality_container) quality_manager.getQualityGroups = MagicMock( return_value={"normal": quality_group}) application.getContainerRegistry = MagicMock( return_value=container_registry) application.getVariantManager = MagicMock(return_value=variant_manager) application.getQualityManager = MagicMock(return_value=quality_manager) application.empty_material_container = material_instance_container application.empty_quality_container = quality_container application.empty_quality_changes_container = quality_changes_container metadata = definition_container.getMetaData() metadata["machine_extruder_trains"] = {} metadata["preferred_quality_type"] = "normal" container_registry.addContainer(definition_container) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): machine = CuraStackBuilder.createMachine("Whatever", "Test Definition") assert machine.quality == quality_container assert machine.definition == definition_container assert machine.variant == global_variant
def test_createMachineWithUnknownDefinition(application, container_registry): application.getContainerRegistry = MagicMock(return_value=container_registry) with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): with patch("UM.ConfigurationErrorMessage.ConfigurationErrorMessage.getInstance") as mocked_config_error: assert CuraStackBuilder.createMachine("Whatever", "NOPE") is None assert mocked_config_error.addFaultyContainers.called_with("NOPE")