diff options
author | Malik Talha <talhamalik727x@gmail.com> | 2023-10-22 21:06:23 +0500 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2023-10-23 14:38:13 +0000 |
commit | 697a1adce1e463079e640b55d6386cf82d7bd6bc (patch) | |
tree | 86e299cc7fe12b10c2e549f640924b61c7d07a95 /snips_inference_agl/common/dict_utils.py | |
parent | 97029ab8141e654a170a2282106f854037da294f (diff) |
Add Snips Inference Module
Add slightly modified version of the original Snips NLU
library. This module adds support for Python upto version
3.10.
Bug-AGL: SPEC-4856
Signed-off-by: Malik Talha <talhamalik727x@gmail.com>
Change-Id: I6d7e9eb181e6ff4aed9b6291027877ccb9f0d846
Diffstat (limited to 'snips_inference_agl/common/dict_utils.py')
-rw-r--r-- | snips_inference_agl/common/dict_utils.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/snips_inference_agl/common/dict_utils.py b/snips_inference_agl/common/dict_utils.py new file mode 100644 index 0000000..a70b217 --- /dev/null +++ b/snips_inference_agl/common/dict_utils.py @@ -0,0 +1,36 @@ +from collections import OrderedDict + + +class LimitedSizeDict(OrderedDict): + def __init__(self, *args, **kwds): + if "size_limit" not in kwds: + raise ValueError("'size_limit' must be passed as a keyword " + "argument") + self.size_limit = kwds.pop("size_limit") + if len(args) > 1: + raise TypeError('expected at most 1 arguments, got %d' % len(args)) + if len(args) == 1 and len(args[0]) + len(kwds) > self.size_limit: + raise ValueError("Tried to initialize LimitedSizedDict with more " + "value than permitted with 'limit_size'") + super(LimitedSizeDict, self).__init__(*args, **kwds) + + def __setitem__(self, key, value, dict_setitem=OrderedDict.__setitem__): + dict_setitem(self, key, value) + self._check_size_limit() + + def _check_size_limit(self): + if self.size_limit is not None: + while len(self) > self.size_limit: + self.popitem(last=False) + + def __eq__(self, other): + if self.size_limit != other.size_limit: + return False + return super(LimitedSizeDict, self).__eq__(other) + + +class UnupdatableDict(dict): + def __setitem__(self, key, value): + if key in self: + raise KeyError("Can't update key '%s'" % key) + super(UnupdatableDict, self).__setitem__(key, value) |