64 lines
1.7 KiB
Python
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) |