Save session only if dirty
issue2388 review221006
This commit is contained in:
@@ -152,6 +152,7 @@ class _SessionRecord(object):
|
||||
self._model = model
|
||||
self._data = data
|
||||
self.__cache = {}
|
||||
self.dirty = False
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name in self.__cache:
|
||||
@@ -182,6 +183,7 @@ class _SessionRecord(object):
|
||||
or name in self._model._inherit_fields)):
|
||||
self.__cache.pop(name, None)
|
||||
self._data[name] = value
|
||||
self.dirty = True
|
||||
else:
|
||||
super(_SessionRecord, self).__setattr__(name, value)
|
||||
|
||||
@@ -204,12 +206,18 @@ class Session(object):
|
||||
setattr(self, state_name,
|
||||
_SessionRecord(model, self.data[state_name]))
|
||||
|
||||
@property
|
||||
def dirty(self):
|
||||
return any(getattr(self, state_name).dirty
|
||||
for state_name in self.data)
|
||||
|
||||
def save(self):
|
||||
"Save the session in database"
|
||||
session_obj = Pool().get('ir.session.wizard')
|
||||
session_obj.write(self._session.id, {
|
||||
'data': json.dumps(self.data, cls=JSONEncoder),
|
||||
})
|
||||
if self.dirty:
|
||||
session_obj.write(self._session.id, {
|
||||
'data': json.dumps(self.data, cls=JSONEncoder),
|
||||
})
|
||||
|
||||
|
||||
class Wizard(WarningErrorMixin, URLMixin):
|
||||
|
||||
Reference in New Issue
Block a user