mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
1) add force_changes to set_metadata
2) add a 'default=' parameter to Metadata.get_extra, preventing exceptions
This commit is contained in:
parent
8bc2d8f8ac
commit
af22656188
@ -169,10 +169,13 @@ class Metadata(object):
|
|||||||
pass
|
pass
|
||||||
return default
|
return default
|
||||||
|
|
||||||
def get_extra(self, field):
|
def get_extra(self, field, default=None):
|
||||||
_data = object.__getattribute__(self, '_data')
|
_data = object.__getattribute__(self, '_data')
|
||||||
if field in _data['user_metadata'].iterkeys():
|
if field in _data['user_metadata'].iterkeys():
|
||||||
return _data['user_metadata'][field]['#extra#']
|
try:
|
||||||
|
return _data['user_metadata'][field]['#extra#']
|
||||||
|
except:
|
||||||
|
return default
|
||||||
raise AttributeError(
|
raise AttributeError(
|
||||||
'Metadata object has no attribute named: '+ repr(field))
|
'Metadata object has no attribute named: '+ repr(field))
|
||||||
|
|
||||||
|
@ -1690,8 +1690,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
self.notify('metadata', [id])
|
self.notify('metadata', [id])
|
||||||
return books_to_refresh
|
return books_to_refresh
|
||||||
|
|
||||||
def set_metadata(self, id, mi, ignore_errors=False,
|
def set_metadata(self, id, mi, ignore_errors=False, set_title=True,
|
||||||
set_title=True, set_authors=True, commit=True):
|
set_authors=True, commit=True, force_changes=False):
|
||||||
'''
|
'''
|
||||||
Set metadata for the book `id` from the `Metadata` object `mi`
|
Set metadata for the book `id` from the `Metadata` object `mi`
|
||||||
'''
|
'''
|
||||||
@ -1707,6 +1707,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
# force_changes has no role to play in setting title or author
|
||||||
path_changed = False
|
path_changed = False
|
||||||
if set_title and mi.title:
|
if set_title and mi.title:
|
||||||
self._set_title(id, mi.title)
|
self._set_title(id, mi.title)
|
||||||
@ -1721,16 +1722,18 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
path_changed = True
|
path_changed = True
|
||||||
if path_changed:
|
if path_changed:
|
||||||
self.set_path(id, index_is_id=True)
|
self.set_path(id, index_is_id=True)
|
||||||
if mi.author_sort:
|
|
||||||
|
if force_changes or mi.author_sort:
|
||||||
doit(self.set_author_sort, id, mi.author_sort, notify=False,
|
doit(self.set_author_sort, id, mi.author_sort, notify=False,
|
||||||
commit=False)
|
commit=False)
|
||||||
if mi.publisher:
|
if force_changes or mi.publisher:
|
||||||
doit(self.set_publisher, id, mi.publisher, notify=False,
|
doit(self.set_publisher, id, mi.publisher, notify=False,
|
||||||
commit=False)
|
commit=False)
|
||||||
if mi.rating:
|
if force_changes or mi.rating:
|
||||||
doit(self.set_rating, id, mi.rating, notify=False, commit=False)
|
doit(self.set_rating, id, mi.rating, notify=False, commit=False)
|
||||||
if mi.series:
|
if force_changes or mi.series:
|
||||||
doit(self.set_series, id, mi.series, notify=False, commit=False)
|
doit(self.set_series, id, mi.series, notify=False, commit=False)
|
||||||
|
|
||||||
if mi.cover_data[1] is not None:
|
if mi.cover_data[1] is not None:
|
||||||
doit(self.set_cover, id, mi.cover_data[1], commit=False)
|
doit(self.set_cover, id, mi.cover_data[1], commit=False)
|
||||||
elif mi.cover is not None:
|
elif mi.cover is not None:
|
||||||
@ -1739,13 +1742,18 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
raw = f.read()
|
raw = f.read()
|
||||||
if raw:
|
if raw:
|
||||||
doit(self.set_cover, id, raw, commit=False)
|
doit(self.set_cover, id, raw, commit=False)
|
||||||
if mi.tags:
|
elif force_changes:
|
||||||
|
doit(self.remove_cover, id, notify=False, commit=False)
|
||||||
|
|
||||||
|
if force_changes or mi.tags:
|
||||||
doit(self.set_tags, id, mi.tags, notify=False, commit=False)
|
doit(self.set_tags, id, mi.tags, notify=False, commit=False)
|
||||||
if mi.comments:
|
if force_changes or mi.comments:
|
||||||
doit(self.set_comment, id, mi.comments, notify=False, commit=False)
|
doit(self.set_comment, id, mi.comments, notify=False, commit=False)
|
||||||
if mi.series_index:
|
if force_changes or mi.series_index:
|
||||||
doit(self.set_series_index, id, mi.series_index, notify=False,
|
doit(self.set_series_index, id, mi.series_index, notify=False,
|
||||||
commit=False)
|
commit=False)
|
||||||
|
|
||||||
|
# force_changes would have no effect on the next two.
|
||||||
if mi.pubdate:
|
if mi.pubdate:
|
||||||
doit(self.set_pubdate, id, mi.pubdate, notify=False, commit=False)
|
doit(self.set_pubdate, id, mi.pubdate, notify=False, commit=False)
|
||||||
if getattr(mi, 'timestamp', None) is not None:
|
if getattr(mi, 'timestamp', None) is not None:
|
||||||
@ -1756,7 +1764,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
if mi_idents:
|
if mi_idents:
|
||||||
identifiers = self.get_identifiers(id, index_is_id=True)
|
identifiers = self.get_identifiers(id, index_is_id=True)
|
||||||
for key, val in mi_idents.iteritems():
|
for key, val in mi_idents.iteritems():
|
||||||
if val and val.strip(): # Don't delete an existing identifier
|
if force_changes or (val and val.strip()):
|
||||||
identifiers[icu_lower(key)] = val
|
identifiers[icu_lower(key)] = val
|
||||||
self.set_identifiers(id, identifiers, notify=False, commit=False)
|
self.set_identifiers(id, identifiers, notify=False, commit=False)
|
||||||
|
|
||||||
@ -1765,10 +1773,10 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
for key in user_mi.iterkeys():
|
for key in user_mi.iterkeys():
|
||||||
if key in self.field_metadata and \
|
if key in self.field_metadata and \
|
||||||
user_mi[key]['datatype'] == self.field_metadata[key]['datatype']:
|
user_mi[key]['datatype'] == self.field_metadata[key]['datatype']:
|
||||||
doit(self.set_custom, id,
|
val = mi.get(key, None)
|
||||||
val=mi.get(key),
|
if force_changes or val:
|
||||||
extra=mi.get_extra(key),
|
doit(self.set_custom, id, val=val, extra=mi.get_extra(key),
|
||||||
label=user_mi[key]['label'], commit=False)
|
label=user_mi[key]['label'], commit=False)
|
||||||
if commit:
|
if commit:
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
self.notify('metadata', [id])
|
self.notify('metadata', [id])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user