mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -04:00
More tests for OPF 3
This commit is contained in:
parent
f744c3790e
commit
7734059ff8
@ -360,6 +360,13 @@ def set_languages(root, prefixes, refines, languages):
|
||||
|
||||
Author = namedtuple('Author', 'name sort')
|
||||
|
||||
def is_relators_role(props, q):
|
||||
role = props.get('role')
|
||||
if role:
|
||||
scheme_ns, scheme, role = role
|
||||
return role.lower() == q and (scheme_ns is None or (scheme_ns, scheme) == (reserved_prefixes['marc'], 'relators'))
|
||||
return False
|
||||
|
||||
def read_authors(root, prefixes, refines):
|
||||
roled_authors, unroled_authors = [], []
|
||||
|
||||
@ -379,8 +386,7 @@ def read_authors(root, prefixes, refines):
|
||||
role = props.get('role')
|
||||
opf_role = item.get(OPF('role'))
|
||||
if role:
|
||||
scheme_ns, scheme, role = role
|
||||
if role.lower() == 'aut' and (scheme_ns is None or (scheme_ns, scheme) == (reserved_prefixes['marc'], 'relators')):
|
||||
if is_relators_role(props, 'aut'):
|
||||
roled_authors.append(author(item, props, val))
|
||||
elif opf_role:
|
||||
if opf_role.lower() == 'aut':
|
||||
@ -394,9 +400,8 @@ def set_authors(root, prefixes, refines, authors):
|
||||
ensure_prefix(root, prefixes, 'marc')
|
||||
for item in XPath('./opf:metadata/dc:creator')(root):
|
||||
props = properties_for_id_with_scheme(item.get('id'), prefixes, refines)
|
||||
role = props.get('role')
|
||||
opf_role = item.get(OPF('role'))
|
||||
if (role and role.lower() != 'aut') or (opf_role and opf_role.lower() != 'aut'):
|
||||
if (is_relators_role(props, 'aut')) or (opf_role and opf_role.lower() != 'aut'):
|
||||
continue
|
||||
remove_element(item, refines)
|
||||
metadata = XPath('./opf:metadata')(root)[0]
|
||||
@ -422,8 +427,7 @@ def read_book_producers(root, prefixes, refines):
|
||||
role = props.get('role')
|
||||
opf_role = item.get(OPF('role'))
|
||||
if role:
|
||||
scheme_ns, scheme, role = role
|
||||
if role.lower() == 'bkp' and (scheme_ns is None or (scheme_ns, scheme) == (reserved_prefixes['marc'], 'relators')):
|
||||
if is_relators_role(props, 'bkp'):
|
||||
ans.append(normalize_whitespace(val))
|
||||
elif opf_role and opf_role.lower() == 'bkp':
|
||||
ans.append(normalize_whitespace(val))
|
||||
@ -432,9 +436,8 @@ def read_book_producers(root, prefixes, refines):
|
||||
def set_book_producers(root, prefixes, refines, producers):
|
||||
for item in XPath('./opf:metadata/dc:contributor')(root):
|
||||
props = properties_for_id_with_scheme(item.get('id'), prefixes, refines)
|
||||
role = props.get('role')
|
||||
opf_role = item.get(OPF('role'))
|
||||
if (role and role.lower() != 'bkp') or (opf_role and opf_role.lower() != 'bkp'):
|
||||
if (is_relators_role(props, 'bkp')) or (opf_role and opf_role.lower() != 'bkp'):
|
||||
continue
|
||||
remove_element(item, refines)
|
||||
metadata = XPath('./opf:metadata')(root)[0]
|
||||
|
@ -24,6 +24,9 @@ from calibre.ebooks.metadata.opf3 import (
|
||||
read_author_link_map, read_user_categories, set_author_link_map, set_user_categories,
|
||||
apply_metadata
|
||||
)
|
||||
# This import is needed to prevent a test from running slowly
|
||||
from calibre.ebooks.oeb.polish.pretty import pretty_opf, pretty_xml_tree # noqa
|
||||
|
||||
read_author_link_map, read_user_categories, set_author_link_map, set_user_categories
|
||||
|
||||
TEMPLATE = '''<package xmlns="http://www.idpf.org/2007/opf" version="3.0" prefix="calibre: %s" unique-identifier="uid"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">{metadata}</metadata></package>''' % CALIBRE_PREFIX # noqa
|
||||
@ -487,6 +490,21 @@ class TestOPF3(unittest.TestCase):
|
||||
compare_metadata(mi2, mi3)
|
||||
apply_metadata(root, mi3)
|
||||
compare_metadata(mi3, read_metadata(root))
|
||||
mi3.tags = []
|
||||
mi3.set('#tags', [])
|
||||
mi3.set('#number', 0)
|
||||
mi3.set('#commetns', '')
|
||||
apply_metadata(root, mi3)
|
||||
nmi = read_metadata(root)
|
||||
self.assertEqual(mi2.tags, nmi.tags)
|
||||
self.assertEqual(mi2.get('#tags'), nmi.get('#tags'))
|
||||
self.assertEqual(mi2.get('#commetns'), nmi.get('#commetns'))
|
||||
self.assertEqual(0, nmi.get('#number'))
|
||||
apply_metadata(root, mi3, apply_null=True)
|
||||
nmi = read_metadata(root)
|
||||
self.assertFalse(nmi.tags)
|
||||
self.assertFalse(nmi.get('#tags'))
|
||||
self.assertFalse(nmi.get('#commetns'))
|
||||
# }}}
|
||||
|
||||
# Run tests {{{
|
||||
|
Loading…
x
Reference in New Issue
Block a user