From a38088bd058a56d963e5b1bad0d230379f7249b8 Mon Sep 17 00:00:00 2001 From: n07070 Date: Thu, 21 May 2026 02:33:12 +0200 Subject: [PATCH] Add task objects --- src/task.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/task.py diff --git a/src/task.py b/src/task.py new file mode 100644 index 0000000..84a255c --- /dev/null +++ b/src/task.py @@ -0,0 +1,88 @@ +# Here we define the types of tasks +# We are using Abstract Base Classes, +# like this we can define types of tasks ( text, images, ... ) +# that all work with the same basic options + +# The tasks are going to be injected into a Queue. +# It's a usefull way of storing information in our +# program, while making sure that things are indeed printed. +# It's also a way to prevent two concurrent connexions creating +# a access conflict on a single printer, like two people wanting +# to print at the same time. + +# We can also delay and store printing tasks until a printer becomes +# available if none is online. + +from abc import ABC, abstractmethod +## See https://docs.python.org/3/library/abc.html to learn more about this + +# from dataclasses import dataclass +from enum import Enum +import uuid + +## You can expand this if you want to take other types of tasks into account +class TaskType(Enum): + TEXT = "text" + IMAGE = "image" + CUT = "cut" + + +class PrintTask(ABC): + """ + A print task holds information about what we are looking to print. + """ + def __init__(self, task_type): + self.task_id = self._generate_id() + self.task_type = task_type + self.status = "pending" # pending, processing, completed, failed + + print("Created a new " + str(self.task_type) + " with ID " + self.task_id) + + @abstractmethod + def get_print_data(self): + """Return data formatted for printer""" + pass + + def _generate_id(self): + # Generate unique task ID + return str(uuid.uuid4()) + + +class TextTask(PrintTask): + """ + This tasks represents a texte content, and it's signature. + """ + def __init__(self, content, signature): + super().__init__(TaskType.TEXT) + self.content = content + self.signature = signature + + def get_print_data(self): + return { "txt": self.content, "sign": self.signature } + +class ImageTask(PrintTask): + """ + This tasks represents a image content ( in the form of it's path ), and it's signature. + """ + def __init__(self, image_path, signature, process): + super().__init__(TaskType.IMAGE) + self.image_path = image_path + self.signature = signature + self.process = process + + def get_print_data(self): + # Return image data in printer-compatible format + return { "img": self.image_path, "sign": self.signature, "process" : self.process } + +class CutTask(PrintTask): + """ + This class activates the cutter on the printer if it exists + """ + + def __init__(self): + super().__init__(TaskType.CUT) + + # There is no print data, + # the task existence in itself is indication of what to do + def get_print_data(self): + return None \ No newline at end of file