Exemple #1
0
def test_deserializeRemovesWrongContainerClass(global_stack):
    global_stack._containers[cura.Settings.CuraContainerStack.
                             _ContainerIndexes.Quality] = DefinitionContainer(
                                 container_id="wrong class")
    global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes
                             .Definition] = DefinitionContainer(
                                 container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        global_stack.deserialize("")

    assert global_stack.quality == global_stack._empty_instance_container  #Replaced with empty.
def test_deserializeRemovesWrongContainerClass(extruder_stack):
    extruder_stack._containers[
        steslicer.Settings.SteSlicerContainerStack._ContainerIndexes.
        Quality] = DefinitionContainer(container_id="wrong class")
    extruder_stack._containers[
        steslicer.Settings.SteSlicerContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.quality == extruder_stack._empty_instance_container  #Replaced with empty.
def test_addContainer(container_registry):
    definition_container_0 = DefinitionContainer("a")
    assert definition_container_0.getMetaData(
    ) not in container_registry.findDefinitionContainersMetadata(
    )  # Sanity check.
    assert definition_container_0 not in container_registry.findDefinitionContainers(
    )
    container_registry.addContainer(definition_container_0)
    assert definition_container_0.getMetaData(
    ) in container_registry.findDefinitionContainersMetadata()
    assert definition_container_0 in container_registry.findDefinitionContainers(
    )

    # Add a second one of the same type.
    definition_container_1 = DefinitionContainer("b")
    assert definition_container_1.getMetaData(
    ) not in container_registry.findDefinitionContainersMetadata(
    )  # Sanity check.
    assert definition_container_1 not in container_registry.findDefinitionContainers(
    )  # Sanity check.
    container_registry.addContainer(definition_container_1)
    assert definition_container_1.getMetaData(
    ) in container_registry.findDefinitionContainersMetadata()
    assert definition_container_1 in container_registry.findDefinitionContainers(
    )
    assert definition_container_0.getMetaData(
    ) in container_registry.findDefinitionContainersMetadata()
    assert definition_container_0 in container_registry.findDefinitionContainers(
    )

    # Add a container with the same type and same ID.
    definition_container_1_clone = DefinitionContainer("b")
    container_registry.addContainer(definition_container_1_clone)
    #Since comparing metadata is a deep comparison, you'll find that the metadata of the clone got in there. But it's not, it's just exactly the same as the original metadata so it appears as if it's in there.
    assert definition_container_1_clone not in container_registry.findDefinitionContainers(
    )

    # For good measure, add a container with a different type too.
    instance_container_1 = InstanceContainer("a")
    assert instance_container_1.getMetaData(
    ) not in container_registry.findDefinitionContainersMetadata(
    )  # Sanity check.
    assert instance_container_1 not in container_registry.findDefinitionContainers(
    )
    container_registry.addContainer(instance_container_1)
    assert instance_container_1.getMetaData(
    ) not in container_registry.findDefinitionContainersMetadata()
    assert instance_container_1 not in container_registry.findDefinitionContainers(
    )
def test_serialize(container_stack):
    registry = ContainerRegistry.getInstance()  # All containers need to be registered in order to be recovered again after deserialising.

    # First test the empty container stack.
    _test_serialize_cycle(container_stack)

    # Case with one subcontainer.
    container = InstanceContainer(str(uuid.uuid4()))
    registry.addContainer(container)
    container_stack.addContainer(container)
    _test_serialize_cycle(container_stack)

    # Case with two subcontainers.
    container = InstanceContainer(str(uuid.uuid4()))
    registry.addContainer(container)
    container_stack.addContainer(container)  # Already had one, if all previous assertions were correct.
    _test_serialize_cycle(container_stack)

    # Case with all types of subcontainers.
    container = DefinitionContainer(str(uuid.uuid4()))
    registry.addContainer(container)
    container_stack.addContainer(container)
    container = ContainerStack(str(uuid.uuid4()))
    registry.addContainer(container)
    container_stack.addContainer(container)
    _test_serialize_cycle(container_stack)

    # With some metadata.
    container_stack.getMetaData()["foo"] = "bar"
    _test_serialize_cycle(container_stack)

    # With a changed name.
    container_stack.setName("Fred")
    _test_serialize_cycle(container_stack)

    # A name with special characters, to test the encoding.
    container_stack.setName("ルベン")
    _test_serialize_cycle(container_stack)

    # Just to bully the one who implements this, a name with special characters in JSON and CFG.
    container_stack.setName("=,\"")
    _test_serialize_cycle(container_stack)

    # A container that is not in the registry.
    container_stack.addContainer(DefinitionContainer(str(uuid.uuid4())))
    serialised = container_stack.serialize()
    container_stack = ContainerStack(str(uuid.uuid4())) # Completely fresh container stack.
    with pytest.raises(Exception):
        container_stack.deserialize(serialised)
Exemple #5
0
    def __init__(self):
        super().__init__()
        self._settings = None
        self._stack = None

        setting_data = self.getSettingData()
        self._stack = ContainerStack(stack_id = str(id(self)))
        self._stack.setDirty(False)  # This stack does not need to be saved.


        ## Check if the definition of this script already exists. If not, add it to the registry.
        if "key" in setting_data:
            definitions = ContainerRegistry.getInstance().findDefinitionContainers(id = setting_data["key"])
            if definitions:
                # Definition was found
                self._definition = definitions[0]
            else:
                self._definition = DefinitionContainer(setting_data["key"])
                self._definition.deserialize(json.dumps(setting_data))
                ContainerRegistry.getInstance().addContainer(self._definition)
        self._stack.addContainer(self._definition)
        self._instance = InstanceContainer(container_id="ScriptInstanceContainer")
        self._instance.setDefinition(self._definition.getId())
        self._instance.addMetaDataEntry("setting_version", self._definition.getMetaDataEntry("setting_version", default = 0))
        self._stack.addContainer(self._instance)
        self._stack.propertyChanged.connect(self._onPropertyChanged)

        ContainerRegistry.getInstance().addContainer(self._stack)
Exemple #6
0
 def findContainers(container_type=0, id=None):
     if id == "some_instance":
         return [UM.Settings.ContainerRegistry._EmptyInstanceContainer(id)]
     elif id == "some_definition":
         return [DefinitionContainer(container_id=id)]
     else:
         return []
Exemple #7
0
def test_deserializeRemovesWrongContainerClass(extruder_stack):
    """Tests whether a container with the wrong class gets removed when deserialising."""

    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Quality] = DefinitionContainer(container_id="wrong class")
    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.quality == extruder_stack._empty_instance_container  #Replaced with empty.
Exemple #8
0
def test_approximateMaterialDiameter(diameter, approximate_diameter,
                                     global_stack):
    global_stack.definition = DefinitionContainer(
        container_id="TestDefinition")
    global_stack.definition._metadata["material_diameter"] = str(diameter)
    assert float(
        global_stack.approximateMaterialDiameter) == approximate_diameter
Exemple #9
0
def test_containers_provider(
        container_provider: ContainerProvider,
        upgrade_manager: VersionUpgradeManager) -> ContainerProvider:
    my_folder = os.path.dirname(os.path.abspath(__file__))

    definition_ids = {
        "basic_definition", "children", "functions", "inherits",
        "metadata_definition", "multiple_settings", "single_setting"
    }
    for definition_id in definition_ids:
        container = DefinitionContainer(definition_id)
        container.deserialize(
            open(
                os.path.join(my_folder, "definitions",
                             definition_id + ".def.json")).read())
        container_provider._containers[definition_id] = container
        container_provider.addMetadata(container.getMetaData())

    instance_ids = {"basic_instance", "metadata_instance", "setting_values"}
    for instance_id in instance_ids:
        container = UM.Settings.InstanceContainer.InstanceContainer(
            instance_id)
        container.deserialize(
            open(
                os.path.join(my_folder, "instances",
                             instance_id + ".inst.cfg")).read())
        container_provider._containers[instance_id] = container
        container_provider.addMetadata(container.getMetaData())

    return container_provider
def test_removeContainer(container_registry):
    # Removing a container that isn't added shouldn't break
    container_registry.removeContainer("NotAContainerThatIsLoaded")

    test_container = DefinitionContainer("omgzomg")
    container_registry.addContainer(test_container)
    container_registry.removeContainer("omgzomg")
    assert not container_registry.isLoaded("omgzomg")
Exemple #11
0
def collectAllSettingIds():
    VersionUpgradeManager._VersionUpgradeManager__instance = VersionUpgradeManager(MagicMock())

    CuraApplication._initializeSettingDefinitions()

    definition_container = DefinitionContainer("whatever")
    with open(os.path.join(os.path.dirname(__file__), "..", "..", "resources", "definitions", "fdmprinter.def.json"), encoding = "utf-8") as data:
        definition_container.deserialize(data.read())
    return definition_container.getAllKeys()
def test_readOnly(container_registry):
    assert not container_registry.isReadOnly("NotAContainerThatIsLoaded")

    test_container = DefinitionContainer("omgzomg")
    container_registry.addContainer(test_container)

    mock_provider = MagicMock()
    mock_provider.isReadOnly = MagicMock(return_value=True)
    container_registry.source_provider = {"omgzomg": mock_provider}
    assert container_registry.isReadOnly("omgzomg")
def test_findDefinitionContainers(container_registry, data):
    for container in data["containers"]: # Fill the registry with mock containers.
        definition_container = DefinitionContainer(container["id"])
        for key, value in container.items(): # Copy data into metadata.
            definition_container.getMetaData()[key] = value
        container_registry.addContainer(definition_container)

    results = container_registry.findDefinitionContainers(**data["filter"]) # The actual function call we're testing.

    _verifyMetaDataMatches(results, data["result"])
Exemple #14
0
def test_getContainerFilePathByID(container_registry):
    # There is no provider and the container isn't even there.
    assert container_registry.getContainerFilePathById("NotAContainerThatIsLoaded") is None

    test_container = DefinitionContainer("omgzomg")
    container_registry.addContainer(test_container)

    mock_provider = MagicMock()
    mock_provider.getContainerFilePathById = MagicMock(return_value="")
    container_registry.source_provider = {"omgzomg": mock_provider}
    assert container_registry.getContainerFilePathById("omgzomg") == ""
def test_deserializeCompletesEmptyContainers(extruder_stack: cura.Settings.ExtruderStack):
    extruder_stack._containers = [DefinitionContainer(container_id = "definition")] #Set the internal state of this stack manually.

    with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert len(extruder_stack.getContainers()) == len(cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap) #Needs a slot for every type.
    for container_type_index in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap:
        if container_type_index == cura.Settings.CuraContainerStack._ContainerIndexes.Definition: #We're not checking the definition.
            continue
        assert extruder_stack.getContainer(container_type_index).getId() == "empty" #All others need to be empty.
Exemple #16
0
def test_deserializeCompletesEmptyContainers(global_stack):
    global_stack._containers = [DefinitionContainer(container_id = "definition"), global_stack.definitionChanges] #Set the internal state of this stack manually.

    with unittest.mock.patch("UM.Settings.ContainerStack.ContainerStack.deserialize", unittest.mock.MagicMock()): #Prevent calling super().deserialize.
        global_stack.deserialize("")

    assert len(global_stack.getContainers()) == len(cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap) #Needs a slot for every type.
    for container_type_index in cura.Settings.CuraContainerStack._ContainerIndexes.IndexTypeMap:
        if container_type_index in \
                (cura.Settings.CuraContainerStack._ContainerIndexes.Definition, cura.Settings.CuraContainerStack._ContainerIndexes.DefinitionChanges): #We're not checking the definition or definition_changes
            continue
        assert global_stack.getContainer(container_type_index) == empty_container #All others need to be empty.
def test_deserializeMoveDefinitionContainer(extruder_stack):
    extruder_stack._containers[
        steslicer.Settings.SteSlicerContainerStack.
        _ContainerIndexes.Material] = DefinitionContainer(
            container_id="some definition")  #Not in the correct spot.

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.material == empty_container
    assert extruder_stack.definition != empty_container
Exemple #18
0
def test_deserializeMoveDefinitionContainer(global_stack):
    global_stack._containers[
        cura.Settings.CuraContainerStack.
        _ContainerIndexes.Material] = DefinitionContainer(
            container_id="some definition")  #Not in the correct spot.

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        global_stack.deserialize("")

    assert global_stack.material == empty_container
    assert global_stack.definition != empty_container
Exemple #19
0
def test_approximateMaterialDiameter(diameter, approximate_diameter,
                                     global_stack):
    global_stack.definition = DefinitionContainer(
        container_id="TestDefinition")
    material_diameter = UM.Settings.SettingDefinition.SettingDefinition(
        key="material_diameter", container=global_stack.definition)
    material_diameter.addSupportedProperty(
        "value",
        UM.Settings.SettingDefinition.DefinitionPropertyType.Any,
        default=diameter)
    global_stack.definition.definitions.append(material_diameter)
    assert float(
        global_stack.approximateMaterialDiameter) == approximate_diameter
Exemple #20
0
def test_addContainer(container_registry):
    definition_container_0 = DefinitionContainer("a", {})
    assert definition_container_0 not in container_registry.findDefinitionContainers() # Sanity check.
    container_registry.addContainer(definition_container_0)
    assert definition_container_0 in container_registry.findDefinitionContainers()

    # Add a second one of the same type.
    definition_container_1 = DefinitionContainer("b", {})
    assert definition_container_1 not in container_registry.findDefinitionContainers() # Sanity check.
    container_registry.addContainer(definition_container_1)
    assert definition_container_1 in container_registry.findDefinitionContainers()
    assert definition_container_0 in container_registry.findDefinitionContainers()

    # Add a container with the same type and same ID.
    definition_container_1_clone = DefinitionContainer("b", {})
    container_registry.addContainer(definition_container_1_clone)
    assert definition_container_1_clone not in container_registry.findDefinitionContainers() # Didn't get added!

    # For good measure, add a container with a different type too.
    instance_container_1 = InstanceContainer("a")
    assert instance_container_1 not in container_registry.findDefinitionContainers() # Sanity check.
    container_registry.addContainer(instance_container_1)
    assert instance_container_1 not in container_registry.findDefinitionContainers()
def test_deserializeRemovesWrongInstanceContainer(extruder_stack):
    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Quality] = getInstanceContainer(container_type="wrong type")
    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.quality == extruder_stack._empty_instance_container  #Replaced with empty.
Exemple #22
0
def test_deserializeMoveDefinitionContainer(extruder_stack):
    """Tests whether a definition container in the wrong spot is moved into the correct spot by deserialising."""

    extruder_stack._containers[
        cura.Settings.CuraContainerStack.
        _ContainerIndexes.Material] = DefinitionContainer(
            container_id="some definition")  #Not in the correct spot.

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.material == empty_container
    assert extruder_stack.definition != empty_container
def test_deserializeMoveDefinitionContainer(extruder_stack):
    extruder_stack._containers[
        cura.Settings.CuraContainerStack.
        _ContainerIndexes.Material] = DefinitionContainer(
            container_id="some definition")  #Not in the correct spot.

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.material.getId() == "empty"
    assert extruder_stack.definition.getId() != "empty"

    UM.Settings.ContainerStack._containerRegistry = None
def test_deserializeMoveInstanceContainer(extruder_stack):
    extruder_stack._containers[
        cura.Settings.CuraContainerStack.
        _ContainerIndexes.Quality] = getInstanceContainer(
            container_type="material")  #Not in the correct spot.
    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.quality.getId() == "empty"
    assert extruder_stack.material.getId() != "empty"
def test_deserializeMoveInstanceContainer(global_stack):
    global_stack._containers[
        steslicer.Settings.SteSlicerContainerStack.
        _ContainerIndexes.Quality] = getInstanceContainer(
            container_type="material")  #Not in the correct spot.
    global_stack._containers[
        steslicer.Settings.SteSlicerContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        global_stack.deserialize("")

    assert global_stack.quality == empty_container
    assert global_stack.material != empty_container
Exemple #26
0
def test_getHasErrors(container_stack):
    definition_container = DefinitionContainer(str(uuid.uuid4()))
    container_stack.addContainer(definition_container)
    definition_container.getAllKeys = MagicMock(return_value={"test_key"})

    container = MagicMock()
    container_stack.addContainer(container)

    # We won't get any wrong validation states, so it shouldn't have errors.
    assert not container_stack.hasErrors()

    # Fake the property so it does return validation state
    container.getProperty = MagicMock(return_value=ValidatorState.MaximumError)
    assert container_stack.hasErrors()  # Now the container stack has errors!

    assert container_stack.getErrorKeys() == ["test_key"]
	def load_definitions(self):
		"""
		Load all the setting definitions into a custom definition container.

		This definition container also contains extra entries for the articles
		that are not settings.

		The result is stored in `self.definition_container`.
		"""
		if self.definition_container:
			return  # Already done earlier. Don't re-load.
		with open(os.path.join(os.path.dirname(__file__), "resources", "settings_guide_definitions.def.json")) as f:
			definitions_serialised = f.read()
		self.definition_container = DefinitionContainer("settings_guide_definitions")
		self.definition_container.deserialize(definitions_serialised)
		ContainerRegistry.getInstance().addContainer(self.definition_container)
def test_roundtrip_definition(tmpdir, process_count, loaded_container_registry):
    definition = loaded_container_registry.findDefinitionContainers(id = "multiple_settings")[0]

    temp_file = tmpdir.join("container_stack_test")

    mp_run(process_count, write_data, temp_file, definition)

    assert len(list(tmpdir.listdir())) == 1

    results = mp_run(process_count, read_data, temp_file)

    for result in results:
        deserialized_definition = DefinitionContainer("multiple_settings")
        deserialized_definition.deserialize(result)

        assert deserialized_definition.getName() == definition.getName()
        assert deserialized_definition.getMetaData() == definition.getMetaData()
Exemple #29
0
def test_deserializeMoveInstanceContainer(extruder_stack):
    """Tests whether an instance container with the wrong type is moved into the correct slot by deserialising."""

    extruder_stack._containers[
        cura.Settings.CuraContainerStack.
        _ContainerIndexes.Quality] = getInstanceContainer(
            container_type="material")  #Not in the correct spot.
    extruder_stack._containers[
        cura.Settings.CuraContainerStack._ContainerIndexes.
        Definition] = DefinitionContainer(container_id="some definition")

    with unittest.mock.patch(
            "UM.Settings.ContainerStack.ContainerStack.deserialize",
            unittest.mock.MagicMock()):  #Prevent calling super().deserialize.
        extruder_stack.deserialize("")

    assert extruder_stack.quality == empty_container
    assert extruder_stack.material != empty_container
Exemple #30
0
def createModel(definition="multiple_settings.def.json"):
    model = SettingDefinitionsModel()

    # Get a basic definition container
    uid = str(uuid.uuid4())
    definition_container = DefinitionContainer(uid)
    with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),
                           "definitions", definition),
              encoding="utf-8") as data:
        json = data.read()

    definition_container.deserialize(json)
    model._container = definition_container
    model.setShowAll(True)
    model.forceUpdate()
    model._updateVisibleRows()

    return model