first commit
commit
a98f68357c
|
|
@ -0,0 +1,2 @@
|
|||
.idea
|
||||
.venv
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
# Copyright (c) 20.09.25, 13:58. a.jurcenko@inproduct.de
|
||||
import enum
|
||||
|
||||
|
||||
class TimePeriod(enum.Enum):
|
||||
ONETIME = 0
|
||||
DAY = 1
|
||||
WEEK = 2
|
||||
MONTH = 3
|
||||
QUARTER = 4
|
||||
YEAR = 5
|
||||
WEEKDAY = 6
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# Copyright (c) 20.09.25, 15:06. a.jurcenko@inproduct.de
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
# 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)
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
anyio==4.8.0
|
||||
build==1.2.2.post1
|
||||
CacheControl==0.14.0
|
||||
certifi==2024.8.30
|
||||
cffi==1.16.0
|
||||
charset-normalizer==3.3.0
|
||||
cleo==2.1.0
|
||||
crashtest==0.4.1
|
||||
cryptography==41.0.4
|
||||
distlib==0.3.8
|
||||
dulwich==0.22.8
|
||||
et_xmlfile==2.0.0
|
||||
fastjsonschema==2.18.1
|
||||
filelock==3.16.1
|
||||
findpython==0.6.2
|
||||
h11==0.14.0
|
||||
httpcore==1.0.7
|
||||
httpx==0.28.1
|
||||
idna==3.4
|
||||
installer==0.7.0
|
||||
jaraco.classes==3.3.0
|
||||
jaraco.context==6.0.1
|
||||
jaraco.functools==4.1.0
|
||||
jeepney==0.8.0
|
||||
keyring==25.6.0
|
||||
more-itertools==10.1.0
|
||||
msgpack==1.0.7
|
||||
openpyxl==3.1.5
|
||||
pbs-installer==2025.2.12
|
||||
pipenv==2025.0.4
|
||||
pkginfo==1.12.0
|
||||
platformdirs==4.3.6
|
||||
poetry==2.1.4
|
||||
poetry-core==2.1.3
|
||||
pycparser==2.21
|
||||
pyproject_hooks==1.0.0
|
||||
PySide6==6.9.2
|
||||
PySide6_Addons==6.9.2
|
||||
PySide6_Essentials==6.9.2
|
||||
RapidFuzz==3.13.0
|
||||
requests==2.31.0
|
||||
requests-toolbelt==1.0.0
|
||||
SecretStorage==3.3.3
|
||||
shellingham==1.5.3
|
||||
shiboken6==6.9.2
|
||||
sniffio==1.3.1
|
||||
tomlkit==0.12.1
|
||||
trove-classifiers==2023.9.19
|
||||
typing_extensions==4.12.2
|
||||
urllib3==2.0.6
|
||||
virtualenv==20.32.0
|
||||
zstandard==0.23.0
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
# Copyright (c) 20.09.25, 14:01. a.jurcenko@inproduct.de
|
||||
import abc
|
||||
import subprocess
|
||||
import requests
|
||||
|
||||
class Task(abc.ABC):
|
||||
|
||||
def __init__(self, name=None, description=None, destination=None, arguments=None, on_success=None, on_failure=None):
|
||||
self._name = name
|
||||
self._description = description
|
||||
self._destination = destination
|
||||
self._arguments = arguments
|
||||
self._on_success = on_success
|
||||
self._on_failure = on_failure
|
||||
|
||||
|
||||
def get_name(self):
|
||||
return self._name
|
||||
|
||||
def get_description(self):
|
||||
return self._description
|
||||
|
||||
def get_destination(self):
|
||||
return self._destination
|
||||
|
||||
def get_arguments(self):
|
||||
return self._arguments
|
||||
|
||||
def get_on_success(self):
|
||||
return self._on_success
|
||||
|
||||
def get_on_failure(self):
|
||||
return self._on_failure
|
||||
|
||||
def set_name(self, name):
|
||||
self._name = name
|
||||
|
||||
def set_description(self, description):
|
||||
self._description = description
|
||||
|
||||
def set_destination(self, destination):
|
||||
self._destination = destination
|
||||
|
||||
def set_arguments(self, arguments):
|
||||
self._arguments = arguments
|
||||
|
||||
def set_on_success(self, on_success):
|
||||
self._on_success = on_success
|
||||
|
||||
def set_on_failure(self, on_failure):
|
||||
self._on_failure = on_failure
|
||||
|
||||
@abc.abstractmethod
|
||||
def execute(self):
|
||||
print(self._name)
|
||||
|
||||
|
||||
class ConsolePrintTask(Task):
|
||||
|
||||
def execute(self):
|
||||
print(self._name, 'success')
|
||||
|
||||
class SystemTask(Task):
|
||||
|
||||
def execute(self):
|
||||
super().execute()
|
||||
res = subprocess.run([self._destination, self._arguments], text=True)
|
||||
if res.returncode == 0:
|
||||
if self._on_success is not None:
|
||||
self._on_success()
|
||||
else:
|
||||
if self._on_failure is not None:
|
||||
self._on_failure()
|
||||
|
||||
|
||||
class GETTask(Task):
|
||||
#todo: HTTP Task mit möglichkeit schema -> get/post/put/head auszusuchen
|
||||
def execute(self):
|
||||
super().execute()
|
||||
res = requests.get(self._destination)
|
||||
if res.status_code == 200:
|
||||
if self._on_success is not None:
|
||||
self._on_success()
|
||||
else:
|
||||
if self._on_failure is not None:
|
||||
self._on_failure()
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Copyright (c) 20.09.25, 14:06. a.jurcenko@inproduct.de
|
||||
import datetime
|
||||
import time
|
||||
from task import SystemTask, GETTask, ConsolePrintTask
|
||||
from events import TimeEvent, DirectoryWatchEvent
|
||||
|
||||
#
|
||||
# t1 = SystemTask(name='test', destination="ls", arguments='-la')
|
||||
# t1.execute()
|
||||
#
|
||||
# t2 = SystemTask(name='pip', destination="python3", arguments='-m pip', on_success=lambda: print('sehr gut'), on_failure=lambda: print('schlecht'))
|
||||
# t2.execute()
|
||||
#
|
||||
# t3 = GETTask(name='get_inproduct', destination="http://google.de", on_success=lambda: print('sehr gut'), on_failure=lambda: print('schlecht'))
|
||||
#
|
||||
#
|
||||
# t4 = GETTask(name='get_google', destination="https://google.de", on_success=t3.execute, on_failure=lambda: print('schlecht'))
|
||||
# t4.execute()
|
||||
#
|
||||
# now = datetime.datetime.now()
|
||||
# now = now + datetime.timedelta(minutes=1)
|
||||
# te = TimeEvent('test_event', time=now, task=t1)
|
||||
#
|
||||
# while True:
|
||||
# te.check_conditions()
|
||||
|
||||
dwe = DirectoryWatchEvent(task=ConsolePrintTask(name='test'), directory='/home/alex/test')
|
||||
while True:
|
||||
dwe.check_conditions()
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# Copyright (c) 20.09.25, 16:22. a.jurcenko@inproduct.de
|
||||
import unittest
|
||||
from task import ConsolePrintTask
|
||||
from events import DirectoryWatchEvent
|
||||
|
||||
|
||||
class TestEvent(unittest.TestCase):
|
||||
|
||||
|
||||
def setUp(self):
|
||||
pass
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def test_task(self):
|
||||
dwe = DirectoryWatchEvent(task=ConsolePrintTask(name='test'), directory='/home/alex/test')
|
||||
while True:
|
||||
dwe.check_conditions()
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# Copyright (c) 20.09.25, 13:56. a.jurcenko@inproduct.de
|
||||
|
||||
import sys
|
||||
from PySide6.QtUiTools import QUiLoader
|
||||
from PySide6.QtWidgets import QApplication
|
||||
from PySide6.QtCore import QFile, QIODevice
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
|
||||
ui_file_name = "mainwindow.ui"
|
||||
ui_file = QFile(ui_file_name)
|
||||
if not ui_file.open(QIODevice.ReadOnly):
|
||||
print(f"Cannot open {ui_file_name}: {ui_file.errorString()}")
|
||||
sys.exit(-1)
|
||||
loader = QUiLoader()
|
||||
window = loader.load(ui_file)
|
||||
ui_file.close()
|
||||
if not window:
|
||||
print(loader.errorString())
|
||||
sys.exit(-1)
|
||||
window.show()
|
||||
|
||||
sys.exit(app.exec())
|
||||
Loading…
Reference in New Issue