summaryrefslogtreecommitdiffstats
path: root/test/lib/ansible_test/_internal/cache.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/ansible_test/_internal/cache.py')
-rw-r--r--test/lib/ansible_test/_internal/cache.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/lib/ansible_test/_internal/cache.py b/test/lib/ansible_test/_internal/cache.py
new file mode 100644
index 0000000..3afe422
--- /dev/null
+++ b/test/lib/ansible_test/_internal/cache.py
@@ -0,0 +1,31 @@
+"""Cache for commonly shared data that is intended to be immutable."""
+from __future__ import annotations
+
+import collections.abc as c
+import typing as t
+
+from .config import (
+ CommonConfig,
+)
+
+TValue = t.TypeVar('TValue')
+
+
+class CommonCache:
+ """Common cache."""
+ def __init__(self, args: CommonConfig) -> None:
+ self.args = args
+
+ def get(self, key: str, factory: c.Callable[[], TValue]) -> TValue:
+ """Return the value from the cache identified by the given key, using the specified factory method if it is not found."""
+ if key not in self.args.cache:
+ self.args.cache[key] = factory()
+
+ return self.args.cache[key]
+
+ def get_with_args(self, key: str, factory: c.Callable[[CommonConfig], TValue]) -> TValue:
+ """Return the value from the cache identified by the given key, using the specified factory method (which accepts args) if it is not found."""
+ if key not in self.args.cache:
+ self.args.cache[key] = factory(self.args)
+
+ return self.args.cache[key]