2022-02-12 00:21:27 +08:00
|
|
|
from datetime import datetime
|
2022-02-17 20:35:36 +08:00
|
|
|
from time import time
|
2022-02-10 00:49:49 +08:00
|
|
|
|
2022-02-12 00:21:27 +08:00
|
|
|
class Condition():
|
|
|
|
|
def __init__(self, id, condition):
|
|
|
|
|
self._id = id
|
|
|
|
|
self._type = condition['type']
|
|
|
|
|
self._comparsion = condition['comparsion']
|
|
|
|
|
self._value = condition['value']
|
2022-04-16 10:50:37 +08:00
|
|
|
self._active = False
|
2022-02-14 19:19:54 +08:00
|
|
|
|
2022-02-10 00:49:49 +08:00
|
|
|
@property
|
2022-02-12 00:21:27 +08:00
|
|
|
def id(self):
|
|
|
|
|
return self._id
|
2022-04-08 11:17:07 +08:00
|
|
|
|
2022-02-12 00:21:27 +08:00
|
|
|
@property
|
2022-02-10 00:49:49 +08:00
|
|
|
def type(self):
|
|
|
|
|
return self._type
|
2022-04-08 11:17:07 +08:00
|
|
|
|
2022-02-10 00:49:49 +08:00
|
|
|
@property
|
|
|
|
|
def comparsion(self):
|
|
|
|
|
return self._comparsion
|
2022-04-08 11:17:07 +08:00
|
|
|
|
2022-02-10 00:49:49 +08:00
|
|
|
@property
|
|
|
|
|
def value(self):
|
|
|
|
|
return self._value
|
|
|
|
|
|
2022-04-16 10:50:37 +08:00
|
|
|
@id.setter
|
|
|
|
|
def id(self, new_id):
|
|
|
|
|
self._id = new_id
|
|
|
|
|
|
|
|
|
|
@type.setter
|
|
|
|
|
def type(self, new_type):
|
|
|
|
|
self._type = new_type
|
2022-02-10 00:49:49 +08:00
|
|
|
|
2022-04-16 10:50:37 +08:00
|
|
|
@comparsion.setter
|
|
|
|
|
def comparsion(self, new_comparsion):
|
|
|
|
|
self._comparsion = new_comparsion
|
2022-02-10 00:49:49 +08:00
|
|
|
|
2022-04-16 10:50:37 +08:00
|
|
|
@value.setter
|
|
|
|
|
def value(self, new_value):
|
|
|
|
|
self._value = new_value
|
2022-02-10 00:49:49 +08:00
|
|
|
|
2022-04-16 10:50:37 +08:00
|
|
|
def compareWith(self, operator, x, y) -> bool:
|
2022-04-18 01:52:52 +08:00
|
|
|
# print(operator, x, y)
|
2022-02-12 00:21:27 +08:00
|
|
|
cases = {
|
|
|
|
|
"equal": lambda a, b: a == b,
|
|
|
|
|
"bigger": lambda a, b: a > b,
|
|
|
|
|
"smaller": lambda a, b: a < b,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return cases[operator](x, y)
|
|
|
|
|
|
2022-02-25 20:54:58 +08:00
|
|
|
def match_or_not(self, **kwargs):
|
2022-04-18 01:52:52 +08:00
|
|
|
# print(self._type, self._comparsion, self._value)
|
2022-04-08 11:17:07 +08:00
|
|
|
return getattr(self, self.type)(**kwargs)
|
2022-02-12 00:21:27 +08:00
|
|
|
|
2022-02-17 20:35:36 +08:00
|
|
|
def absolute_time(self, **kwargs):
|
2022-04-16 10:50:37 +08:00
|
|
|
now = int(time())
|
|
|
|
|
time_condition = round(self.datetime_to_timestamp(self.str_to_datetime(self._value)))
|
2022-02-17 20:35:36 +08:00
|
|
|
|
2022-04-16 10:50:37 +08:00
|
|
|
return self.compareWith(self.comparsion, now, time_condition)
|
2022-02-17 20:35:36 +08:00
|
|
|
|
2022-04-18 01:52:52 +08:00
|
|
|
def after_project_run(self, **kwargs):
|
2022-04-08 11:17:07 +08:00
|
|
|
project_start_time = kwargs['project_start_time']
|
|
|
|
|
delay_time = kwargs['delay_time']
|
|
|
|
|
|
2022-04-18 01:52:52 +08:00
|
|
|
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)
|
2022-04-08 11:17:07 +08:00
|
|
|
return self.compareWith(self.comparsion, time_diff, int(self._value))
|
2022-02-17 20:35:36 +08:00
|
|
|
|
|
|
|
|
def device(self, **kwargs):
|
|
|
|
|
print('device')
|
|
|
|
|
|
2022-04-18 01:52:52 +08:00
|
|
|
def previous_task_done(self, **kwargs):
|
2022-04-16 10:50:37 +08:00
|
|
|
running_task = kwargs['running_task']
|
|
|
|
|
if running_task.status == 2 and self._active == False:
|
|
|
|
|
self._active = True
|
|
|
|
|
return True
|
|
|
|
|
return False
|
2022-02-17 20:35:36 +08:00
|
|
|
|
|
|
|
|
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)
|