def _readMetadata(self) -> None:
        assert self._zipfile is not None

        for origin, relations_element in self._relations.items():
            for relationship in relations_element.iterfind(
                    "{http://schemas.openxmlformats.org/package/2006/relationships}Relationship"):
                if "Target" not in relationship.attrib or "Type" not in relationship.attrib:  # These two are required, and we actually need them here. Better ignore this one.
                    continue
                if relationship.attrib[
                    "Type"] != self._opc_metadata_relationship_type:  # Not interested in this one. It's not metadata that we recognise.
                    continue
                metadata_file = relationship.attrib["Target"]
                if metadata_file not in self._zipfile.namelist():  # The metadata file is unknown to us.
                    continue

                metadata = json.loads(self._zipfile.open(metadata_file).read().decode("utf-8"))
                if metadata_file == self._global_metadata_file:  # Store globals as if coming from root.
                    metadata_file = ""
                elif metadata_file.endswith(
                        ".json"):  # Metadata files should be named <filename.ext>.json, meaning that they are metadata about <filename.ext>.
                    metadata_file = metadata_file[:-len(".json")]
                self._readMetadataElement(metadata, metadata_file)

        if self._mode != OpenMode.WriteOnly and not self.getMetadata("/3D/model.gcode"):
            try:
                # Check if the G-code file actually exists in the package.
                self._zipfile.getinfo("/3D/model.gcode")
            except KeyError:
                return

            gcode_stream = self._zipfile.open("/3D/model.gcode")
            header_data = GCodeFile.parseHeader(gcode_stream, prefix="/3D/model.gcode/")
            self._metadata.update(header_data)
Exemplo n.º 2
0
    def testParseGenericParameter_HappyTrail(self) -> None:
        gcode = self.__minimal_griffin_header.format(";A.B.C:5")
        gcode_stream = io.BytesIO(str.encode(gcode))
        metadata = GCodeFile.parseHeader(gcode_stream)

        self._print(metadata)  # print if any assert fails
        self.assertEqual(metadata["a"]["b"]["c"], 5)
        self.assertEqual(metadata["generator"]["name"], "generator_foo")
        self.assertEqual(metadata["build_plate"]["initial_temperature"], 30)
        self.assertEqual(metadata["extruders"][1]["nozzle"]["diameter"], 1.5)
        self.assertEqual(metadata["print"]["time"], 11)
        self.assertEqual(metadata["time"], 11)  # This was the behavior of the old code.
Exemplo n.º 3
0
    def _readMetadata(self) -> None:
        super()._readMetadata()
        if self._mode != OpenMode.WriteOnly and not self.getMetadata(
                "/3D/model.gcode"):
            try:
                # Check if the G-code file actually exists in the package.
                self._zipfile.getinfo("/3D/model.gcode")
            except KeyError:
                return

            gcode_stream = self._zipfile.open("/3D/model.gcode")
            header_data = GCodeFile.parseHeader(gcode_stream,
                                                prefix="/3D/model.gcode/")
            self._metadata.update(header_data)
Exemplo n.º 4
0
    def testParseGenericParameter_NoValue(self) -> None:
        gcode = self.__minimal_griffin_header.format(";A.B.C:")
        gcode_stream = io.BytesIO(str.encode(gcode))
        metadata = GCodeFile.parseHeader(gcode_stream)

        self.assertEqual(metadata["a"]["b"]["c"], '')
Exemplo n.º 5
0
 def __parseWithInvalidHeaderException(self, gcode, text) -> None: 
     gcode_stream = io.BytesIO(str.encode(gcode))
     
     with self.assertRaises(InvalidHeaderException) as cm:
         metadata = GCodeFile.parseHeader(gcode_stream)
     self.assertTrue(text  in str(cm.exception))