146 lines
4.7 KiB
Python
146 lines
4.7 KiB
Python
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())
|
|
now = round(time(), 1)
|
|
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)
|
|
time_diff = round(time() - project_start_time - delay_time, 1)
|
|
return self.compareWith(self.comparsion, time_diff, round(int(self._value), 1))
|
|
|
|
def after_task_run(self, **kwargs):
|
|
# print('relative_time_from_task', kwargs['task_start_time'],kwargs['delay_time'])
|
|
if len(kwargs['task_start_time']) == 0:
|
|
return False
|
|
task = kwargs['self_task']
|
|
running_task = kwargs['running_task']
|
|
task_start_time = kwargs['task_start_time'][-1]
|
|
delay_time = kwargs['delay_time']
|
|
|
|
time_diff = round(time() - task_start_time - delay_time, 1)
|
|
# print('real_diff', time() - task_start_time - delay_time)
|
|
# print(task.name, task.uuid, time_diff, round(int(self._value), 1), running_task.name, running_task.uuid)
|
|
# if round(int(self._value), 1) == 0 and time_diff == 0.1:
|
|
# return True
|
|
if task.uuid != running_task.uuid:
|
|
return False
|
|
return self.compareWith('bigger', time_diff, round(int(self._value), 1))
|
|
# return self.compareWith(self.comparsion, time_diff, round(int(self._value), 1))
|
|
|
|
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 previous_task_done(self, **kwargs):
|
|
running_task = kwargs['running_task']
|
|
self_task = kwargs['self_task']
|
|
# if running_task != None and self_task != None:
|
|
# print('\nprevious_task_done: ', running_task.status, ' ', self._active)
|
|
if running_task != self_task:
|
|
if running_task == None:
|
|
return True
|
|
if running_task.status == 2 and self._active == False:
|
|
# self._active = True
|
|
return True
|
|
return False
|
|
|
|
def until_button_trigger(self, **kwargs):
|
|
running_task = kwargs['running_task']
|
|
if running_task != None:
|
|
if running_task.button_trigger == True:
|
|
running_task.button_trigger = False
|
|
return True
|
|
return False
|
|
|
|
""" def cycle(self, **kwargs):
|
|
running_task = kwargs['running_task']
|
|
self_task = kwargs['self_task']
|
|
if running_task != self_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)
|
|
|
|
def as_json(self):
|
|
return {
|
|
'id': self._id,
|
|
'type': self._type,
|
|
'comparsion': self._comparsion,
|
|
'value': self._value,
|
|
'active': self._active
|
|
}
|