about summary refs log tree commit diff
path: root/.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py')
-rw-r--r--.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py b/.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py
new file mode 100644
index 00000000..cbadd972
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/sentry_sdk/_lru_cache.py
@@ -0,0 +1,47 @@
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+    from typing import Any
+
+
+_SENTINEL = object()
+
+
+class LRUCache:
+    def __init__(self, max_size):
+        # type: (int) -> None
+        if max_size <= 0:
+            raise AssertionError(f"invalid max_size: {max_size}")
+        self.max_size = max_size
+        self._data = {}  # type: dict[Any, Any]
+        self.hits = self.misses = 0
+        self.full = False
+
+    def set(self, key, value):
+        # type: (Any, Any) -> None
+        current = self._data.pop(key, _SENTINEL)
+        if current is not _SENTINEL:
+            self._data[key] = value
+        elif self.full:
+            self._data.pop(next(iter(self._data)))
+            self._data[key] = value
+        else:
+            self._data[key] = value
+        self.full = len(self._data) >= self.max_size
+
+    def get(self, key, default=None):
+        # type: (Any, Any) -> Any
+        try:
+            ret = self._data.pop(key)
+        except KeyError:
+            self.misses += 1
+            ret = default
+        else:
+            self.hits += 1
+            self._data[key] = ret
+
+        return ret
+
+    def get_all(self):
+        # type: () -> list[tuple[Any, Any]]
+        return list(self._data.items())