feat: Added create and add_product subcommands for shoppinglist cmd
This commit is contained in:
		
							
								
								
									
										72
									
								
								grocy/cli.py
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								grocy/cli.py
									
									
									
									
									
								
							@@ -1,5 +1,3 @@
 | 
			
		||||
"""
 | 
			
		||||
"""
 | 
			
		||||
import logging
 | 
			
		||||
import click
 | 
			
		||||
from markdown import markdown
 | 
			
		||||
@@ -13,6 +11,7 @@ from grocy.table import Table
 | 
			
		||||
from grocy.entity import Entity
 | 
			
		||||
from grocy.stock import Stock
 | 
			
		||||
from grocy.schema import get_schema
 | 
			
		||||
from grocy.shoppinglist import ShoppingList
 | 
			
		||||
import yaml
 | 
			
		||||
from sys import exit
 | 
			
		||||
from os import path
 | 
			
		||||
@@ -433,7 +432,6 @@ def add_ingredient(recipe_id, template):
 | 
			
		||||
        # Add quantity_units to meta
 | 
			
		||||
        ingredient = click.edit(loaded_template.render(), extension='.yml')
 | 
			
		||||
        if ingredient is None:
 | 
			
		||||
 | 
			
		||||
            return
 | 
			
		||||
        parsed_new_ingredient = util.load_yaml(ingredient)[0]
 | 
			
		||||
        parsed_new_ingredient['recipe_id'] = recipe_id
 | 
			
		||||
@@ -465,6 +463,7 @@ def remove_ingredient(recipe_id, ingredient_id):
 | 
			
		||||
def shopping(ctx):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shopping.command()
 | 
			
		||||
@click.pass_context
 | 
			
		||||
@click.argument('shopping_id', required=False)
 | 
			
		||||
@@ -503,6 +502,7 @@ def view(ctx, shopping_id, template):
 | 
			
		||||
        logger.error(e)
 | 
			
		||||
        raise e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shopping.command()
 | 
			
		||||
@click.option('--name', '-n', 'name')
 | 
			
		||||
@click.option('-t', 'template')
 | 
			
		||||
@@ -534,6 +534,72 @@ def list(name, template):
 | 
			
		||||
        raise e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shopping.command()
 | 
			
		||||
@click.argument('shopping_id')
 | 
			
		||||
def browse(shopping_id):
 | 
			
		||||
    logger = logging.getLogger('cli.shopping.browse')
 | 
			
		||||
    try:
 | 
			
		||||
        cfg = Configuration()
 | 
			
		||||
        cfg.load()
 | 
			
		||||
        url = '{domain}/shoppinglist?list={shopping_id}'.format(domain=cfg.domain, shopping_id=shopping_id)
 | 
			
		||||
        click.launch(url, wait=False)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        logger.error(e)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shopping.command()
 | 
			
		||||
@click.option('-t', 'template')
 | 
			
		||||
def create(template):
 | 
			
		||||
    logger = logging.getLogger('cli.shopping.create')
 | 
			
		||||
    try:
 | 
			
		||||
        cfg = Configuration()
 | 
			
		||||
        cfg.load()
 | 
			
		||||
        util = Util(cfg=cfg)
 | 
			
		||||
        shopping_lists = Entity(name='shopping_lists')
 | 
			
		||||
        if template:
 | 
			
		||||
            loaded_template = cfg.templates(template)
 | 
			
		||||
        else:
 | 
			
		||||
            loaded_template = cfg.templates('shopping/create')
 | 
			
		||||
        created_shopping_list = click.edit(loaded_template.render(),
 | 
			
		||||
                                           extension='.yml')
 | 
			
		||||
        if created_shopping_list is None:
 | 
			
		||||
            return
 | 
			
		||||
        parsed_created_shopping_list = util.load_yaml(created_shopping_list)[0]
 | 
			
		||||
 | 
			
		||||
        if template == 'debug':
 | 
			
		||||
            click.echo(parsed_created_shopping_list)
 | 
			
		||||
            return
 | 
			
		||||
        shopping_lists.create(parsed_created_shopping_list)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        raise e
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@shopping.command()
 | 
			
		||||
@click.argument('shopping_id')
 | 
			
		||||
@click.option('-t', 'template')
 | 
			
		||||
def add_product(shopping_id, template):
 | 
			
		||||
    logger = logging.getLogger('cli.shopping.add_product')
 | 
			
		||||
    try:
 | 
			
		||||
        cfg = Configuration()
 | 
			
		||||
        cfg.load()
 | 
			
		||||
        util = Util(cfg=cfg)
 | 
			
		||||
        shopping_list = ShoppingList(id=shopping_id)
 | 
			
		||||
        if template:
 | 
			
		||||
            loaded_template = cfg.templates(template)
 | 
			
		||||
        else:
 | 
			
		||||
            loaded_template = cfg.templates('shopping/add_product')
 | 
			
		||||
 | 
			
		||||
        added_product = click.edit(loaded_template.render(), extension='.yml')
 | 
			
		||||
        if added_product is None:
 | 
			
		||||
            return
 | 
			
		||||
        parsed_added_product = util.load_yaml(added_product)[0]
 | 
			
		||||
 | 
			
		||||
        if template == 'debug':
 | 
			
		||||
            "TODO: Reserve for meta 
 | 
			
		||||
            return
 | 
			
		||||
        shopping_list.add_product(parsed_added_product)
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        raise e
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ class Request(object):
 | 
			
		||||
        logger = logging.getLogger('request.send')
 | 
			
		||||
        if self.resource:
 | 
			
		||||
            r = sess.request(method=self.method, url=self.url, headers=self.headers, json=self.resource)
 | 
			
		||||
            print(r.text)
 | 
			
		||||
        else:
 | 
			
		||||
            r = sess.request(method=self.method, url=self.url, headers=self.headers)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								grocy/shoppinglist.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								grocy/shoppinglist.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
from grocy.request import Request
 | 
			
		||||
from grocy.conf import Configuration
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ShoppingList(object):
 | 
			
		||||
    ADD_PRODUCT_URL_TEMPLATE = '{domain}/api/stock/shoppinglist/add-product'
 | 
			
		||||
 | 
			
		||||
    def __init__(self, id=None):
 | 
			
		||||
        self.conf = Configuration()
 | 
			
		||||
        self.conf.load()
 | 
			
		||||
        self.id = id
 | 
			
		||||
 | 
			
		||||
    def add_product(self, entity):
 | 
			
		||||
        logger = logging.getLogger('shoppinglist.add_product')
 | 
			
		||||
        try:
 | 
			
		||||
            if self.id is None:
 | 
			
		||||
                raise Exception('shopping list id is required')
 | 
			
		||||
            if entity and 'product_id' not in entity:
 | 
			
		||||
                raise Exception('Must provide a product id')
 | 
			
		||||
            if entity and 'product_amount' not in entity:
 | 
			
		||||
                raise Exception('Must provide a product_amount id')
 | 
			
		||||
 | 
			
		||||
            entity['list_id'] = self.id
 | 
			
		||||
            url = self.ADD_PRODUCT_URL_TEMPLATE.format(domain=self.conf.domain)
 | 
			
		||||
            request = Request('post', url, resource=entity)
 | 
			
		||||
            return request.send()
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.error(e)
 | 
			
		||||
            raise e
 | 
			
		||||
							
								
								
									
										2
									
								
								templates/shopping/add_product.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								templates/shopping/add_product.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
product_id: 
 | 
			
		||||
product_amount: 
 | 
			
		||||
							
								
								
									
										2
									
								
								templates/shopping/create.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								templates/shopping/create.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
name: 
 | 
			
		||||
description: | 
 | 
			
		||||
		Reference in New Issue
	
	Block a user