)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"b25f0e825f53093fb5b6902355da1fabb30dd49d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mikhail Durnosvistov \u003cmdurnosvistov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-25 11:12:48 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get rid object model specific `dict` methods 1"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch refactor usages of objects in unit tests. It is only"},{"line_number":10,"context_line":"changing the way object attributes are accessed in the api and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F%2BmM%3D","line":7,"updated":"2013-12-25 17:37:42.000000000","message":"This \"1\" in the end of message is unneeded. You did you mean it\u0027s part 1?","commit_id":"7c41159804cc73e92102075f7239f8aac93560a4"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"b25f0e825f53093fb5b6902355da1fabb30dd49d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get rid object model specific `dict` methods 1"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch refactor usages of objects in unit tests. It is only"},{"line_number":10,"context_line":"changing the way object attributes are accessed in the api and"},{"line_number":11,"context_line":"api unit tests."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAT3%2F%2F%2Blo%3D","line":9,"updated":"2013-12-25 17:37:42.000000000","message":"Please update the message since the patch changes not only unit tests","commit_id":"7c41159804cc73e92102075f7239f8aac93560a4"}],"ironic/api/controllers/v1/chassis.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"978bb76b8c5010adcefa707eed4ffeb4de900e5f","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        # Update only the fields that have changed"},{"line_number":219,"context_line":"        for field in objects.Chassis.fields:"},{"line_number":220,"context_line":"            get_field \u003d getattr(chassis, field)"},{"line_number":221,"context_line":"            if getattr(rpc_chassis, field) !\u003d get_field:"},{"line_number":222,"context_line":"                setattr(rpc_chassis, field, get_field)"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8mIw%3D","line":220,"updated":"2013-12-24 16:19:21.000000000","message":"get_field is more like a name for a method. Would you please change it to new_value?","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0514a742cf9a3b05f30d4bb3da613d0a2a6b3ed2","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        # Update only the fields that have changed"},{"line_number":219,"context_line":"        for field in objects.Chassis.fields:"},{"line_number":220,"context_line":"            get_field \u003d getattr(chassis, field)"},{"line_number":221,"context_line":"            if getattr(rpc_chassis, field) !\u003d get_field:"},{"line_number":222,"context_line":"                setattr(rpc_chassis, field, get_field)"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8lno%3D","line":220,"in_reply_to":"AAAATn%2F8mIw%3D","updated":"2013-12-25 13:12:31.000000000","message":"Done","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"978bb76b8c5010adcefa707eed4ffeb4de900e5f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if rpc_node.target_power_state is not None:"},{"line_number":110,"context_line":"            raise wsme.exc.ClientSideError(_(\"Power operation for node %s is \""},{"line_number":111,"context_line":"                                             \"already in progress.\") %"},{"line_number":112,"context_line":"                                              getattr(rpc_node, \u0027uuid\u0027),"},{"line_number":113,"context_line":"                                              status_code\u003d409)"},{"line_number":114,"context_line":"        # Note that there is a race condition. The node state(s) could change"},{"line_number":115,"context_line":"        # by the time the RPC call is made and the TaskManager manager gets a"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8mHg%3D","line":112,"updated":"2013-12-24 16:19:21.000000000","message":"Sorry but why don\u0027t we use\n\n    rpc_node.uuid \n\nfor example?","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0514a742cf9a3b05f30d4bb3da613d0a2a6b3ed2","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        if rpc_node.target_power_state is not None:"},{"line_number":110,"context_line":"            raise wsme.exc.ClientSideError(_(\"Power operation for node %s is \""},{"line_number":111,"context_line":"                                             \"already in progress.\") %"},{"line_number":112,"context_line":"                                              getattr(rpc_node, \u0027uuid\u0027),"},{"line_number":113,"context_line":"                                              status_code\u003d409)"},{"line_number":114,"context_line":"        # Note that there is a race condition. The node state(s) could change"},{"line_number":115,"context_line":"        # by the time the RPC call is made and the TaskManager manager gets a"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F%2FFk%3D","line":112,"in_reply_to":"AAAATn%2F8mHg%3D","updated":"2013-12-25 13:12:31.000000000","message":"Done","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"978bb76b8c5010adcefa707eed4ffeb4de900e5f","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, uuid)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        # Check if node is transitioning state"},{"line_number":485,"context_line":"        target_power_state \u003d getattr(rpc_node, \u0027target_power_state\u0027)"},{"line_number":486,"context_line":"        target_provision_state \u003d getattr(rpc_node, \u0027target_provision_state\u0027)"},{"line_number":487,"context_line":"        if target_power_state or target_provision_state:"},{"line_number":488,"context_line":"            msg \u003d _(\"Node %s can not be updated while a state transition\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8mHQ%3D","line":485,"updated":"2013-12-24 16:19:21.000000000","message":"rpc_node.target_power_state ?","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0514a742cf9a3b05f30d4bb3da613d0a2a6b3ed2","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        rpc_node \u003d objects.Node.get_by_uuid(pecan.request.context, uuid)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        # Check if node is transitioning state"},{"line_number":485,"context_line":"        target_power_state \u003d getattr(rpc_node, \u0027target_power_state\u0027)"},{"line_number":486,"context_line":"        target_provision_state \u003d getattr(rpc_node, \u0027target_provision_state\u0027)"},{"line_number":487,"context_line":"        if target_power_state or target_provision_state:"},{"line_number":488,"context_line":"            msg \u003d _(\"Node %s can not be updated while a state transition\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F%2FFc%3D","line":485,"in_reply_to":"AAAATn%2F8mHQ%3D","updated":"2013-12-25 13:12:31.000000000","message":"Done","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"978bb76b8c5010adcefa707eed4ffeb4de900e5f","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        for field in objects.Node.fields:"},{"line_number":501,"context_line":"            get_field \u003d getattr(node, field)"},{"line_number":502,"context_line":"            if getattr(rpc_node, field) !\u003d get_field:"},{"line_number":503,"context_line":"                setattr(rpc_node, field, get_field)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        try:"},{"line_number":506,"context_line":"            new_node \u003d pecan.request.rpcapi.update_node(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8mG0%3D","line":503,"updated":"2013-12-24 16:19:21.000000000","message":"I remember there is a patch dedicated to move this loop to the base class, so maybe to rebase on those one? Then this patch will carry less changes.","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0514a742cf9a3b05f30d4bb3da613d0a2a6b3ed2","unresolved":false,"context_lines":[{"line_number":500,"context_line":"        for field in objects.Node.fields:"},{"line_number":501,"context_line":"            get_field \u003d getattr(node, field)"},{"line_number":502,"context_line":"            if getattr(rpc_node, field) !\u003d get_field:"},{"line_number":503,"context_line":"                setattr(rpc_node, field, get_field)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        try:"},{"line_number":506,"context_line":"            new_node \u003d pecan.request.rpcapi.update_node(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F%2B%2Fk%3D","line":503,"in_reply_to":"AAAATn%2F8mG0%3D","updated":"2013-12-25 13:12:31.000000000","message":"Nice idea, but I would do it in a another patch.","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"}],"ironic/tests/api/test_chassis.py":[{"author":{"_account_id":8968,"name":"Max Lobur","email":"max_lobur@outlook.com","username":"max_lobur"},"change_message_id":"978bb76b8c5010adcefa707eed4ffeb4de900e5f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                               autospec\u003dTrue) as mock_get_chassis:"},{"line_number":79,"context_line":"            mock_get_chassis.return_value \u003d dbutils.get_test_chassis("},{"line_number":80,"context_line":"                id\u003d1, uuid\u003duuid)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            data \u003d self.get_json(\u0027/chassis/1\u0027)"},{"line_number":83,"context_line":"            self.assertIn(\u0027links\u0027, data.keys())"},{"line_number":84,"context_line":"            self.assertEqual(len(data[\u0027links\u0027]), 2)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F8mEc%3D","line":81,"updated":"2013-12-24 16:19:21.000000000","message":"I assume self.dbapi.create_chassis(ndict) should have been create chassis in db, so why did you decide to additionally mock dbapi.get_chassis?\n\nAlso dbutils.get_test_chassis returns dict, whereas mocked mock_get_chassis returns objects.Chassis (see https://github.com/openstack/ironic/blob/master/ironic/db/sqlalchemy/api.py#L447)","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"0514a742cf9a3b05f30d4bb3da613d0a2a6b3ed2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                               autospec\u003dTrue) as mock_get_chassis:"},{"line_number":79,"context_line":"            mock_get_chassis.return_value \u003d dbutils.get_test_chassis("},{"line_number":80,"context_line":"                id\u003d1, uuid\u003duuid)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"            data \u003d self.get_json(\u0027/chassis/1\u0027)"},{"line_number":83,"context_line":"            self.assertIn(\u0027links\u0027, data.keys())"},{"line_number":84,"context_line":"            self.assertEqual(len(data[\u0027links\u0027]), 2)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F%2B%2Fg%3D","line":81,"in_reply_to":"AAAATn%2F8mEc%3D","updated":"2013-12-25 13:12:31.000000000","message":"Done","commit_id":"ad2bb5edf310c4abf52b781b2d0a49dabb838998"}]}
