from collections.abc import MutableMapping class PP_Context(MutableMapping): def __init__(self, *args, **context): self.store = dict() self.update(dict(*args, **context)) def get(self, thing): return self.store.get(thing) def get_or_set(self, thing, this): if self._has(thing): return self.get(thing) self.set(thing, this) return self.get(thing) def get_or_false(self, thing): if self._has(thing): ret = self.get(thing) if not ret is None: return ret return False def set(self, thing, value): self.__setitem__(thing, value) def _has(self, thing): if (isinstance(thing, str) or isinstance(thing, int)) and thing in self.store: return True return False def __getitem__(self, key): return self.store[self.__keytransform__(key)] def __setitem__(self, key, value): self.store[self.__keytransform__(key)] = value setattr(self, self.__keytransform__(key), value) def __delitem__(self, key): del self.store[self.__keytransform__(key)] delattr(self, self.__keytransform__(key)) def __iter__(self): return iter(self.store) def __len__(self): return len(self.store) def __keytransform__(self, key): # :D return key.lower()