launcher/events.py

64 lines
1.7 KiB
Python

# 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)