File size: 1,672 Bytes
09801ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Core cache module - stub for deployment"""

class QueryCache:
    """Simple query cache that accepts various parameter names"""
    def __init__(self, max_entries=1000, ttl_seconds=3600, default_ttl=3600, **kwargs):
        self.cache = {}
        self.max_entries = max_entries
        self.ttl_seconds = ttl_seconds or default_ttl
        # Accept any other kwargs for compatibility
        for key, value in kwargs.items():
            setattr(self, key, value)
    
    def get(self, key, user_id=None):
        """Get value from cache"""
        cache_key = f"{user_id}:{key}" if user_id else key
        return self.cache.get(cache_key)
    
    def set(self, query, response, route=None, sources=None, user_id=None, ttl=None):
        """Set value in cache with all parameters"""
        cache_key = f"{user_id}:{query}" if user_id else query  
        # Store as object with attributes
        class CacheEntry:
            pass
        entry = CacheEntry()
        entry.response = response
        entry.route = route
        entry.sources = sources
        self.cache[cache_key] = entry
    
    def clear_all(self):
        """Clear entire cache"""
        self.cache = {}
    
    def invalidate(self, user_id=None):
        """Clear cache"""
        if user_id:
            # Clear user-specific cache
            keys_to_remove = [k for k in self.cache.keys() if str(user_id) in str(k)]
            for k in keys_to_remove:
                del self.cache[k]
        else:
            self.cache = {}

def get_cache():
    """Get global cache instance"""
    global _cache
    if '_cache' not in globals():
        _cache = QueryCache()
    return _cache