mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-09 17:07:43 +01:00
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
|
|
import logging
|
|
import os.path
|
|
from os import listdir
|
|
from os.path import isfile, join
|
|
import json
|
|
import shortuuid
|
|
import yaml
|
|
from ..api.step import StepMove, StepResult, StepState
|
|
|
|
import re
|
|
|
|
class FermenterRecipeController:
|
|
|
|
|
|
def __init__(self, cbpi):
|
|
self.cbpi = cbpi
|
|
self.logger = logging.getLogger(__name__)
|
|
|
|
def urlify(self, s):
|
|
|
|
# Remove all non-word characters (everything except numbers and letters)
|
|
s = re.sub(r"[^\w\s]", '', s)
|
|
|
|
# Replace all runs of whitespace with a single dash
|
|
s = re.sub(r"\s+", '-', s)
|
|
|
|
return s
|
|
|
|
async def create(self, name):
|
|
id = shortuuid.uuid()
|
|
path = self.cbpi.config_folder.get_fermenter_recipe_by_id(id)
|
|
data = dict(basic=dict(name=name), steps=[])
|
|
with open(path, "w") as file:
|
|
yaml.dump(data, file)
|
|
return id
|
|
|
|
async def save(self, name, data):
|
|
path = self.cbpi.config_folder.get_fermenter_recipe_by_id(name)
|
|
logging.info(data)
|
|
with open(path, "w") as file:
|
|
yaml.dump(data, file, indent=4, sort_keys=True)
|
|
|
|
|
|
async def get_recipes(self):
|
|
fermenter_recipe_ids = self.cbpi.config_folder.get_all_fermenter_recipes()
|
|
|
|
result = []
|
|
for recipe_id in fermenter_recipe_ids:
|
|
|
|
with open(self.cbpi.config_folder.get_fermenter_recipe_by_id(recipe_id)) as file:
|
|
data = yaml.load(file, Loader=yaml.FullLoader)
|
|
dataset = data["basic"]
|
|
dataset["file"] = recipe_id
|
|
result.append(dataset)
|
|
logging.info(result)
|
|
return result
|
|
|
|
async def get_by_name(self, name):
|
|
recipe_path = self.cbpi.config_folder.get_fermenter_recipe_by_id(name)
|
|
with open(recipe_path) as file:
|
|
return yaml.load(file, Loader=yaml.FullLoader)
|
|
|
|
async def remove(self, name):
|
|
path = self.cbpi.config_folder.get_fermenter_recipe_by_id(name)
|
|
os.remove(path)
|
|
|
|
async def brew(self, recipeid, fermenterid, name):
|
|
recipe_path = self.cbpi.config_folder.get_fermenter_recipe_by_id(recipeid)
|
|
|
|
logging.info(recipe_path)
|
|
with open(recipe_path) as file:
|
|
data = yaml.load(file, Loader=yaml.FullLoader)
|
|
await self.cbpi.fermenter.load_recipe(data, fermenterid, name)
|
|
|
|
async def clone(self, id, new_name):
|
|
recipe_path = self.cbpi.config_folder.get_fermenter_recipe_by_id(id)
|
|
with open(recipe_path) as file:
|
|
data = yaml.load(file, Loader=yaml.FullLoader)
|
|
data["basic"]["name"] = new_name
|
|
new_id = shortuuid.uuid()
|
|
await self.save(new_id, data)
|
|
|
|
return new_id
|