Files
controller-wisetopdataserver/python/biopro/project/condition.py
T

96 lines
2.8 KiB
Python
Raw Normal View History

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:
# 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):
# 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
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']
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')
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)