mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
EPUB3 metadata: Ensure updating metadata never produces empty dc:contributor elements. Fixes #1644702 [Calibre puts in <dc:contributor id="id-6"/>](https://bugs.launchpad.net/calibre/+bug/1644702)
This commit is contained in:
parent
44345abdd9
commit
dc6665c73e
@ -145,6 +145,8 @@ def items_with_property(root, q, prefixes=None):
|
|||||||
# Prefixes {{{
|
# Prefixes {{{
|
||||||
|
|
||||||
# http://www.idpf.org/epub/vocab/package/pfx/
|
# http://www.idpf.org/epub/vocab/package/pfx/
|
||||||
|
|
||||||
|
|
||||||
reserved_prefixes = {
|
reserved_prefixes = {
|
||||||
'dcterms': 'http://purl.org/dc/terms/',
|
'dcterms': 'http://purl.org/dc/terms/',
|
||||||
'epubsc': 'http://idpf.org/epub/vocab/sc/#',
|
'epubsc': 'http://idpf.org/epub/vocab/sc/#',
|
||||||
@ -319,6 +321,8 @@ def identifier_writer(name):
|
|||||||
p = package_identifier.getparent()
|
p = package_identifier.getparent()
|
||||||
p.insert(p.index(package_identifier), ident)
|
p.insert(p.index(package_identifier), ident)
|
||||||
return writer
|
return writer
|
||||||
|
|
||||||
|
|
||||||
set_application_id = identifier_writer('calibre')
|
set_application_id = identifier_writer('calibre')
|
||||||
set_uuid = identifier_writer('uuid')
|
set_uuid = identifier_writer('uuid')
|
||||||
|
|
||||||
@ -411,6 +415,7 @@ def set_languages(root, prefixes, refines, languages):
|
|||||||
|
|
||||||
# Creator/Contributor {{{
|
# Creator/Contributor {{{
|
||||||
|
|
||||||
|
|
||||||
Author = namedtuple('Author', 'name sort')
|
Author = namedtuple('Author', 'name sort')
|
||||||
|
|
||||||
|
|
||||||
@ -500,6 +505,7 @@ def set_book_producers(root, prefixes, refines, producers):
|
|||||||
remove_element(item, refines)
|
remove_element(item, refines)
|
||||||
metadata = XPath('./opf:metadata')(root)[0]
|
metadata = XPath('./opf:metadata')(root)[0]
|
||||||
for bkp in producers:
|
for bkp in producers:
|
||||||
|
if bkp:
|
||||||
a = metadata.makeelement(DC('contributor'))
|
a = metadata.makeelement(DC('contributor'))
|
||||||
aid = ensure_id(a)
|
aid = ensure_id(a)
|
||||||
a.text = bkp
|
a.text = bkp
|
||||||
@ -778,6 +784,7 @@ def dict_reader(name, load=json.loads, try2=True):
|
|||||||
continue
|
continue
|
||||||
return reader
|
return reader
|
||||||
|
|
||||||
|
|
||||||
read_user_categories = dict_reader('user_categories')
|
read_user_categories = dict_reader('user_categories')
|
||||||
read_author_link_map = dict_reader('author_link_map')
|
read_author_link_map = dict_reader('author_link_map')
|
||||||
|
|
||||||
@ -801,6 +808,7 @@ def dict_writer(name, serialize=dump_dict, remove2=True):
|
|||||||
m.append(d)
|
m.append(d)
|
||||||
return writer
|
return writer
|
||||||
|
|
||||||
|
|
||||||
set_user_categories = dict_writer('user_categories')
|
set_user_categories = dict_writer('user_categories')
|
||||||
set_author_link_map = dict_writer('author_link_map')
|
set_author_link_map = dict_writer('author_link_map')
|
||||||
|
|
||||||
@ -812,6 +820,8 @@ def deserialize_user_metadata(val):
|
|||||||
decode_is_multiple(fm)
|
decode_is_multiple(fm)
|
||||||
ans[name] = fm
|
ans[name] = fm
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
|
||||||
read_user_metadata3 = dict_reader('user_metadata', load=deserialize_user_metadata, try2=False)
|
read_user_metadata3 = dict_reader('user_metadata', load=deserialize_user_metadata, try2=False)
|
||||||
|
|
||||||
|
|
||||||
@ -842,6 +852,7 @@ def read_user_metadata(root, prefixes, refines):
|
|||||||
def serialize_user_metadata(val):
|
def serialize_user_metadata(val):
|
||||||
return json.dumps(object_to_unicode(val), ensure_ascii=False, default=to_json, indent=2, sort_keys=True)
|
return json.dumps(object_to_unicode(val), ensure_ascii=False, default=to_json, indent=2, sort_keys=True)
|
||||||
|
|
||||||
|
|
||||||
set_user_metadata3 = dict_writer('user_metadata', serialize=serialize_user_metadata, remove2=False)
|
set_user_metadata3 = dict_writer('user_metadata', serialize=serialize_user_metadata, remove2=False)
|
||||||
|
|
||||||
|
|
||||||
@ -931,6 +942,7 @@ def read_metadata(root, ver=None, return_extra_data=False):
|
|||||||
ans.author_sort = authors_to_string(aus) or ans.author_sort
|
ans.author_sort = authors_to_string(aus) or ans.author_sort
|
||||||
bkp = read_book_producers(root, prefixes, refines)
|
bkp = read_book_producers(root, prefixes, refines)
|
||||||
if bkp:
|
if bkp:
|
||||||
|
if bkp[0]:
|
||||||
ans.book_producer = bkp[0]
|
ans.book_producer = bkp[0]
|
||||||
pd = read_pubdate(root, prefixes, refines)
|
pd = read_pubdate(root, prefixes, refines)
|
||||||
if not is_date_undefined(pd):
|
if not is_date_undefined(pd):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user