2022-02-07 20:27:30 +08:00
|
|
|
from io import StringIO
|
|
|
|
|
from json import loads as json_parse, dumps as _json_stringify
|
|
|
|
|
from typing import Dict, Optional, Any
|
|
|
|
|
import paho.mqtt.client as mqtt
|
|
|
|
|
from .project import Project
|
2022-02-25 20:54:58 +08:00
|
|
|
from biopro.device.manager import DeviceManager
|
2022-02-07 20:27:30 +08:00
|
|
|
|
|
|
|
|
def json_stringify(o: Any) -> str:
|
|
|
|
|
return _json_stringify(o, separators=(',', ':'))
|
|
|
|
|
|
|
|
|
|
class ProjectManager():
|
2022-09-30 10:55:20 +08:00
|
|
|
def __init__(self, device_manager: DeviceManager, mqtt_thread=None, log_verbose = None) :
|
2022-02-25 20:54:58 +08:00
|
|
|
self._project_list = []
|
|
|
|
|
self._mqtt_thread = mqtt_thread
|
|
|
|
|
self._device_manager = device_manager
|
2022-09-30 10:55:20 +08:00
|
|
|
self.log_verbose = log_verbose
|
2022-02-07 20:27:30 +08:00
|
|
|
|
|
|
|
|
def create(self, project):
|
2022-09-30 10:55:20 +08:00
|
|
|
new_project = Project(project, self._device_manager, self._mqtt_thread, self.log_verbose)
|
2022-02-25 20:54:58 +08:00
|
|
|
self._project_list.append(new_project)
|
2022-02-07 20:27:30 +08:00
|
|
|
return new_project
|
2022-04-16 10:50:37 +08:00
|
|
|
|
2022-02-07 20:27:30 +08:00
|
|
|
def remove(self, index):
|
2022-02-25 20:54:58 +08:00
|
|
|
self._project_list[index].stop()
|
|
|
|
|
del self._project_list[index]
|
2022-02-07 20:27:30 +08:00
|
|
|
|
2022-05-04 18:07:05 +08:00
|
|
|
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
|
2022-02-07 20:27:30 +08:00
|
|
|
|
2022-05-04 18:07:05 +08:00
|
|
|
def run_project(self, project):
|
2022-02-07 20:27:30 +08:00
|
|
|
project.start()
|
2022-03-02 18:13:02 +08:00
|
|
|
|
2022-05-04 18:07:05 +08:00
|
|
|
def stop_project(self, project):
|
|
|
|
|
_project = self.get(project)
|
|
|
|
|
_project.stop()
|
2022-09-06 16:28:38 +08:00
|
|
|
|
|
|
|
|
def set_project(self, project_uuid, content):
|
|
|
|
|
_project = self.get(project_uuid)
|
|
|
|
|
_project.set_content(content)
|
2022-09-30 10:55:20 +08:00
|
|
|
|
|
|
|
|
def set_project_cycle(self, project_uuid, index, content):
|
|
|
|
|
_project = self.get(project_uuid)
|
|
|
|
|
_project.set_cycle(index, content)
|