diff --git a/src/calibre/ebooks/metadata/opf3.py b/src/calibre/ebooks/metadata/opf3.py index 7bfd51becc..6f41a58119 100644 --- a/src/calibre/ebooks/metadata/opf3.py +++ b/src/calibre/ebooks/metadata/opf3.py @@ -421,7 +421,7 @@ def set_authors(root, prefixes, refines, authors): for item in XPath('./opf:metadata/dc:creator')(root): props = properties_for_id_with_scheme(item.get('id'), prefixes, refines) opf_role = item.get(OPF('role')) - if (is_relators_role(props, 'aut')) or (opf_role and opf_role.lower() != 'aut'): + if (opf_role and opf_role.lower() != 'aut') or (props.get('role') and not is_relators_role(props, 'aut')): continue remove_element(item, refines) metadata = XPath('./opf:metadata')(root)[0] @@ -457,7 +457,7 @@ 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) opf_role = item.get(OPF('role')) - if (is_relators_role(props, 'bkp')) or (opf_role and opf_role.lower() != 'bkp'): + if (opf_role and opf_role.lower() != 'bkp') or (props.get('role') and not is_relators_role(props, 'bkp')): continue remove_element(item, refines) metadata = XPath('./opf:metadata')(root)[0] diff --git a/src/calibre/ebooks/metadata/opf3_test.py b/src/calibre/ebooks/metadata/opf3_test.py index 853226cd85..0acaf592d3 100644 --- a/src/calibre/ebooks/metadata/opf3_test.py +++ b/src/calibre/ebooks/metadata/opf3_test.py @@ -141,6 +141,9 @@ class TestOPF3(unittest.TestCase): authors = [Author('x y', 'y, x'), Author('u i', None)] self.ae(authors, st(root, authors)) self.ae(root.get('prefix'), 'calibre: %s' % CALIBRE_PREFIX) + root = self.get_opf('''a bc d''') + self.ae([Author('c d', None)], rl(root)) + self.ae(authors, st(root, authors)) # }}} def test_book_producer(self): # {{{ @@ -155,7 +158,7 @@ class TestOPF3(unittest.TestCase): self.ae(['c d'], rl(root)) root = self.get_opf('''a bc d''') self.ae(['c d'], rl(root)) - self.ae('12'.split(), st(root, '12'.split())) + self.ae(['12'], st(root, ['12'])) # }}} def test_dates(self): # {{{