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")