Spaces:
Sleeping
Sleeping
| """ | |
| Data Loader - Loads and processes game data | |
| """ | |
| import json | |
| import os | |
| from typing import Dict, List | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| # In HF Space, this file lives at /app/utils/data_loader.py | |
| # Data files are at /app/data/ | |
| # So BASE_DIR = /app (two levels up from this file) | |
| BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| class DataLoader: | |
| def __init__(self, data_dir: str = 'data'): | |
| self.data_dir = data_dir | |
| self.cache = {} | |
| def load_json(self, filename: str): | |
| if filename in self.cache: | |
| return self.cache[filename] | |
| filepath = os.path.join(BASE_DIR, self.data_dir, filename) | |
| try: | |
| with open(filepath, 'r', encoding='utf-8') as f: | |
| data = json.load(f) | |
| self.cache[filename] = data | |
| logger.info(f"Loaded {filename}: {len(data) if isinstance(data, list) else 'dict'} items from {filepath}") | |
| return data | |
| except FileNotFoundError: | |
| logger.error(f"File not found: {filepath}") | |
| return [] if filename != 'questions.json' else {} | |
| except json.JSONDecodeError as e: | |
| logger.error(f"JSON decode error in {filepath}: {e}") | |
| return [] if filename != 'questions.json' else {} | |
| def load_countries(self) -> List[Dict]: | |
| return self.load_json('countries.json') | |
| def load_cities(self) -> List[Dict]: | |
| return self.load_json('cities.json') | |
| def load_places(self) -> List[Dict]: | |
| return self.load_json('places.json') | |
| def load_questions(self) -> Dict: | |
| return self.load_json('questions.json') | |
| def get_category_data(self, category: str) -> List[Dict]: | |
| category_map = { | |
| 'country': 'countries.json', | |
| 'city': 'cities.json', | |
| 'place': 'places.json' | |
| } | |
| filename = category_map.get(category) | |
| if not filename: | |
| logger.error(f"Unknown category: {category}") | |
| return [] | |
| return self.load_json(filename) | |
| def get_all_questions(self) -> Dict: | |
| return self.load_questions() | |
| def get_data_stats(self) -> Dict: | |
| return { | |
| 'country': {'count': len(self.load_countries())}, | |
| 'city': {'count': len(self.load_cities())}, | |
| 'place': {'count': len(self.load_places())}, | |
| } | |
| def clear_cache(self): | |
| self.cache.clear() | |
| logger.info("Data cache cleared") | |