|
|
import json
|
|
|
import logging
|
|
|
import logging.config
|
|
|
from datetime import timedelta
|
|
|
from operator import itemgetter
|
|
|
|
|
|
import click
|
|
|
import requests
|
|
|
import requests_cache
|
|
|
from rich.panel import Panel
|
|
|
from rich.table import Table
|
|
|
|
|
|
from .books import add_book_by_barcode, update_isbn
|
|
|
from .console import DEFAULT_PADDING, console, int_prompt, prompt
|
|
|
from .stock import (
|
|
|
add_by_barcode,
|
|
@@ -22,6 +25,7 @@ TASK_MAP = {
|
|
|
"2": ("Add stock", add_by_barcode),
|
|
|
"3": ("Update stock", update_by_barcode),
|
|
|
"4": ("Get product info", get_info_by_barcode),
|
|
|
"5": ("Add book", add_book_by_barcode),
|
|
|
}
|
|
|
|
|
|
|
|
@@ -48,6 +52,22 @@ def stockcli(ctx: click.Context, configf
|
|
|
"GROCY-API-KEY": config["grocy"]["apikey"],
|
|
|
}
|
|
|
)
|
|
|
ctx.obj["cached_session"] = requests_cache.CachedSession(
|
|
|
"stockcli",
|
|
|
ignored_parameters=["GROCY-API-KEY"],
|
|
|
expire_after=timedelta(days=1),
|
|
|
cache_control=True,
|
|
|
allowable_methods=["GET", "POST"],
|
|
|
allowable_codes=[200, 400],
|
|
|
match_headers=True,
|
|
|
stale_if_error=True,
|
|
|
)
|
|
|
ctx.obj["cached_session"].headers.update(
|
|
|
{
|
|
|
"accept": "application/json",
|
|
|
"GROCY-API-KEY": config["grocy"]["apikey"],
|
|
|
}
|
|
|
)
|
|
|
ctx.obj["base_url"] = f"{config['grocy']['url']}/api/"
|
|
|
|
|
|
menu = Table.grid(padding=DEFAULT_PADDING)
|