formatted
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -24,12 +31,16 @@ class UnitMismatch(Exception):
|
||||
|
||||
|
||||
def get_qty_inventory(supp: Supp, inventory: dict) -> int:
|
||||
inventory_order_date = dt.datetime.strptime(inventory['orderDate'][:10], "%Y-%m-%d").date()
|
||||
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]
|
||||
@@ -94,9 +109,11 @@ def fill():
|
||||
config["LAST_FILL_DATE"] = today.strftime("%Y-%m-%d")
|
||||
# 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()
|
||||
|
||||
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user