40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
from typing import Type
|
|
|
|
from flask import Flask
|
|
|
|
from common.utils.cache.base import CacheHandler
|
|
|
|
|
|
class EveAICacheManager:
|
|
"""Cache manager with registration capabilities"""
|
|
|
|
def __init__(self):
|
|
self._regions = {}
|
|
self._handlers = {}
|
|
|
|
def init_app(self, app: Flask):
|
|
"""Initialize cache regions"""
|
|
from common.utils.cache.regions import create_cache_regions
|
|
self._regions = create_cache_regions(app)
|
|
|
|
# Store regions in instance
|
|
for region_name, region in self._regions.items():
|
|
setattr(self, f"{region_name}_region", region)
|
|
|
|
# Initialize all registered handlers with their regions
|
|
for handler_class, region_name in self._handlers.items():
|
|
region = self._regions[region_name]
|
|
handler_instance = handler_class(region)
|
|
handler_name = getattr(handler_class, 'handler_name', None)
|
|
if handler_name:
|
|
app.logger.debug(f"{handler_name} is registered")
|
|
setattr(self, handler_name, handler_instance)
|
|
|
|
app.logger.info('Cache regions initialized: ' + ', '.join(self._regions.keys()))
|
|
|
|
def register_handler(self, handler_class: Type[CacheHandler], region: str):
|
|
"""Register a cache handler class with its region"""
|
|
if not hasattr(handler_class, 'handler_name'):
|
|
raise ValueError("Cache handler must define handler_name class attribute")
|
|
self._handlers[handler_class] = region
|