def upgrade_authors(root, data): for which in 'creator', 'contributor': for elem in XPath('./opf:metadata/dc:' + which)(root): role = elem.attrib.pop(OPF('role'), None) sort = elem.attrib.pop(OPF('file-as'), None) if role or sort: aid = ensure_id(elem) metadata = elem.getparent() if role: m = metadata.makeelement(OPF('meta'), attrib={ 'refines': '#' + aid, 'property': 'role', 'scheme': 'marc:relators' }) m.text = role metadata.append(m) if sort: m = metadata.makeelement(OPF('meta'), attrib={ 'refines': '#' + aid, 'property': 'file-as' }) m.text = sort metadata.append(m)
def upgrade_identifiers(root, data): for ident in XPath('./opf:metadata/dc:identifier')(root): val = (ident.text or '').strip() lval = val.lower() scheme = ident.attrib.pop(OPF('scheme'), None) if lval.startswith('urn:'): prefix, rest = val[4:].partition(':')[::2] if prefix and rest: scheme, val = prefix, rest if scheme and val: ident.text = '{}:{}'.format(scheme, val) for attr in tuple(ident.attrib): if attr != 'id': del ident.attrib[attr]