def create_user_metadata(calibre, all_user_metadata): from calibre.utils.config import to_json from calibre.ebooks.metadata.book.json_codec import object_to_unicode, encode_is_multiple s = calibre.makeelement(expand('calibre:custom_metadata')) calibre.append(s) bag = s.makeelement(expand('rdf:Bag')) s.append(bag) for name, fm in iteritems(all_user_metadata): try: fm = copy.copy(fm) encode_is_multiple(fm) fm = object_to_unicode(fm) fm = json.dumps(fm, default=to_json, ensure_ascii=False) except: prints('Failed to write user metadata:', name) import traceback traceback.print_exc() continue li = bag.makeelement(expand('rdf:li')) li.set(expand('rdf:parseType'), 'Resource') bag.append(li) n = li.makeelement(expand('calibreCC:name')) li.append(n) n.text = name val = li.makeelement(expand('rdf:value')) val.text = fm li.append(val)
def create_user_metadata(calibre, all_user_metadata): from calibre.utils.config import to_json from calibre.ebooks.metadata.book.json_codec import object_to_unicode, encode_is_multiple s = calibre.makeelement(expand('calibre:custom_metadata')) calibre.append(s) bag = s.makeelement(expand('rdf:Bag')) s.append(bag) for name, fm in all_user_metadata.iteritems(): try: fm = copy.copy(fm) encode_is_multiple(fm) fm = object_to_unicode(fm) fm = json.dumps(fm, default=to_json, ensure_ascii=False) except: prints('Failed to write user metadata:', name) import traceback traceback.print_exc() continue li = bag.makeelement(expand('rdf:li')) li.set(expand('rdf:parseType'), 'Resource') bag.append(li) n = li.makeelement(expand('calibreCC:name')) li.append(n) n.text = name val = li.makeelement(expand('rdf:value')) val.text = fm li.append(val)
def serialize_user_metadata(val): return json.dumps(object_to_unicode(val), ensure_ascii=False, default=to_json, indent=2, sort_keys=True)
def dump_dict(cats): return json.dumps(object_to_unicode(cats or {}), ensure_ascii=False, skipkeys=True)