summaryrefslogtreecommitdiffstats
path: root/ipapython/install/typing.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipapython/install/typing.py')
-rw-r--r--ipapython/install/typing.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/ipapython/install/typing.py b/ipapython/install/typing.py
new file mode 100644
index 000000000..d86fc8f31
--- /dev/null
+++ b/ipapython/install/typing.py
@@ -0,0 +1,34 @@
+#
+# Copyright (C) 2016 FreeIPA Contributors see COPYING for license
+#
+
+import weakref
+
+import six
+
+_cache = weakref.WeakValueDictionary()
+
+
+class ListMeta(type):
+ def __getitem__(cls, key):
+ if not isinstance(key, type):
+ raise TypeError("Parameters to generic types must be types. "
+ "Got {!r}.".format(key))
+
+ t = ListMeta(
+ cls.__name__,
+ cls.__bases__,
+ {
+ '__parameters__': (key,),
+ '__init__': cls.__init__,
+ }
+ )
+
+ return _cache.get(key, t)
+
+
+class List(six.with_metaclass(ListMeta, list)):
+ __parameters__ = ()
+
+ def __init__(self, *_args, **_kwargs):
+ raise TypeError("Type List cannot be instantiated; use list() instead")