summaryrefslogtreecommitdiff
path: root/game/python-extra/utils/dicts/limited_dict.py
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2020-12-09 13:32:01 -0300
committerJesusaves <cpntb1@ymail.com>2020-12-09 13:32:01 -0300
commit63afe4145f410a844c647d4e3f1059f568175c1e (patch)
tree15da6a890c78d73370f44f9fd5d59badfbbe60e4 /game/python-extra/utils/dicts/limited_dict.py
downloadclient-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.py40
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