Prevent saving different version objects
This commit is contained in:
parent
cb3623fda7
commit
2011749836
@ -419,6 +419,8 @@ class DocumentObject(EosObject, metaclass=DocumentObjectType):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
self._json = None
|
||||||
|
|
||||||
self._field_values = {}
|
self._field_values = {}
|
||||||
|
|
||||||
# Different to Python
|
# Different to Python
|
||||||
@ -456,6 +458,10 @@ class DocumentObject(EosObject, metaclass=DocumentObjectType):
|
|||||||
val.object_init(self, default)
|
val.object_init(self, default)
|
||||||
|
|
||||||
def serialise(self, options=SerialiseOptions.DEFAULT):
|
def serialise(self, options=SerialiseOptions.DEFAULT):
|
||||||
|
if self._ver != self._fields['_ver'].default:
|
||||||
|
# Different version, use stored JSON
|
||||||
|
return self._json
|
||||||
|
|
||||||
return {val.real_name: val.serialise(getattr(self, val.real_name), options) for attr, val in self._fields.items() if ((val.is_hashed or not options.for_hash) and (not options.should_protect or not val.is_protected))}
|
return {val.real_name: val.serialise(getattr(self, val.real_name), options) for attr, val in self._fields.items() if ((val.is_hashed or not options.for_hash) and (not options.should_protect or not val.is_protected))}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -467,7 +473,11 @@ class DocumentObject(EosObject, metaclass=DocumentObjectType):
|
|||||||
for attr, val in cls._fields.items():
|
for attr, val in cls._fields.items():
|
||||||
if attr in value:
|
if attr in value:
|
||||||
attrs[val.internal_name] = val.deserialise(value[val.real_name])
|
attrs[val.internal_name] = val.deserialise(value[val.real_name])
|
||||||
return cls(**attrs)
|
inst = cls(**attrs)
|
||||||
|
|
||||||
|
inst._json = value
|
||||||
|
|
||||||
|
return inst
|
||||||
|
|
||||||
class TopLevelObjectType(DocumentObjectType):
|
class TopLevelObjectType(DocumentObjectType):
|
||||||
def __new__(meta, name, bases, attrs):
|
def __new__(meta, name, bases, attrs):
|
||||||
@ -489,8 +499,10 @@ class TopLevelObjectType(DocumentObjectType):
|
|||||||
|
|
||||||
class TopLevelObject(DocumentObject, metaclass=TopLevelObjectType):
|
class TopLevelObject(DocumentObject, metaclass=TopLevelObjectType):
|
||||||
def save(self):
|
def save(self):
|
||||||
#res = db[self._name].replace_one({'_id': self.serialise()['_id']}, self.serialise(), upsert=True)
|
if self._ver != self._fields['_ver'].default:
|
||||||
#res = dbinfo.db[self._db_name].replace_one({'_id': self._fields['_id'].serialise(self._id)}, EosObject.serialise_and_wrap(self), upsert=True)
|
# Different version, unable to save
|
||||||
|
raise Exception('Attempted to save older vesion object')
|
||||||
|
|
||||||
dbinfo.provider.update_by_id(self._db_name, self._fields['_id'].serialise(self._id), EosObject.serialise_and_wrap(self))
|
dbinfo.provider.update_by_id(self._db_name, self._fields['_id'].serialise(self._id), EosObject.serialise_and_wrap(self))
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user