diff options
Diffstat (limited to 'ipapython/install/typing.py')
| -rw-r--r-- | ipapython/install/typing.py | 34 |
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") |
