diff --git a/src/calibre/devices/prs505/sony_cache.py b/src/calibre/devices/prs505/sony_cache.py index 5247e051f1..38d2001709 100644 --- a/src/calibre/devices/prs505/sony_cache.py +++ b/src/calibre/devices/prs505/sony_cache.py @@ -360,7 +360,7 @@ class XMLCache(object): if record is None: record = self.create_text_record(root, i, book.lpath) if plugboard is not None: - newmi = book.deepcopy() + newmi = book.deepcopy_metadata() newmi.template_to_attribute(book, plugboard) else: newmi = book diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 29a285918f..6106bea180 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -148,6 +148,11 @@ class Metadata(object): object.__setattr__(m, '_data', copy.deepcopy(object.__getattribute__(self, '_data'))) return m + def deepcopy_metadata(self): + m = Metadata(None) + object.__setattr__(m, '_data', copy.deepcopy(object.__getattribute__(self, '_data'))) + return m + def get(self, field, default=None): try: return self.__getattribute__(field) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index d06b77b4e2..f6e575439a 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -357,7 +357,7 @@ class DeviceManager(Thread): # {{{ f, file=sys.__stdout__) with open(f, 'r+b') as stream: if cpb: - newmi = mi.deepcopy() + newmi = mi.deepcopy_metadata() newmi.template_to_attribute(mi, cpb) else: newmi = mi diff --git a/src/calibre/library/save_to_disk.py b/src/calibre/library/save_to_disk.py index c86b83e001..27de7667c1 100644 --- a/src/calibre/library/save_to_disk.py +++ b/src/calibre/library/save_to_disk.py @@ -281,7 +281,7 @@ def save_book_to_disk(id, db, root, opts, length): stream.seek(0) try: if cpb: - newmi = mi.deepcopy() + newmi = mi.deepcopy_metadata() newmi.template_to_attribute(mi, cpb) else: newmi = mi