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 set_user_metadata(root, prefixes, refines, val): for meta in XPath('./opf:metadata/opf:meta[starts-with(@name, "calibre:user_metadata:")]')(root): remove_element(meta, refines) if val: nval = {} for name, fm in val.items(): fm = fm.copy() encode_is_multiple(fm) nval[name] = fm set_user_metadata3(root, prefixes, refines, nval)