From a1c593b11886941c1c842d4774e38bb124d6191f Mon Sep 17 00:00:00 2001 From: Aerex Date: Sun, 5 May 2019 16:06:33 -0500 Subject: [PATCH] feat: Added create a recipe command --- grocy/__init__.py | 17 +++++++---------- grocy/cli.py | 22 ++++++++++++++++++++-- grocy/models/recipe.py | 9 +++++++++ templates/recipe_add.yml | 6 ++++++ templates/{recipe.yml => recipe_edit.yml} | 0 5 files changed, 42 insertions(+), 12 deletions(-) create mode 100644 templates/recipe_add.yml rename templates/{recipe.yml => recipe_edit.yml} (100%) diff --git a/grocy/__init__.py b/grocy/__init__.py index cc96a1b..cd4897f 100644 --- a/grocy/__init__.py +++ b/grocy/__init__.py @@ -66,18 +66,15 @@ class RestService(object): return r.content - def post(self, path, payload): - api_url = self.api_url - - if self.api_url.endswith('/'): - api_url = api_url[1:] - - if path.startswith('/'): - url ='{0}{1}'.format(api_url, path) + def post(self, entity_name, entity): + if type(entity) is not dict: + json_payload = entity.toJSON() else: - url = '{0}/{1}'.format(api_url, path) + json_payload = entity - r = requests.post(url, data=json.dumps(payload), headers=self.headers) + url = RestService.COLLECTION_URL_TEMPLATE.format(api_url=self.api_url, entity=entity_name) + + r = requests.post(url, json=json.dumps(json_payload), headers=self.headers) #if r.raise_for_status(): # logger.error(r.raise_for_status()) diff --git a/grocy/cli.py b/grocy/cli.py index b00a3c2..f0790ef 100644 --- a/grocy/cli.py +++ b/grocy/cli.py @@ -55,7 +55,7 @@ def main(ctx): log_level = 'DEBUG' if 'level' not in log_cfg else log_cfg['level'] log_filename = 'log' if 'file_location' not in log_cfg else log_cfg['file_location'] logging.basicConfig(level=log_level, filename=log_filename) - cfg['logger'] = log_cfg + cfg['logger'] = logger __validate_token(cfg) ctx.ensure_object(dict) @@ -117,7 +117,7 @@ def edit(ctx, recipe_id): if recipe_id: recipe = Recipe(id=recipe_id, **cfg) recipe.get(include_products=True) - loaded_template = TEMPLATE_LOADER.get_template('recipe.yml') + loaded_template = TEMPLATE_LOADER.get_template('recipe_edit.yml') edited_recipe = click.edit(loaded_template.render(recipe.toJSON())) if edited_recipe is not None: parsed_edited_recipe = yaml.safe_load(edited_recipe) @@ -129,6 +129,24 @@ def edit(ctx, recipe_id): logger.error('Could not edit recipe {}'.format(recipe_id)) +@recipe.command('create') +@click.pass_context +def create(ctx): + cfg = ctx.obj['cfg'] + logger = cfg['logger'] + + try: + recipe = Recipe(**cfg) + loaded_template = TEMPLATE_LOADER.get_template('recipe_add.yml') + new_recipe = click.edit(loaded_template.render()) + if new_recipe is not None: + parsed_new_recipe = yaml.safe_load(new_recipe) + parsed_new_recipe['description'] = markdown(parsed_new_recipe['description']) + recipe.__dict__.update(parsed_new_recipe) + recipe.create() + except Exception as e: + logger.error(e) + #@main.command() #@click.pass_context #def chore(ctx): diff --git a/grocy/models/recipe.py b/grocy/models/recipe.py index 418c535..76cc6f5 100644 --- a/grocy/models/recipe.py +++ b/grocy/models/recipe.py @@ -101,6 +101,15 @@ class Recipe(Schema): except Exception as e: raise e + def create(self): + created_recipe = { + 'description': self.description, + 'name': self.name, + 'base_servings': self.base_servings, + 'desired_servings': self.desired_servings, + 'not_check_shoppinglist': self.not_check_shoppinglist + } + self.rest_service.post('recipes', created_recipe) def get(self, include_products=False): try: recipe = self.rest_service.get('recipes', id=self.id) diff --git a/templates/recipe_add.yml b/templates/recipe_add.yml new file mode 100644 index 0000000..280c6fc --- /dev/null +++ b/templates/recipe_add.yml @@ -0,0 +1,6 @@ +name: +description: | + +base_servings: +desired_servings: +not_check_shoppinglist: diff --git a/templates/recipe.yml b/templates/recipe_edit.yml similarity index 100% rename from templates/recipe.yml rename to templates/recipe_edit.yml