Spaces:
Sleeping
Sleeping
File size: 2,481 Bytes
2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a e0f8091 2b7062a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | """
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")
|