def test_serialize_metadata(self): # {{{ from calibre.utils.serialize import json_dumps, json_loads, msgpack_dumps, msgpack_loads from calibre.library.field_metadata import fm_as_dict cache = self.init_cache(self.library_path) fm = cache.field_metadata for d, l in ((json_dumps, json_loads), (msgpack_dumps, msgpack_loads)): fm2 = l(d(fm)) self.assertEqual(fm_as_dict(fm), fm_as_dict(fm2)) for i in range(1, 4): mi = cache.get_metadata(i, get_cover=True, cover_as_data=True) rmi = msgpack_loads(msgpack_dumps(mi)) self.compare_metadata(mi, rmi, exclude='format_metadata has_cover formats id'.split()) rmi = json_loads(json_dumps(mi)) self.compare_metadata(mi, rmi, exclude='format_metadata has_cover formats id'.split())
def test_serialize_metadata(self): # {{{ from calibre.utils.serialize import json_dumps, json_loads, msgpack_dumps, msgpack_loads from calibre.library.field_metadata import fm_as_dict cache = self.init_cache(self.library_path) fm = cache.field_metadata for d, l in ((json_dumps, json_loads), (msgpack_dumps, msgpack_loads)): fm2 = l(d(fm)) self.assertEqual(fm_as_dict(fm), fm_as_dict(fm2)) for i in range(1, 4): mi = cache.get_metadata(i, get_cover=True, cover_as_data=True) rmi = msgpack_loads(msgpack_dumps(mi)) self.compare_metadata(mi, rmi, exclude='format_metadata has_cover formats id'.split()) rmi = json_loads(json_dumps(mi)) self.compare_metadata(mi, rmi, exclude='format_metadata has_cover formats id'.split())
def get_props(db): props = ('user_version', 'is_second_db', 'library_id', 'custom_column_label_map', 'custom_column_num_map', 'library_path', 'dbpath') fprops = ('last_modified', ) ans = {x:getattr(db, x) for x in props} ans.update({x:getattr(db, x)() for x in fprops}) ans['all_ids'] = frozenset(db.all_ids()) ans['field_metadata'] = fm_as_dict(db.field_metadata) return to_unicode(ans)
def get_props(db): props = ('user_version', 'is_second_db', 'library_id', 'custom_column_label_map', 'custom_column_num_map', 'library_path', 'dbpath') fprops = ('last_modified', ) ans = {x:getattr(db, x) for x in props} ans.update({x:getattr(db, x)() for x in fprops}) ans['all_ids'] = frozenset(db.all_ids()) ans['field_metadata'] = fm_as_dict(db.field_metadata) return to_unicode(ans)
def encoder(obj, for_json=False): if isinstance(obj, datetime): return encoded(0, unicode(obj.isoformat()), for_json) if isinstance(obj, (set, frozenset)): return encoded(1, tuple(obj), for_json) if getattr(obj, '__calibre_serializable__', False): from calibre.ebooks.metadata.book.base import Metadata from calibre.library.field_metadata import FieldMetadata, fm_as_dict from calibre.db.categories import Tag if isinstance(obj, Metadata): from calibre.ebooks.metadata.book.serialize import metadata_as_dict return encoded( 2, metadata_as_dict(obj, encode_cover_data=for_json), for_json ) elif isinstance(obj, FieldMetadata): return encoded(3, fm_as_dict(obj), for_json) elif isinstance(obj, Tag): return encoded(4, obj.as_dict(), for_json) raise TypeError('Cannot serialize objects of type {}'.format(type(obj)))