Source code for zict.func
from __future__ import absolute_import, division, print_function
from .common import ZictBase, close
[docs]class Func(ZictBase):
""" Buffer a MutableMapping with a pair of input/output functions
Parameters
----------
dump: callable
Function to call on value as we set it into the mapping
load: callable
Function to call on value as we pull it from the mapping
d: MutableMapping
Examples
--------
>>> def double(x):
... return x * 2
>>> def halve(x):
... return x / 2
>>> d = dict()
>>> f = Func(double, halve, d)
>>> f['x'] = 10
>>> d
{'x': 20}
>>> f['x']
10.0
"""
def __init__(self, dump, load, d):
self.dump = dump
self.load = load
self.d = d
def __getitem__(self, key):
return self.load(self.d[key])
def __setitem__(self, key, value):
self.d[key] = self.dump(value)
def __contains__(self, key):
return key in self.d
def __delitem__(self, key):
del self.d[key]
[docs] def keys(self):
return self.d.keys()
[docs] def values(self):
return map(self.load, self.d.values())
[docs] def items(self):
return ((k, self.load(v)) for k, v in self.d.items())
def _do_update(self, items):
self.d.update((k, self.dump(v)) for k, v in items)
def __iter__(self):
return iter(self.d)
def __len__(self):
return len(self.d)
def __str__(self):
return '<Func: %s<->%s %s>' % (funcname(self.dump),
funcname(self.load),
str(self.d))
__repr__ = __str__
def flush(self):
self.d.flush()
[docs] def close(self):
close(self.d)
def funcname(func):
"""Get the name of a function."""
while hasattr(func, 'func'):
func = func.func
try:
return func.__name__
except:
return str(func)