File: //usr/local/lib/python3.10/dist-packages/virtualenv/cache/cache.py
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Any, Generic, Hashable, TypeVar
try:
from typing import Self # pragma: ≥ 3.11 cover
except ImportError:
from typing_extensions import Self # pragma: < 3.11 cover
K = TypeVar("K", bound=Hashable)
class Cache(ABC, Generic[K]):
"""
A generic cache interface.
Add a close() method if the cache needs to perform any cleanup actions,
and an __exit__ method to allow it to be used in a context manager.
"""
@abstractmethod
def get(self, key: K) -> Any | None:
"""
Get a value from the cache.
:param key: the key to retrieve
:return: the cached value, or None if not found
"""
raise NotImplementedError
@abstractmethod
def set(self, key: K, value: Any) -> None:
"""
Set a value in the cache.
:param key: the key to set
:param value: the value to cache
"""
raise NotImplementedError
@abstractmethod
def remove(self, key: K) -> None:
"""
Remove a value from the cache.
:param key: the key to remove
"""
raise NotImplementedError
@abstractmethod
def clear(self) -> None:
"""Clear the entire cache."""
raise NotImplementedError
def __enter__(self) -> Self:
return self
__all__ = [
"Cache",
]