Save session only if dirty

issue2388
review221006
This commit is contained in:
Cédric Krier
2012-01-17 14:02:34 +01:00
parent c183cebc9e
commit a2bc715560
+11 -3
View File
@@ -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):