+ # suitable fallback, e.g.
+ self.converters = DEFAULT_CONVERTERS.copy()
+ if converters is not None:
+ self.converters.update(converters)
+
+ def _convert_field(self, key, value):
+ try:
+ result = self.converters[key](value)
+ except KeyError:
+ # Default conversion in unicode
+ try:
+ result = _convert_unicode(value)
+ except:
+ # Leave in default bytes
+ result = value
+ return result
+
+ def _convert_entry(self, entry):
+ result = {}
+ for key, value in entry.iteritems():
+ if isinstance(value, list):
+ result[key] = [self._convert_field(key, val) for val in value]
+ else:
+ result[key] = self._convert_field(key, value)
+ return result
+
+ def get_next(self, *args, **kwargs):
+ return self._convert_entry(
+ super(Journal, self).get_next(*args, **kwargs))
+
+ def query_unique(self, key, *args, **kwargs):
+ return set(self._convert_field(key, value)
+ for value in super(Journal, self).query_unique(key, *args, **kwargs))