import datetime from abc import ABC, abstractmethod import os from logger import Logger from typing import Tuple, List class Condition(ABC): def __init__(self, *args, **kwargs): self.args = args self.kwargs = kwargs @abstractmethod def execute(self, *args, **kwargs) -> Tuple[bool, List]: pass class IfFileExistsCondition(Condition): def execute(self, *args, **kwargs): path = None if len(self.args) > 0: path = self.args[0] entry = self.kwargs.get('entry') if not path: Logger.write_error(entry, 'Need a path') else: if os.path.exists(path): return True, path return False, None class IfDirectoryEmptyCondition(Condition): def execute(self, *args, **kwargs): path = None if len(self.args) > 0: path = self.args[0] entry = self.kwargs.get('entry') if not path: Logger.write_error(entry, 'Need a path') else: files = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] if files: return False, files return True, None class IfDirectoryNotEmptyCondition(Condition): def execute(self, *args, **kwargs): path = None if len(self.args) > 0: path = self.args[0] entry = self.kwargs.get('entry') if not path: Logger.write_error(entry, 'Need a path') else: files = [os.path.join(path, f) for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] if files: return True, files return False, None class GetCreationTimeCondition(Condition): def execute(self, *args, **kwargs): path = args[0] result = list() if isinstance(path, list): for p in path: time = datetime.datetime.fromtimestamp(os.path.getctime(p)) time = time.strftime("%Y.%m.%d %H:%M:%S") result.append(time) else: time = datetime.datetime.fromtimestamp(os.path.getctime(path)) time = time.strftime("%Y.%m.%d %H:%M:%S") result.append(time) return True, result class IfCreationTimeCondition(Condition): def execute(self, *args, **kwargs): s = self.args[0].split(' ', 1) if len(s) > 1: oper = s[0] time = s[1] search_time = datetime.datetime.strptime(time, "%Y.%m.%d %H:%M:%S") path = args[0] result = list() if isinstance(path, list): for p in path: time = datetime.datetime.fromtimestamp(os.path.getctime(p)) # time = time.strftime("%Y.%m.%d %H:%M:%S") if oper == '<' and time < search_time: result.append(p) elif oper == '=' and time == search_time: result.append(p) elif oper == '>' and time > search_time: result.append(p) else: time = datetime.datetime.fromtimestamp(os.path.getctime(path)) # time = time.strftime("%Y.%m.%d %H:%M:%S") if oper == '<' and time < search_time: result.append(path) elif oper == '=' and time == search_time: result.append(path) elif oper == '>' and time > search_time: result.append(path) return True, result conditions = { "IfFileExists": IfFileExistsCondition, "IfDirectoryEmpty": IfDirectoryEmptyCondition, "IfDirectoryNotEmpty": IfDirectoryNotEmptyCondition, "GetCreationTime": GetCreationTimeCondition, "IfCreationTime": IfCreationTimeCondition, }