class fixedDict(dict): """ This allows for imposing a set keys. When using as parameters it forces the user to use only allowed keys """ def __init__(self, *args, **kwargs): self.update(*args, **kwargs) def __delitem__(self, key): dict.__delitem__(self, key) def __setitem__(self, key, item): if key not in self.keys(): raise KeyError("The key {} is not defined.".format(key)) dict.__setitem__(self, key, item) def __repr__(self): dictrepr = dict.__repr__(self) return dictrepr # return '%s(%s)' % (type(self).__name__, dictrepr) def clear(self): dict.clear(self) def copy(self): copydict = dict.copy(self) return fixedDict(copydict) def items(self): return zip(self.keys(), self.values()) def keys(self): return dict.keys(self) def update(self, *args, **kwargs): for key, value in dict(*args, **kwargs).iteritems(): dict.__setitem__(self, key,value)