From 2407377cf1de8efc6bd9ff3980bc7f958e8f457f Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 6 Jun 2019 14:14:39 +0000 Subject: [PATCH] Implement cache for rendered elements --- cheuph/rendered_element_cache.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/cheuph/rendered_element_cache.py b/cheuph/rendered_element_cache.py index 90bf71a..949bdee 100644 --- a/cheuph/rendered_element_cache.py +++ b/cheuph/rendered_element_cache.py @@ -1,4 +1,27 @@ +from typing import Dict, Generic, Optional, TypeVar + +from .element import Id, RenderedElement + __all__ = ["RenderedElementCache"] -class RenderedElementCache: - pass # TODO +E = TypeVar("E", bound=RenderedElement) + +class RenderedElementCache(Generic[E]): + + def __init__(self) -> None: + self._elements: Dict[Id, E] = {} + + def invalidate(self, elem_id: Id) -> None: + try: + self._elements.pop(elem_id) + except KeyError: + pass + + def invalidate_all(self) -> None: + self._elements = {} + + def get(self, elem_id: Id) -> Optional[E]: + return self._elements.get(elem_id) + + def add(self, elem: E) -> None: + self._elements[elem.id] = elem