Skip to main content
Glama
CacheManager.py•2.6 kB
# Copyright Ā© 2025 Dr.-Ing. Paul Wilhelm <paul@wilhelm.dev> # This file is part of Archive Agent. See LICENSE for details. from typing import Optional, Any from diskcache import Cache from pathlib import Path from archive_agent.core.CliManager import CliManager class CacheManager: """ Cache manager. """ def __init__(self, cli: CliManager, cache_path: Path, invalidate_cache: bool = False, verbose: bool = False) -> None: """ Initialize cache manager. :param cli: CLI manager. :param cache_path: Cache path. :param invalidate_cache: Invalidate cache if enabled, probe cache otherwise. :param verbose: Verbosity switch. """ self.cli = cli self.cache_path = cache_path self.invalidate_cache = invalidate_cache self.verbose = verbose existed = (self.cache_path.exists() and any(self.cache_path.iterdir())) self.cache = Cache(self.cache_path.__str__()) if existed: self.cli.logger.info(f"Loaded cache at {self.cache_path}") else: self.cli.logger.info(f"Created cache at {self.cache_path}") def get(self, key: str, display_key: str) -> Optional[Any]: """ Get value from cache. :param key: Key. :param display_key: Display key (human-readable). :return: Value. """ if self.invalidate_cache: if self.verbose: self.cli.logger.info(f"Cache read bypassed (--nocache) for '{display_key}'") return None if key in self.cache: if self.verbose: self.cli.logger.info(f"Cache hit for '{display_key}'") return self.cache[key] else: if self.verbose: self.cli.logger.info(f"Cache miss for '{display_key}'") return None def __contains__(self, key): return key in self.cache def __getitem__(self, key): return self.cache[key] def __setitem__(self, key, value): self.cache[key] = value def __delitem__(self, key): del self.cache[key] def pop(self) -> object: """ Pop the last touched key from the cache, delete it, and return its value. :return: The value associated with the last touched key. :raises KeyError: If the cache is empty. """ try: key = next(reversed(self.cache)) except StopIteration: raise KeyError("Cache is empty.") value = self.cache[key] del self.cache[key] return value

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shredEngineer/Archive-Agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server