* Rename WebSocket message types for better organization * Improve state handling with dedicated methods like broadcast_state * Restructure frontend components and remove unused code
75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
import pickle
|
|
import os
|
|
from typing import Any
|
|
from pathlib import Path
|
|
import json
|
|
|
|
DEFAULT_PATH = Path("/Users/asc/Developer/boxofficefantasy/main/data/draft_cache.json")
|
|
|
|
class CachedDraftState:
|
|
participants: list
|
|
phase: str # Replace with Enum if needed
|
|
draft_order: list = []
|
|
draft_index: int
|
|
current_movie: str
|
|
bids: list
|
|
|
|
def __init__(self, cache_file: str = "draft_cache.json"):
|
|
super().__setattr__("_cache_file", cache_file)
|
|
super().__setattr__("_cache", self._load_cache())
|
|
|
|
def _load_cache(self) -> dict:
|
|
if os.path.exists(self._cache_file):
|
|
try:
|
|
with open(self._cache_file, "r", encoding="utf-8") as f:
|
|
return json.load(f)
|
|
except Exception as e:
|
|
print(f"Failed to load cache: {e}")
|
|
return {}
|
|
return {}
|
|
|
|
def _save_cache(self):
|
|
try:
|
|
with open(self._cache_file, "w", encoding="utf-8") as f:
|
|
json.dump(self._cache, f, indent=2)
|
|
except Exception as e:
|
|
print(f"Failed to save cache: {e}")
|
|
|
|
def __getattr__(self, name: str) -> Any:
|
|
if name in self.__class__.__annotations__:
|
|
print(f"[GET] {name} -> {self._cache.get(name)}")
|
|
return self._cache.get(name, None)
|
|
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{name}'")
|
|
|
|
def __setattr__(self, name: str, value: Any):
|
|
if name in self.__class__.__annotations__:
|
|
print(f"[SET] {name} = {value}")
|
|
self._cache[name] = value
|
|
self._save_cache()
|
|
else:
|
|
super().__setattr__(name, value)
|
|
|
|
if __name__ == "__main__":
|
|
# Clean start for testing
|
|
if os.path.exists("draft_cache.pkl"):
|
|
os.remove("draft_cache.pkl")
|
|
|
|
print("\n--- First Run: Setting Attributes ---")
|
|
state = CachedDraftState()
|
|
state.participants = ["Alice", "Bob"]
|
|
state.phase = "nominating"
|
|
# state.draft_order = ["Bob", "Alice"]
|
|
state.draft_index = 0
|
|
state.current_movie = "The Matrix"
|
|
state.bids = [{"Alice": 10}, {"Bob": 12}]
|
|
|
|
print("\n--- Second Run: Reading from Cache ---")
|
|
state2 = CachedDraftState()
|
|
print("participants:", state2.participants)
|
|
print("phase:", state2.phase)
|
|
print("draft_order:", state2.draft_order)
|
|
print("draft_index:", state2.draft_index)
|
|
print("current_movie:", state2.current_movie)
|
|
print("bids:", state2.bids)
|
|
|
|
pass |