diff --git a/src/sup/cli.py b/src/sup/cli.py index 282de48..1558212 100644 --- a/src/sup/cli.py +++ b/src/sup/cli.py @@ -14,7 +14,14 @@ from typing_extensions import Annotated import typer -from sup.main import load_ordered_supps, ORDERED_SUPPS_FP, load_config, SUPP_CONSUMPTION_FP, load_inventory, Supp +from sup.main import ( + load_ordered_supps, + ORDERED_SUPPS_FP, + load_config, + SUPP_CONSUMPTION_FP, + load_inventory, + Supp, +) app = typer.Typer() @@ -23,13 +30,17 @@ class UnitMismatch(Exception): pass -def get_qty_inventory(supp: Supp, inventory: dict) -> int: - inventory_order_date = dt.datetime.strptime(inventory['orderDate'][:10], "%Y-%m-%d").date() +def get_qty_inventory(supp: Supp, inventory: dict) -> int: + inventory_order_date = dt.datetime.strptime( + inventory["orderDate"][:10], "%Y-%m-%d" + ).date() num_days_since_bought = (dt.date.today() - inventory_order_date).days - if inventory['servingUnit'] != supp.units: + if inventory["servingUnit"] != supp.units: raise UnitMismatch(inventory, supp) - return (inventory['quantity'] * inventory['numBottles']) - (supp * num_days_since_bought) + return (inventory["quantity"] * inventory["numBottles"]) - ( + supp * num_days_since_bought + ) def get_num_winter_days_starting(num_days: int, starting: dt.date) -> int: @@ -62,14 +73,18 @@ def get_num_winter_days_starting(num_days: int, starting: dt.date) -> int: def status(): """check if there's enough inventory for the next fill-up; if not, what to order?""" config = load_config() - num_days_of_inventory_needed = config['FILL_EVERY_X_DAYS'] - next_fill_date = config['LAST_FILL_DATE'] + dt.timedelta(num_days_of_inventory_needed) + num_days_of_inventory_needed = config["FILL_EVERY_X_DAYS"] + next_fill_date = config["LAST_FILL_DATE"] + dt.timedelta( + num_days_of_inventory_needed + ) inventory = load_inventory() needs = [] - for sup in config['supps']: + for sup in config["supps"]: sup_inst = Supp(**sup) if sup_inst.winter_only: - num_days_of_inventory_needed = get_num_winter_days_starting(num_days_of_inventory_needed, next_fill_date) + num_days_of_inventory_needed = get_num_winter_days_starting( + num_days_of_inventory_needed, next_fill_date + ) qty_needed = sup_inst * num_days_of_inventory_needed try: inv = inventory[sup_inst.name] @@ -77,7 +92,7 @@ def status(): qty_of_inventory = 0 else: qty_of_inventory = get_qty_inventory(sup_inst, inv) - net_need = qty_needed - qty_of_inventory + net_need = qty_needed - qty_of_inventory if net_need > 0: needs.append((sup_inst.name, net_need, sup_inst.units)) if needs: @@ -92,11 +107,13 @@ def fill(): config = load_config() today = dt.date.today() config["LAST_FILL_DATE"] = today.strftime("%Y-%m-%d") - # TODO: make sure this toml library doesn't add quotes to this entry, it + # TODO: make sure this toml library doesn't add quotes to this entry, it # makes it so when reading it doesn't get parsed to a date - fill_every_x_days = config['FILL_EVERY_X_DAYS'] + fill_every_x_days = config["FILL_EVERY_X_DAYS"] save_config(config) - print(f"Okay, next fill-up set to {today + dt.timedelta(days=fill_every_x_days)} (configured in `sup.toml`::FILL_EVERY_X_DAYS)") + print( + f"Okay, next fill-up set to {today + dt.timedelta(days=fill_every_x_days)} (configured in `sup.toml`::FILL_EVERY_X_DAYS)" + ) @app.command() diff --git a/src/sup/main.py b/src/sup/main.py index b7a6509..3ec31b0 100644 --- a/src/sup/main.py +++ b/src/sup/main.py @@ -18,11 +18,10 @@ def load_config(): return tomllib.loads(SUPP_CONSUMPTION_FP.read_text()) - - def load_ordered_supps() -> list[dict]: return json.loads(ORDERED_SUPPS_FP.read_text()) + CONFIG = load_config() ALIASES = CONFIG["product_aliases"] @@ -30,13 +29,18 @@ ordered_supps = load_ordered_supps() for i in CONFIG["supps"]: for ordered_supp in ordered_supps: - if i["name"].lower() in ordered_supp['name'].lower(): - ALIASES[ordered_supp['name']] = i["name"] + if i["name"].lower() in ordered_supp["name"].lower(): + ALIASES[ordered_supp["name"]] = i["name"] ALIASES_REV = {v: k for k, v in ALIASES.items()} + def load_inventory(): - return { ALIASES[s['name']]: s for s in load_ordered_supps() if s['name'] not in CONFIG['discontinued'] } + return { + ALIASES[s["name"]]: s + for s in load_ordered_supps() + if s["name"] not in CONFIG["discontinued"] + } class Missing(Exception): @@ -77,7 +81,11 @@ class Supp: @property def quantity_per_day(self) -> float: - return sum([self.morning, self.lunch, self.dinner, self.bedtime]) * 7 / self.days_per_week + return ( + sum([self.morning, self.lunch, self.dinner, self.bedtime]) + * 7 + / self.days_per_week + ) def main():