30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
|
from typing import Dict, Any, Literal
|
||
|
|
||
|
from classes.cache.holo_cache_memcached import HoloCacheMemcached
|
||
|
from classes.cache.holo_cache_redis import HoloCacheRedis
|
||
|
|
||
|
|
||
|
def create_cache_client(
|
||
|
config: Dict[str, Any],
|
||
|
engine: Literal["memcached", "redis"] | None = None,
|
||
|
) -> HoloCacheMemcached | HoloCacheRedis:
|
||
|
if engine not in ["memcached", "redis"] or engine is None:
|
||
|
raise KeyError(
|
||
|
f"Incorrect cache engine provided. Expected 'memcached' or 'redis', got '{engine}'"
|
||
|
)
|
||
|
|
||
|
if "cache" not in config or engine not in config["cache"]:
|
||
|
raise KeyError(
|
||
|
f"Cache configuration is invalid. Please check if all keys are set (engine: '{engine}')"
|
||
|
)
|
||
|
|
||
|
match engine:
|
||
|
case "memcached":
|
||
|
return HoloCacheMemcached.from_config(config["cache"][engine])
|
||
|
case "redis":
|
||
|
return HoloCacheRedis.from_config(config["cache"][engine])
|
||
|
case _:
|
||
|
raise KeyError(
|
||
|
f"Cache implementation for the engine '{engine}' is not present."
|
||
|
)
|