Initial Commit
commit
902768fb9c
|
|
@ -0,0 +1,70 @@
|
||||||
|
import abc
|
||||||
|
import os
|
||||||
|
from abc import ABC
|
||||||
|
from logger import Logger
|
||||||
|
|
||||||
|
|
||||||
|
class Action(ABC):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.args = args
|
||||||
|
self.kwargs = kwargs
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class LoggMessageAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
entry = self.kwargs.get('entry')
|
||||||
|
Logger.write_message(entry, self.args[0])
|
||||||
|
|
||||||
|
|
||||||
|
class StubAction(Action):
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ReadAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class MoveAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CompressAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class IsFileExistsAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
path = self.kwargs.get('path')
|
||||||
|
entry = self.kwargs.get('entry')
|
||||||
|
if not path:
|
||||||
|
Logger.write_error(entry, 'Need a path')
|
||||||
|
else:
|
||||||
|
return os.path.exists(path)
|
||||||
|
|
||||||
|
|
||||||
|
class IsDirectoryEmptyAction(Action):
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
path = self.kwargs.get('path')
|
||||||
|
entry = self.kwargs.get('entry')
|
||||||
|
if not path:
|
||||||
|
Logger.write_error(entry, 'Need a path')
|
||||||
|
else:
|
||||||
|
files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
|
||||||
|
if files:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
import os
|
||||||
|
from config import Config
|
||||||
|
from entry import Entry
|
||||||
|
from action import *
|
||||||
|
from logger import Logger
|
||||||
|
|
||||||
|
|
||||||
|
class App:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Logger.set_log_file('//testdata/log.txt')
|
||||||
|
self._config = Config()
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
self._config.read_config()
|
||||||
|
self._config.add_entry(Entry('myTest',
|
||||||
|
IsDirectoryEmptyAction(path='//emptydir', entry='myTest'),
|
||||||
|
LoggMessageAction('success', entry='myTest'),
|
||||||
|
LoggMessageAction('fail', entry='myTest')))
|
||||||
|
|
||||||
|
for entry in self._config:
|
||||||
|
result = entry.action.execute()
|
||||||
|
if result:
|
||||||
|
entry.success.execute()
|
||||||
|
else:
|
||||||
|
entry.fail.execute()
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
from entry import Entry
|
||||||
|
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._entries = []
|
||||||
|
|
||||||
|
def add_entry(self, entry: Entry):
|
||||||
|
self._entries.append(entry)
|
||||||
|
|
||||||
|
def get_next_entry(self):
|
||||||
|
return self._entries.pop()
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
self.get_next_entry()
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return iter(self._entries)
|
||||||
|
|
||||||
|
def read_config(self, *args, **kwargs):
|
||||||
|
with open('config.txt', 'r') as file:
|
||||||
|
for line in file:
|
||||||
|
self._create_entry(line)
|
||||||
|
|
||||||
|
def _create_entry(self, line):
|
||||||
|
splitts = line.split(';')
|
||||||
|
assert(len(splitts) == 4)
|
||||||
|
name = splitts[0]
|
||||||
|
action, act_param = splitts[1].strip().split(' ')
|
||||||
|
success, suc_param = splitts[2].strip().split(' ', 1)
|
||||||
|
fail, fail_param = splitts[3].strip().split(' ', 1)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
MyTest; IsDirectoryEmpty C:\Users\a.jurcenko\PycharmProjects\logreader\emptydir; LoggMessage Alles Gut; LoggMessage Alles Schlecht
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
from action import Action
|
||||||
|
|
||||||
|
|
||||||
|
class Entry:
|
||||||
|
|
||||||
|
def __init__(self, name: str, action: Action, success: Action, fail: Action):
|
||||||
|
self._name = name
|
||||||
|
self._action = action
|
||||||
|
self._success = success
|
||||||
|
self._fail = fail
|
||||||
|
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def action(self):
|
||||||
|
return self._action
|
||||||
|
|
||||||
|
@property
|
||||||
|
def success(self):
|
||||||
|
return self._success
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fail(self):
|
||||||
|
return self._fail
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
from enum import Enum
|
||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class LoggerStage(Enum):
|
||||||
|
MESSAGE = 1
|
||||||
|
WARNING = 2
|
||||||
|
ERROR = 3
|
||||||
|
|
||||||
|
|
||||||
|
class Logger:
|
||||||
|
|
||||||
|
path = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def set_log_file(cls, path):
|
||||||
|
cls.path = path
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def _write(cls, entry, msg, kind):
|
||||||
|
if not cls.path:
|
||||||
|
return
|
||||||
|
if not os.path.exists(path=cls.path):
|
||||||
|
os.makedirs(os.path.dirname(cls.path), exist_ok=True)
|
||||||
|
with open(cls.path, 'a') as file:
|
||||||
|
message = datetime.datetime.now().strftime('%Y.%m.%d %H:%M:%S') + ' ' + entry + ': ' + msg + ' ' + str(kind) + '\n'
|
||||||
|
file.write(message)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def write_message(cls, entry, message):
|
||||||
|
cls._write(entry, message, LoggerStage.MESSAGE)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def write_warning(cls, entry, warning):
|
||||||
|
cls._write(entry, warning, LoggerStage.WARNING)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def write_error(cls, entry, error):
|
||||||
|
cls._write(entry, error, LoggerStage.ERROR)
|
||||||
Loading…
Reference in New Issue