diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-04-11 15:33:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-11 15:33:01 +0200 |
commit | c27f13ab459ef5116eeac417d256abfabf2690c2 (patch) | |
tree | 7b58f7a9fc88bfa24efde7a2196b923f78c96586 /python/vyos/dicts.py | |
parent | 74f498f8119a53c801b5e8d37186742b8b303734 (diff) | |
parent | e12a0ce922b67354ecd8e53414cda6b8b3a424fb (diff) | |
download | vyos-1x-c27f13ab459ef5116eeac417d256abfabf2690c2.tar.gz vyos-1x-c27f13ab459ef5116eeac417d256abfabf2690c2.zip |
Merge pull request #326 from thomas-mangin/T2265
dhcp: T2265: refactor DHCP class
Diffstat (limited to 'python/vyos/dicts.py')
-rw-r--r-- | python/vyos/dicts.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/python/vyos/dicts.py b/python/vyos/dicts.py new file mode 100644 index 000000000..79cab4a08 --- /dev/null +++ b/python/vyos/dicts.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +class FixedDict(dict): + """ + FixedDict: A dictionnary not allowing new keys to be created after initialisation. + + >>> f = FixedDict(**{'count':1}) + >>> f['count'] = 2 + >>> f['king'] = 3 + File "...", line ..., in __setitem__ + raise ConfigError(f'Option "{k}" has no defined default') + """ + + def __init__(self, **options): + self._allowed = options.keys() + super().__init__(**options) + + def __setitem__(self, k, v): + """ + __setitem__ is a builtin which is called by python when setting dict values: + >>> d = dict() + >>> d['key'] = 'value' + >>> d + {'key': 'value'} + + is syntaxic sugar for + + >>> d = dict() + >>> d.__setitem__('key','value') + >>> d + {'key': 'value'} + """ + if k not in self._allowed: + raise ConfigError(f'Option "{k}" has no defined default') + super().__setitem__(k, v) |