storage: move load/dumps into their own class methods (#4739)

This commit is contained in:
Frédéric Péters 2014-11-24 16:14:58 +01:00
parent cbd6204d87
commit 7c592ad9d2
1 changed files with 11 additions and 3 deletions

View File

@ -277,13 +277,17 @@ class StorableObject(object):
return cls.get_ids(ids)
get_with_indexed_value = classmethod(get_with_indexed_value)
def get_filename(cls, filename, ignore_errors=False, ignore_migration=False):
def storage_load(cls, fd):
if get_publisher() and get_publisher().unpickler_class:
unpickler = get_publisher().unpickler_class
else:
unpickler = pickle.Unpickler
return unpickler(fd).load()
storage_load = classmethod(storage_load)
def get_filename(cls, filename, ignore_errors=False, ignore_migration=False):
try:
o = unpickler(file(filename)).load()
o = cls.storage_load(file(filename))
except IOError:
if ignore_errors:
return None
@ -370,6 +374,10 @@ class StorableObject(object):
objects_dir = self.get_objects_dir()
return os.path.join(objects_dir, fix_key(self.id))
def storage_dumps(cls, object):
return pickle.dumps(object)
storage_dumps = classmethod(storage_dumps)
def store(self, async=False):
objects_dir = self.get_objects_dir()
new_object = False
@ -398,7 +406,7 @@ class StorableObject(object):
previous_object_value = self.get_filename(object_filename,
ignore_errors=True, ignore_migration=True)
s = pickle.dumps(self)
s = self.storage_dumps(self)
atomic_write(object_filename, s, async)
# update last modified time
if os.path.exists(objects_dir):