main.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import asyncio
  2. import json
  3. import os
  4. import re
  5. from typing import TypedDict, List, Dict, Any
  6. import httpx
  7. from fastapi import FastAPI
  8. from fastapi.middleware.cors import CORSMiddleware
  9. app = FastAPI()
  10. origins = [
  11. "http://drafter.cadel.me",
  12. "https://drafter.cadel.me",
  13. "http://localhost",
  14. "http://localhost:1234",
  15. ]
  16. app.add_middleware(
  17. CORSMiddleware,
  18. allow_origins=origins,
  19. allow_credentials=True,
  20. allow_methods=["*"],
  21. allow_headers=["*"],
  22. )
  23. def discover_sets():
  24. # find all set directories
  25. sets = []
  26. for root, dirs, files in os.walk("data/sets"):
  27. for dir in dirs:
  28. sets.append(dir)
  29. return sets
  30. @app.get("/sets")
  31. def read_sets():
  32. sets = discover_sets()
  33. return {"sets": sets}
  34. @app.get("/sets/{set_name}/cards")
  35. def read_item(set_name: str):
  36. if set_name not in discover_sets():
  37. return {"error": "Set not found"}
  38. card_data_path = os.path.join("data", "sets", set_name, "card-data.json")
  39. with open(card_data_path) as f:
  40. card_data = json.load(f)
  41. return {"data": card_data}
  42. @app.get("/sets/{set_name}/ratings")
  43. def read_item(set_name: str):
  44. if set_name not in discover_sets():
  45. return {"error": "Set not found"}
  46. card_ratings_path = os.path.join("data", "sets", set_name, "card-ratings-all.json")
  47. with open(card_ratings_path) as f:
  48. card_data = json.load(f)
  49. return {"data": card_data}
  50. @app.get("/sets/{set_name}")
  51. def read_item(set_name: str):
  52. if set_name not in discover_sets():
  53. return {"error": "Set not found"}
  54. card_data_path = os.path.join("data", "sets", set_name, "card-data.json")
  55. with open(card_data_path) as f:
  56. card_data = json.load(f)
  57. card_ratings_path = os.path.join("data", "sets", set_name, "card-ratings-all.json")
  58. with open(card_ratings_path) as f:
  59. ratings_data = json.load(f)
  60. return {"code": set_name, "data": {"cards": card_data, "ratings": ratings_data}}