Merge branch 'feature/get-running-project-flow' into rel/v1.6.1/cp_mode

This commit is contained in:
peterlu14
2022-05-06 10:39:51 +08:00
5 changed files with 62 additions and 23 deletions
+6 -3
View File
@@ -1578,10 +1578,13 @@ class ControlAPI(metaclass=Router):
raise NotImplementedError()
def run_project(self, project) -> bool:
print('create_project', project)
self._project_manager.create(project)
return False
raise NotImplementedError()
def get_running_project(self) -> bool:
raise NotImplementedError()
def stop_project(self, project) -> bool:
raise NotImplementedError()
# noinspection PyAbstractClass
class ControlClient(SocketClient, ControlAPI, metaclass=SocketClientMacro(ControlAPI)):
+27 -12
View File
@@ -29,16 +29,18 @@ class Project(threading.Thread):
self._end_time = None
self._id = None
self._uuid = uuid4()
self._uuid = str(uuid4())
self._name = None
self._desc = None
self._device = None
self._complete_device = []
self._status = None
self._status = 0
self._instruction_set = Instruction()
self._stop_flag = False
self._task_manager = None
self.setup_project(project)
self.setup_device(self._device)
@@ -49,6 +51,8 @@ class Project(threading.Thread):
if key == 'task':
self._task_manager = TaskManager(project['task'])
elif key == 'uuid':
pass
else:
setattr(self, key, value)
@@ -107,17 +111,17 @@ class Project(threading.Thread):
@property
def task_list(self):
return self.task_manager.task_list
return self._task_manager.export_task_list
@property
def mqtt_thread(self):
return self._mqtt_thread
def run(self):
self._status = 1
self._start_time = time()
self.mqtt_thread.broadcast_command('project:' + self._name + ' start_at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
self.mqtt_thread.broadcast_command('project:' + self._name + ' start at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
while not self._stop_flag :
# check running task first
delay_time = 0
@@ -165,7 +169,6 @@ class Project(threading.Thread):
# check project done then close project
if self.check_project_done() == True:
self.mqtt_thread.broadcast_command('project:project ' + str(self._name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
print('project stop at', datetime.now())
self.close()
@@ -176,9 +179,19 @@ class Project(threading.Thread):
# TODO
pass
def close(self):
def stop(self):
self._task_manager.running_task.stop()
self.mqtt_thread.broadcast_command('project:task ' + str(self._task_manager.running_task.name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
self._status = 2
self._end_time = time()
self._stop_flag = True
self.mqtt_thread.broadcast_command('project:project ' + str(self._name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
def close(self):
self._status = 2
self._end_time = time()
self._stop_flag = True
self.mqtt_thread.broadcast_command('project:project ' + str(self._name) + ' stop at ' + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
def check_project_done(self):
for task in self._task_manager.task_list:
@@ -191,19 +204,21 @@ class Project(threading.Thread):
# if no running task
if self._task_manager.running_task == None:
return False
device_list = self._task_manager.running_task.device
for device in device_list:
for device in self._task_manager.running_task.device:
if self._complete_device[device].status == 1:
return False
return True
def as_json(self):
return {
data = {
'id': self._id,
'name': self._name,
'uuid': self._uuid,
'desc': self._desc,
'status': self._status,
'device': self._device,
'task_list': self.task_list,
'task': self.task_list,
'running_task': self._task_manager.running_task.as_json()
}
return data
+11 -5
View File
@@ -23,11 +23,17 @@ class ProjectManager():
self._project_list[index].stop()
del self._project_list[index]
def get(self):
return self._project_list
def get(self, project_uuid = None):
if project_uuid == None:
return self._project_list
else:
for project in self._project_list:
if project.uuid == project_uuid:
return project
def run(self, project):
def run_project(self, project):
project.start()
def stop(self, project):
project.stop()
def stop_project(self, project):
_project = self.get(project)
_project.stop()
+4
View File
@@ -28,6 +28,10 @@ class TaskManager():
def task_list(self):
return self._task_list
@property
def export_task_list(self):
return [d.as_json() for d in self._task_list]
@property
def prev_task(self):
return self._prev_task
+14 -3
View File
@@ -1014,9 +1014,20 @@ class ControlServer(SocketServer, ControlServerAPI):
@logging_info
def run_project(self, project) -> bool:
project = self._project_manager.create(project)
self._project_manager.run(project)
return False
if project is not None:
project = self._project_manager.create(project)
self._project_manager.run_project(project)
return project.as_json()
@logging_info
def stop_project(self, project) -> bool:
if project is not None:
self._project_manager.stop_project(project)
return True
@logging_info
def get_running_project(self) -> bool:
return self._project_manager.get()
@logging_info
def device_internal_command(self, device: int, oper: str, value: Any) -> bool: