Spaces:
Runtime error
Runtime error
| # RockPaperScissor/game_cache/memory_cache.py | |
| from typing import Dict, Any, Optional | |
| from dataclasses import dataclass | |
| from datetime import datetime | |
| class GameData: | |
| session_id: str | |
| player_move: str | |
| ai_move: str | |
| result: str | |
| ai_type: str | |
| ai_state: Dict[str, Any] | |
| created_at: datetime = datetime.now() | |
| class GameSessionCache: | |
| def __init__(self): | |
| self._sessions: Dict[str, Dict[str, Any]] = {} | |
| self._max_cache_size = 1000 # Maximum number of sessions to cache | |
| def update_session(self, session_id: str, game_data: Dict[str, Any]) -> None: | |
| """Update session data in cache""" | |
| if session_id not in self._sessions: | |
| self._sessions[session_id] = { | |
| 'total_rounds': 0, | |
| 'player_wins': 0, | |
| 'ai_wins': 0, | |
| 'draws': 0, | |
| 'rounds': [], | |
| 'last_updated': datetime.now() | |
| } | |
| session = self._sessions[session_id] | |
| # Update session stats | |
| session['total_rounds'] += 1 | |
| if game_data['result'] == 'player_win': | |
| session['player_wins'] += 1 | |
| elif game_data['result'] == 'ai_win': | |
| session['ai_wins'] += 1 | |
| else: | |
| session['draws'] += 1 | |
| # Add round data | |
| session['rounds'].append({ | |
| 'round_number': session['total_rounds'], | |
| 'player_move': game_data['player_move'], | |
| 'ai_move': game_data['ai_move'], | |
| 'result': game_data['result'], | |
| 'ai_type': game_data.get('ai_type', 'random'), | |
| 'ai_state': game_data.get('ai_state', {}), | |
| 'created_at': datetime.now() | |
| }) | |
| # Update last updated timestamp | |
| session['last_updated'] = datetime.now() | |
| # Enforce cache size limit | |
| if len(self._sessions) > self._max_cache_size: | |
| self._remove_oldest_session() | |
| def get_session(self, session_id: str) -> Optional[Dict[str, Any]]: | |
| """Get session data from cache""" | |
| return self._sessions.get(session_id) | |
| def _remove_oldest_session(self) -> None: | |
| """Remove the oldest session from cache""" | |
| if not self._sessions: | |
| return | |
| oldest_session = min( | |
| self._sessions.items(), | |
| key=lambda x: x[1]['last_updated'] | |
| ) | |
| del self._sessions[oldest_session[0]] | |
| def clear(self) -> None: | |
| """Clear all cached data""" | |
| self._sessions.clear() | |
| def remove_session(self, session_id: str) -> None: | |
| """Remove a specific session from cache""" | |
| if session_id in self._sessions: | |
| del self._sessions[session_id] |