54 lines
1.4 KiB
Python
54 lines
1.4 KiB
Python
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()
|
|
|