Add a special deepcopy that only copies metadata, not the other random attributes that have been added.

This commit is contained in:
Charles Haley 2010-10-04 14:02:33 +01:00
parent 4ae7a3b8c9
commit 7e1e6bd746
4 changed files with 8 additions and 3 deletions

View File

@ -360,7 +360,7 @@ class XMLCache(object):
if record is None: if record is None:
record = self.create_text_record(root, i, book.lpath) record = self.create_text_record(root, i, book.lpath)
if plugboard is not None: if plugboard is not None:
newmi = book.deepcopy() newmi = book.deepcopy_metadata()
newmi.template_to_attribute(book, plugboard) newmi.template_to_attribute(book, plugboard)
else: else:
newmi = book newmi = book

View File

@ -148,6 +148,11 @@ class Metadata(object):
object.__setattr__(m, '_data', copy.deepcopy(object.__getattribute__(self, '_data'))) object.__setattr__(m, '_data', copy.deepcopy(object.__getattribute__(self, '_data')))
return m 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): def get(self, field, default=None):
try: try:
return self.__getattribute__(field) return self.__getattribute__(field)

View File

@ -357,7 +357,7 @@ class DeviceManager(Thread): # {{{
f, file=sys.__stdout__) f, file=sys.__stdout__)
with open(f, 'r+b') as stream: with open(f, 'r+b') as stream:
if cpb: if cpb:
newmi = mi.deepcopy() newmi = mi.deepcopy_metadata()
newmi.template_to_attribute(mi, cpb) newmi.template_to_attribute(mi, cpb)
else: else:
newmi = mi newmi = mi

View File

@ -281,7 +281,7 @@ def save_book_to_disk(id, db, root, opts, length):
stream.seek(0) stream.seek(0)
try: try:
if cpb: if cpb:
newmi = mi.deepcopy() newmi = mi.deepcopy_metadata()
newmi.template_to_attribute(mi, cpb) newmi.template_to_attribute(mi, cpb)
else: else:
newmi = mi newmi = mi