- correct startup of applications using gevent - introduce startup scripts (eveai_app) - caching manager for all configurations
52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
from typing import Type
|
|
|
|
from flask import Flask
|
|
|
|
from common.utils.cache.base import CacheHandler
|
|
from common.utils.cache.regions import create_cache_regions
|
|
from common.utils.cache.config_cache import AgentConfigCacheHandler
|
|
|
|
|
|
class EveAICacheManager:
|
|
"""Cache manager with registration capabilities"""
|
|
|
|
def __init__(self):
|
|
self._regions = {}
|
|
self._handlers = {}
|
|
self._handler_instances = {}
|
|
|
|
def init_app(self, app: Flask):
|
|
"""Initialize 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)
|
|
|
|
app.logger.info(f'Cache regions initialized: {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
|
|
|
|
# Create handler instance
|
|
region_instance = self._regions[region]
|
|
handler_instance = handler_class(region_instance)
|
|
self._handler_instances[handler_class.handler_name] = handler_instance
|
|
|
|
def invalidate_region(self, region_name: str):
|
|
"""Invalidate an entire cache region"""
|
|
if region_name in self._regions:
|
|
self._regions[region_name].invalidate()
|
|
else:
|
|
raise ValueError(f"Unknown cache region: {region_name}")
|
|
|
|
def __getattr__(self, name):
|
|
"""Handle dynamic access to registered handlers"""
|
|
instances = object.__getattribute__(self, '_handler_instances')
|
|
if name in instances:
|
|
return instances[name]
|
|
raise AttributeError(f"'EveAICacheManager' object has no attribute '{name}'")
|