12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # Copyright (c) 2021 Ultimaker B.V.
- # Cura is released under the terms of the LGPLv3 or higher.
- import io
- from typing import List, Optional, Union
- from UM.FileHandler.FileHandler import FileHandler
- from UM.FileHandler.FileWriter import FileWriter
- from UM.FileHandler.WriteFileJob import WriteFileJob
- from UM.Logger import Logger
- from UM.MimeTypeDatabase import MimeTypeDatabase
- from UM.OutputDevice import OutputDeviceError
- from UM.Scene.SceneNode import SceneNode
- class ExportFileJob(WriteFileJob):
- """Job that exports the build plate to the correct file format for the Digital Factory Library project."""
- def __init__(self, file_handler: FileHandler, nodes: List[SceneNode], job_name: str, extension: str) -> None:
- file_types = file_handler.getSupportedFileTypesWrite()
- if len(file_types) == 0:
- Logger.log("e", "There are no file types available to write with!")
- raise OutputDeviceError.WriteRequestFailedError("There are no file types available to write with!")
- mode = None
- file_writer = None
- for file_type in file_types:
- if file_type["extension"] == extension:
- file_writer = file_handler.getWriter(file_type["id"])
- mode = file_type.get("mode")
- super().__init__(file_writer, self.createStream(mode = mode), nodes, mode)
- # Determine the filename.
- self.setFileName("{}.{}".format(job_name, extension))
- def getOutput(self) -> bytes:
- """Get the job result as bytes as that is what we need to upload to the Digital Factory Library."""
- output = self.getStream().getvalue()
- if isinstance(output, str):
- output = output.encode("utf-8")
- return output
- def getMimeType(self) -> str:
- """Get the mime type of the selected export file type."""
- return MimeTypeDatabase.getMimeTypeForFile(self.getFileName()).name
- @staticmethod
- def createStream(mode) -> Union[io.BytesIO, io.StringIO]:
- """Creates the right kind of stream based on the preferred format."""
- if mode == FileWriter.OutputMode.TextMode:
- return io.StringIO()
- else:
- return io.BytesIO()
|