# Copyright (c) 20.09.25, 15:06. a.jurcenko@inproduct.de import abc import datetime import enum import os class EVENTPERIOD(enum.Enum): ONETIME = 0 CONTINUOUS = 1 class Event(abc.ABC): def __init__(self, name, description, task, period): self.name = name self.description = description self.task = task self.period = period self.active = True self.counter = 0 @abc.abstractmethod def check_conditions(self): pass class TimeEvent(Event): def __init__(self, name=None, description=None, task=None, period=EVENTPERIOD.ONETIME, time=None): super().__init__(name, description, task, period) self.time = time def check_conditions(self): if not self.active: return if datetime.datetime.now() > self.time: self.task.execute() self.counter += 1 if self.period == EVENTPERIOD.ONETIME and self.counter > 0: self.active = False class SystemEvent(Event): def __init__(self, name=None, description=None, task=None, period=EVENTPERIOD.ONETIME, time=None): super().__init__(name, description, task, period) def check_conditions(self): pass class DirectoryWatchEvent(SystemEvent): def __init__(self, name=None, description=None, task=None, period=EVENTPERIOD.CONTINUOUS, directory=None): super().__init__(name, description, task, period) self.directory = directory self.files_in_directory = os.listdir(self.directory) def check_conditions(self): files = os.listdir(self.directory) if sorted(files) != sorted(self.files_in_directory): self.task.execute() self.files_in_directory = os.listdir(self.directory)