From a5f7684907959b47cc89ddc644698a5293148b52 Mon Sep 17 00:00:00 2001 From: Valentin Kaplov Date: Thu, 10 Dec 2015 12:34:47 +0300 Subject: [PATCH] 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 --- nailgun/nailgun/db/sqlalchemy/models/action_logs.py | 7 ++++++- nailgun/nailgun/objects/action_log.py | 7 +------ nailgun/nailgun/test/unit/test_objects.py | 7 ++----- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/nailgun/nailgun/db/sqlalchemy/models/action_logs.py b/nailgun/nailgun/db/sqlalchemy/models/action_logs.py index c9b4371ef5..0e1ce70a9d 100644 --- a/nailgun/nailgun/db/sqlalchemy/models/action_logs.py +++ b/nailgun/nailgun/db/sqlalchemy/models/action_logs.py @@ -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) diff --git a/nailgun/nailgun/objects/action_log.py b/nailgun/nailgun/objects/action_log.py index 47f294c4c4..30e11f7559 100644 --- a/nailgun/nailgun/objects/action_log.py +++ b/nailgun/nailgun/objects/action_log.py @@ -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 diff --git a/nailgun/nailgun/test/unit/test_objects.py b/nailgun/nailgun/test/unit/test_objects.py index d081ae50e5..0c626e1b95 100644 --- a/nailgun/nailgun/test/unit/test_objects.py +++ b/nailgun/nailgun/test/unit/test_objects.py @@ -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 = {