aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py')
-rw-r--r--.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py b/.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py
new file mode 100644
index 00000000..1fe6a908
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/openpyxl/compat/singleton.py
@@ -0,0 +1,40 @@
+# Copyright (c) 2010-2024 openpyxl
+
+import weakref
+
+
+class Singleton(type):
+ """
+ Singleton metaclass
+ Based on Python Cookbook 3rd Edition Recipe 9.13
+ Only one instance of a class can exist. Does not work with __slots__
+ """
+
+ def __init__(self, *args, **kw):
+ super().__init__(*args, **kw)
+ self.__instance = None
+
+ def __call__(self, *args, **kw):
+ if self.__instance is None:
+ self.__instance = super().__call__(*args, **kw)
+ return self.__instance
+
+
+class Cached(type):
+ """
+ Caching metaclass
+ Child classes will only create new instances of themselves if
+ one doesn't already exist. Does not work with __slots__
+ """
+
+ def __init__(self, *args, **kw):
+ super().__init__(*args, **kw)
+ self.__cache = weakref.WeakValueDictionary()
+
+ def __call__(self, *args):
+ if args in self.__cache:
+ return self.__cache[args]
+
+ obj = super().__call__(*args)
+ self.__cache[args] = obj
+ return obj