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))