helpers.py

1.6 kB · python · 61 lines

1import json2import os3from enum import Enum4from catalog.models import Product5from env import SHOP_DIR, load_json, save_json67ROOT = SHOP_DIR89CATALOG = os.path.join(ROOT, "files/catalog.json")10CORRECTIONS = os.path.join(ROOT, "files/corrections.json")1112class Category(Enum):13    ACCESSORIES = "accessories"14    BAGS = "bags"15    KIDS = "kids"16    MEN = "men"17    UNISEX = "unisex"18    WOMEN = "women"1920# CATALOG2122def load_catalog() -> list[dict]:23    return load_json(CATALOG)2425def load_corrections() -> dict:26    return load_json(CORRECTIONS)2728def catalog_map() -> dict:29    return {row["id"]: row for row in load_catalog()}3031def all_ids(category: Category = None) -> list[int]:32    rows = load_catalog()33    if category:34        rows = [r for r in rows if r["category"] == category.value]35    return [r["id"] for r in rows]3637def live_ids() -> list[int]:38    return [r["id"] for r in load_catalog() if r.get("live")]3940def sort_catalog():41    rows = load_catalog()42    ordered = sorted(rows, key=lambda r: (not r.get("live"), r["category"], r["title"]))43    if rows != ordered:44        save_json(CATALOG, ordered)45        print(f"Sorted {len(ordered)} catalog rows, live first")46    else:47        print("Catalog rows are already sorted, live first")4849# PRODUCTS5051def product_path(id: int) -> str:52    return os.path.join(ROOT, f"data/products/{id}.json")5354def load_product(id: int) -> Product:55    return Product.from_dict(load_json(product_path(id)))5657def save_product(product: Product):58    save_json(product_path(product.id), product.to_dict())5960def print_product(id: int):61    print(json.dumps(load_json(product_path(id)), indent=2))