Changed JSON fields on mutable objects in ActionLog object

Now is able partial update of additional_info (dict) field.

Change-Id: I7ab2bdbd9c155d4d9926da9a011786a8c207d770
Partial-Bug: 1482658
This commit is contained in:
Valentin Kaplov 2015-12-10 12:34:47 +03:00
parent cf3d9641a2
commit a5f7684907
3 changed files with 9 additions and 12 deletions

View File

@ -16,6 +16,7 @@ from sqlalchemy import Boolean
from sqlalchemy import Column
from sqlalchemy import DateTime
from sqlalchemy import Enum
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy import Integer
from sqlalchemy import String
@ -39,6 +40,10 @@ class ActionLog(Base):
start_timestamp = Column(DateTime, nullable=False)
end_timestamp = Column(DateTime, nullable=True)
is_sent = Column(Boolean, default=False)
additional_info = Column(JSON, nullable=False)
additional_info = Column(
MutableDict.as_mutable(JSON),
default={},
nullable=False
)
cluster_id = Column(Integer, nullable=True)
task_uuid = Column(String(36), nullable=True)

View File

@ -45,12 +45,7 @@ class ActionLog(NailgunObject):
:return: returned by parent class method value
"""
if data.get('additional_info'):
add_info = dict(instance.additional_info)
add_info.update(data['additional_info'])
data['additional_info'] = add_info
instance.additional_info.update(data.pop('additional_info', {}))
return super(ActionLog, cls).update(instance, data)
@classmethod

View File

@ -901,12 +901,9 @@ class TestActionLogObject(BaseIntegrationTest):
'is_sent': False,
'cluster_id': 1
}
al = self._create_log_entry(object_data)
instance_to_validate = jsonutils.loads(objects.ActionLog.to_json(al))
self.assertRaises(jsonschema.ValidationError, jsonschema.validate,
instance_to_validate, action_log.schema)
object_data, action_log.schema)
self.assertRaises(ValueError, self._create_log_entry, object_data)
def test_get_by_uuid_method(self):
object_data = {