from datetime import datetime from time import time class Condition(): def __init__(self, id, condition): self._id = id self._type = condition['type'] self._comparsion = condition['comparsion'] self._value = condition['value'] self._active = False @property def id(self): return self._id @property def type(self): return self._type @property def comparsion(self): return self._comparsion @property def value(self): return self._value @id.setter def id(self, new_id): self._id = new_id @type.setter def type(self, new_type): self._type = new_type @comparsion.setter def comparsion(self, new_comparsion): self._comparsion = new_comparsion @value.setter def value(self, new_value): self._value = new_value def compareWith(self, operator, x, y) -> bool: # print(operator, x, y) cases = { "equal": lambda a, b: a == b, "bigger": lambda a, b: a > b, "smaller": lambda a, b: a < b, } return cases[operator](x, y) def match_or_not(self, **kwargs): # print(self._type, self._comparsion, self._value) return getattr(self, self.type)(**kwargs) def absolute_time(self, **kwargs): now = int(time()) time_condition = round(self.datetime_to_timestamp(self.str_to_datetime(self._value))) return self.compareWith(self.comparsion, now, time_condition) def after_project_run(self, **kwargs): project_start_time = kwargs['project_start_time'] delay_time = kwargs['delay_time'] time_diff = int(time() - project_start_time - delay_time) return self.compareWith(self.comparsion, time_diff, int(self._value)) def after_task_run(self, **kwargs): # print('relative_time_from_task', kwargs,kwargs['task_start_time'],kwargs['delay_time']) if len(kwargs['task_start_time']) == 0: return False task_start_time = kwargs['task_start_time'][-1] delay_time = kwargs['delay_time'] time_diff = int(time() - task_start_time - delay_time) # print('time_diff', time_diff) return self.compareWith(self.comparsion, time_diff, int(self._value)) def device(self, **kwargs): print('device') def previous_task_done(self, **kwargs): running_task = kwargs['running_task'] if running_task.status == 2 and self._active == False: self._active = True return True return False def str_to_datetime(self, time_str): return datetime.strptime(time_str,'%Y-%m-%dT%H:%M') def datetime_to_timestamp(self, date): return datetime.timestamp(date)