groups[ns].append(item) A = ElementMaker(namespace=NS_MAP['x'], nsmap=nsmap('x')) R = ElementMaker(namespace=NS_MAP['rdf'], nsmap=nsmap('rdf')) root = A.xmpmeta(R.RDF) rdf = root[0] for namespace in sorted(groups, key=lambda x: { NS_MAP['dc']: 'a', NS_MAP['xmp']: 'b', NS_MAP['calibre']: 'c' }.get(x, 'z' + x)): items = groups[namespace] desc = rdf.makeelement(expand('rdf:Description'), nsmap=find_nsmap(items)) desc.set(expand('rdf:about'), '') rdf.append(desc) for item in items: clone_into(desc, item) return serialize_xmp_packet(root) if __name__ == '__main__': from calibre.utils.podofo import get_xmp_metadata xmp_packet = get_xmp_metadata(sys.argv[-1]) mi = metadata_from_xmp_packet(xmp_packet) np = metadata_to_xmp_packet(mi) print(merge_xmp_packet(xmp_packet, np))
for item in item_xpath(new): ns = item.nsmap[item.prefix] groups[ns].append(item) for item in item_xpath(old): ns = item.nsmap[item.prefix] groups[ns].append(item) A = ElementMaker(namespace=NS_MAP['x'], nsmap=nsmap('x')) R = ElementMaker(namespace=NS_MAP['rdf'], nsmap=nsmap('rdf')) root = A.xmpmeta(R.RDF) rdf = root[0] for namespace in sorted(groups, key=lambda x:{NS_MAP['dc']:'a', NS_MAP['xmp']:'b', NS_MAP['calibre']:'c'}.get(x, 'z'+x)): items = groups[namespace] desc = rdf.makeelement(expand('rdf:Description'), nsmap=find_nsmap(items)) desc.set(expand('rdf:about'), '') rdf.append(desc) for item in items: clone_into(desc, item) return serialize_xmp_packet(root) if __name__ == '__main__': from calibre.utils.podofo import get_xmp_metadata xmp_packet = get_xmp_metadata(sys.argv[-1]) mi = metadata_from_xmp_packet(xmp_packet) np = metadata_to_xmp_packet(mi) print (merge_xmp_packet(xmp_packet, np))