|
|
import pickle
|
|
|
|
|
|
class __UnProvided():
|
|
|
pass
|
|
|
|
|
|
|
|
|
class ObjectStorage():
|
|
|
|
|
|
def __init__(self, storage):
|
|
|
self.storage = storage
|
|
|
|
|
|
def __delitem__(self, key):
|
|
|
del self.storage[pickle.dumps(key)]
|
|
|
|
|
|
def __getitem__(self, key):
|
|
|
return pickle.loads(self.storage[pickle.dumps(key)])
|
|
|
|
|
|
def __setitem__(self, key, value):
|
|
|
self.storage[pickle.dumps(key)] = pickle.dumps(value)
|
|
|
|
|
|
def __contains__(self, key):
|
|
|
return pickle.dumps(key) in self.storage
|
|
|
|
|
|
def get(self, key, default=None):
|
|
|
if pickle.dumps(key) in self.storage:
|
|
|
return self.storage[pickle.dumps(key)]
|
|
|
return default
|
|
|
|
|
|
def pop(self, key, default=__UnProvided()):
|
|
|
if type(default) is __UnProvided or pickle.dumps(key) in self.storage:
|
|
|
return pickle.loads(self.storage.pop(pickle.dumps(key)))
|
|
|
return default
|
|
|
|
|
|
def __iter__(self):
|
|
|
keys = self.keys()
|
|
|
return keys.__iter__()
|
|
|
|
|
|
def keys(self):
|
|
|
return [pickle.loads(key) for key in self.storage.keys()]
|
|
|
|
|
|
def values(self):
|
|
|
return [pickle.loads(val) for val in self.storage.values()]
|
|
|
|
|
|
def items(self):
|
|
|
return list(zip(self.keys(), self.values()))
|
|
|
|
|
|
def clear(self):
|
|
|
self.storage.clear()
|
|
|
|
|
|
def __len__(self):
|
|
|
return len(self.storage)
|
|
|
|