mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-09 17:07:43 +01:00
Improved handling of missing or corrupt step_data and fermenterstep_data files at startup
This commit is contained in:
parent
9e50b790e0
commit
366d6cbe91
4 changed files with 50 additions and 18 deletions
|
@ -1,3 +1,3 @@
|
||||||
__version__ = "4.1.0.rc5"
|
__version__ = "4.1.0.rc6"
|
||||||
__codename__ = "Groundhog Day"
|
__codename__ = "Groundhog Day"
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,8 @@ class ConfigFolder:
|
||||||
['actor.json', 'file'],
|
['actor.json', 'file'],
|
||||||
['sensor.json', 'file'],
|
['sensor.json', 'file'],
|
||||||
['kettle.json', 'file'],
|
['kettle.json', 'file'],
|
||||||
['fermenter_data.json', 'file'],
|
#['fermenter_data.json', 'file'], created by fermentation_controller @ start if not available
|
||||||
['step_data.json', 'file'],
|
#['step_data.json', 'file'], created by step_controller @ start if not available
|
||||||
['config.json', 'file'],
|
['config.json', 'file'],
|
||||||
['craftbeerpi.service', 'file'],
|
['craftbeerpi.service', 'file'],
|
||||||
['chromium.desktop', 'file'],
|
['chromium.desktop', 'file'],
|
||||||
|
|
|
@ -36,7 +36,7 @@ class FermentationController:
|
||||||
|
|
||||||
def check_fermenter_file(self):
|
def check_fermenter_file(self):
|
||||||
if os.path.exists(self.cbpi.config_folder.get_file_path("fermenter_data.json")) is False:
|
if os.path.exists(self.cbpi.config_folder.get_file_path("fermenter_data.json")) is False:
|
||||||
logging.info("INIT fermenter_data.json file")
|
logging.warning("Missing fermenter_data.json file. INIT empty file")
|
||||||
data = {
|
data = {
|
||||||
"data": [
|
"data": [
|
||||||
]
|
]
|
||||||
|
@ -71,11 +71,23 @@ class FermentationController:
|
||||||
|
|
||||||
|
|
||||||
async def load(self):
|
async def load(self):
|
||||||
with open(self.path) as json_file:
|
try:
|
||||||
data = json.load(json_file)
|
with open(self.path) as json_file:
|
||||||
|
data = json.load(json_file)
|
||||||
|
|
||||||
|
for i in data["data"]:
|
||||||
|
self.data.append(self._create(i))
|
||||||
|
except:
|
||||||
|
logging.warning("Invalid fermenter_data.json file - Creating empty file")
|
||||||
|
os.remove(self.path)
|
||||||
|
data = {
|
||||||
|
"data": [
|
||||||
|
]
|
||||||
|
}
|
||||||
|
destfile = self.cbpi.config_folder.get_file_path("fermenter_data.json")
|
||||||
|
json.dump(data,open(destfile,'w'),indent=4, sort_keys=True)
|
||||||
for i in data["data"]:
|
for i in data["data"]:
|
||||||
self.data.append(self._create(i))
|
self.data.append(self._create(i))
|
||||||
|
|
||||||
def _create_step(self, fermenter, item):
|
def _create_step(self, fermenter, item):
|
||||||
id = item.get("id")
|
id = item.get("id")
|
||||||
|
|
|
@ -6,6 +6,7 @@ import yaml
|
||||||
import logging
|
import logging
|
||||||
import os.path
|
import os.path
|
||||||
from os import listdir
|
from os import listdir
|
||||||
|
import os
|
||||||
from os.path import isfile, join
|
from os.path import isfile, join
|
||||||
import shortuuid
|
import shortuuid
|
||||||
from cbpi.api.dataclasses import NotificationAction, Props, Step
|
from cbpi.api.dataclasses import NotificationAction, Props, Step
|
||||||
|
@ -54,23 +55,42 @@ class StepController:
|
||||||
|
|
||||||
# create file if not exists
|
# create file if not exists
|
||||||
if os.path.exists(self.path) is False:
|
if os.path.exists(self.path) is False:
|
||||||
|
logging.warning("Missing step_data.json file. INIT empty file")
|
||||||
with open(self.path, "w") as file:
|
with open(self.path, "w") as file:
|
||||||
json.dump(dict(basic={}, steps=[]), file, indent=4, sort_keys=True)
|
json.dump(dict(basic={}, steps=[]), file, indent=4, sort_keys=True)
|
||||||
|
|
||||||
#load from json file
|
#load from json file
|
||||||
with open(self.path) as json_file:
|
try:
|
||||||
data = json.load(json_file)
|
with open(self.path) as json_file:
|
||||||
self.basic_data = data["basic"]
|
data = json.load(json_file)
|
||||||
self.profile = data["steps"]
|
self.basic_data = data["basic"]
|
||||||
|
self.profile = data["steps"]
|
||||||
|
|
||||||
|
# Start step after start up
|
||||||
|
self.profile = list(map(lambda item: self.create(item), self.profile))
|
||||||
|
if startActive is True:
|
||||||
|
active_step = self.find_by_status("A")
|
||||||
|
if active_step is not None:
|
||||||
|
asyncio.get_event_loop().create_task(self.start_step(active_step))
|
||||||
|
#self._loop.create_task(self.start_step(active_step))
|
||||||
|
except:
|
||||||
|
logging.warning("Invalid step_data.json file - Creating empty file")
|
||||||
|
os.remove(self.path)
|
||||||
|
with open(self.path, "w") as file:
|
||||||
|
json.dump(dict(basic={"name": ""}, steps=[]), file, indent=4, sort_keys=True)
|
||||||
|
|
||||||
|
with open(self.path) as json_file:
|
||||||
|
data = json.load(json_file)
|
||||||
|
self.basic_data = data["basic"]
|
||||||
|
self.profile = data["steps"]
|
||||||
|
|
||||||
# Start step after start up
|
# Start step after start up
|
||||||
self.profile = list(map(lambda item: self.create(item), self.profile))
|
self.profile = list(map(lambda item: self.create(item), self.profile))
|
||||||
if startActive is True:
|
if startActive is True:
|
||||||
active_step = self.find_by_status("A")
|
active_step = self.find_by_status("A")
|
||||||
if active_step is not None:
|
if active_step is not None:
|
||||||
asyncio.get_event_loop().create_task(self.start_step(active_step))
|
asyncio.get_event_loop().create_task(self.start_step(active_step))
|
||||||
#self._loop.create_task(self.start_step(active_step))
|
#self._loop.create_task(self.start_step(active_step))
|
||||||
|
|
||||||
async def add(self, item: Step):
|
async def add(self, item: Step):
|
||||||
logging.debug("Add step")
|
logging.debug("Add step")
|
||||||
|
|
Loading…
Reference in a new issue