mirror of
https://github.com/Sea-Haven-Industries/meal-order-manager.git
synced 2026-09-30 11:13:12 +00:00
Apply ruff check --fix and ruff format across all Python files to pass CI pipeline. Remove unused imports (os, sys), fix f-strings without placeholders. Update README to reflect sync-roster Lambda, corrected shared layer path, and current project structure.
60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
"""
|
|
Uploads the latest scraped menu JSON to DynamoDB.
|
|
Used by the GitHub Actions weekly workflow after scraping.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
from datetime import datetime
|
|
from decimal import Decimal
|
|
from pathlib import Path
|
|
|
|
import boto3
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|
OUTPUT_DIR = PROJECT_ROOT / "output"
|
|
TABLE_NAME = os.environ.get("TABLE_NAME", "meal-order-manager-orders")
|
|
|
|
|
|
def convert_floats(obj):
|
|
if isinstance(obj, float):
|
|
return Decimal(str(obj))
|
|
if isinstance(obj, dict):
|
|
return {k: convert_floats(v) for k, v in obj.items()}
|
|
if isinstance(obj, list):
|
|
return [convert_floats(i) for i in obj]
|
|
return obj
|
|
|
|
|
|
def main():
|
|
files = sorted(OUTPUT_DIR.glob("menu-*.json"), reverse=True)
|
|
if not files:
|
|
print("Error: No menu JSON found. Run scrape_menu.py first.", file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
with open(files[0]) as f:
|
|
menu = json.load(f)
|
|
|
|
week = datetime.now().strftime("%Y-W%U")
|
|
table = boto3.resource("dynamodb").Table(TABLE_NAME)
|
|
|
|
import time
|
|
|
|
item = {
|
|
"PK": f"WEEK#{week}",
|
|
"SK": "MENU",
|
|
"form_status": "open",
|
|
"scraped_at": menu.get("scraped_at"),
|
|
"menu_url": menu.get("menu_url"),
|
|
"meal_count": menu.get("meal_count"),
|
|
"meals": convert_floats(menu.get("meals", [])),
|
|
"ttl": int(time.time()) + (90 * 86400),
|
|
}
|
|
|
|
table.put_item(Item=item)
|
|
print(f"Uploaded menu for {week} to DynamoDB ({len(menu.get('meals', []))} meals)")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|