diff options
author | Jesusaves <cpntb1@ymail.com> | 2020-12-09 13:32:01 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2020-12-09 13:32:01 -0300 |
commit | 63afe4145f410a844c647d4e3f1059f568175c1e (patch) | |
tree | 15da6a890c78d73370f44f9fd5d59badfbbe60e4 /game/python-extra/utils/dicts/limited_dict.py | |
download | client-init.tar.gz client-init.tar.bz2 client-init.tar.xz client-init.zip |
Initial commit, forked from Spheresinit
Diffstat (limited to 'game/python-extra/utils/dicts/limited_dict.py')
-rw-r--r-- | game/python-extra/utils/dicts/limited_dict.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/game/python-extra/utils/dicts/limited_dict.py b/game/python-extra/utils/dicts/limited_dict.py new file mode 100644 index 0000000..c690118 --- /dev/null +++ b/game/python-extra/utils/dicts/limited_dict.py @@ -0,0 +1,40 @@ +from collections import MutableMapping + + +class LimitedDict(MutableMapping): + def __init__(self, args=None, **kwargs): + keys = kwargs.pop('keys', []) + self.__keys = keys + + self.__data = {} + + if args: + kwargs.update((key, val) for key, val in args) + + for key, val in kwargs.items(): + self[key] = val + + def __setitem__(self, key, val): + if key not in self.__keys: + raise KeyError("Illegal key: {}".format(key)) + + self.__data[key] = val + + def __getitem__(self, key): + return self.__data[key] + + def __iter__(self): + return self.__data.__iter__() + + def __delitem__(self, key): + del self.__data[key] + + def __len__(self): + return len(self.__data) + + def __repr__(self): + return "{}({}, {})".format(self.__class__.__name__, self.defined_keys, self.__data) + + @property + def defined_keys(self): + return self.__keys |