)]}'
{"nova/api/openstack/compute/contrib/attach_interfaces.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f233a55d10dcdf1e6997c66ac3094dcfc086dc0a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        except (exception.NetworkDuplicated,"},{"line_number":114,"context_line":"                exception.NetworkAmbiguous) as e:"},{"line_number":115,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":116,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":117,"context_line":"                exception.FixedIpAlreadyInUse,"},{"line_number":118,"context_line":"                exception.PortInUse) as e:"},{"line_number":119,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_968d017f","line":116,"updated":"2014-10-15 07:05:47.000000000","message":"seems badrequest is much more reasonable.","commit_id":"fc2969ec03bbc4c4c756540ae5d5aec949c2428e"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"8f2f01e6291e799634cc3b2d6dbe9830243a84b6","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        except (exception.NetworkDuplicated,"},{"line_number":114,"context_line":"                exception.NetworkAmbiguous) as e:"},{"line_number":115,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":116,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":117,"context_line":"                exception.FixedIpAlreadyInUse,"},{"line_number":118,"context_line":"                exception.PortInUse) as e:"},{"line_number":119,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_8cbb340e","line":116,"in_reply_to":"baa201ad_968d017f","updated":"2014-10-15 08:37:57.000000000","message":"Eli, please read comments in https://review.openstack.org/#/c/118276/\n\n400 defined by rfc2616 is for request format error. And Neutron also returns 409. It seems not reasonable to change it back to 400.","commit_id":"fc2969ec03bbc4c4c756540ae5d5aec949c2428e"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"a2c00fc085eeb0cd591b08d8fa20bc5bbaa3c072","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":122,"context_line":"        except (exception.PortNotFound,"},{"line_number":123,"context_line":"                exception.NetworkNotFound) as e:"},{"line_number":124,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":125,"context_line":"        except NotImplementedError:"},{"line_number":126,"context_line":"            msg \u003d _(\"Network driver does not support this function.\")"},{"line_number":127,"context_line":"            raise webob.exc.HTTPNotImplemented(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aa7fdbe_e0a7c24d","line":124,"updated":"2014-10-21 02:48:38.000000000","message":"this change will not accepted , we are all agreed in api meeting, people don\u0027t want backward incompatible change in v2 api, but we can fix them in new api(v2.1)\nwill give you -1 for this.","commit_id":"82872c1d8117b0f361cd6b70596f1fc97986e5df"}],"nova/api/openstack/compute/plugins/v3/attach_interfaces.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"f233a55d10dcdf1e6997c66ac3094dcfc086dc0a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        except (exception.NetworkDuplicated,"},{"line_number":118,"context_line":"                exception.NetworkAmbiguous) as e:"},{"line_number":119,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":120,"context_line":"        except (exception.InstanceIsLocked,"},{"line_number":121,"context_line":"                exception.FixedIpAlreadyInUse,"},{"line_number":122,"context_line":"                exception.PortInUse) as e:"},{"line_number":123,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_d6ea290e","line":120,"updated":"2014-10-15 07:05:47.000000000","message":"ditto","commit_id":"fc2969ec03bbc4c4c756540ae5d5aec949c2428e"}],"nova/tests/api/openstack/compute/contrib/test_attach_interfaces.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"FAKE_PORT_ID1 \u003d \u002711111111-1111-1111-1111-111111111111\u0027"},{"line_number":42,"context_line":"FAKE_PORT_ID2 \u003d \u002722222222-2222-2222-2222-222222222222\u0027"},{"line_number":43,"context_line":"FAKE_PORT_ID3 \u003d \u002733333333-3333-3333-3333-333333333333\u0027"},{"line_number":44,"context_line":"FAKE_BAD_PORT_ID \u003d \u002700000000-0000-0000-0000-000000000000\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"FAKE_NET_ID1 \u003d \u002744444444-4444-4444-4444-444444444444\u0027"},{"line_number":47,"context_line":"FAKE_NET_ID2 \u003d \u002755555555-5555-5555-5555-555555555555\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_77fbe946","line":44,"updated":"2014-10-28 01:16:59.000000000","message":"This name should mean NotFound because of the purpose.\nSo how about FAKE_NOT_FOUND_PORT_ID?","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"68a0510cf0a9c85fd965551688099aa2df46cbfc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"FAKE_PORT_ID1 \u003d \u002711111111-1111-1111-1111-111111111111\u0027"},{"line_number":42,"context_line":"FAKE_PORT_ID2 \u003d \u002722222222-2222-2222-2222-222222222222\u0027"},{"line_number":43,"context_line":"FAKE_PORT_ID3 \u003d \u002733333333-3333-3333-3333-333333333333\u0027"},{"line_number":44,"context_line":"FAKE_BAD_PORT_ID \u003d \u002700000000-0000-0000-0000-000000000000\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"FAKE_NET_ID1 \u003d \u002744444444-4444-4444-4444-444444444444\u0027"},{"line_number":47,"context_line":"FAKE_NET_ID2 \u003d \u002755555555-5555-5555-5555-555555555555\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_c12bb0e9","line":44,"in_reply_to":"9aa7fdbe_77fbe946","updated":"2014-10-31 09:30:46.000000000","message":"Done","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        }"},{"line_number":339,"context_line":"        self._attach_interface_bad_request_case(body)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_attach_interface_with_invalid_network_id(self):"},{"line_number":342,"context_line":"        body \u003d {"},{"line_number":343,"context_line":"            \u0027interfaceAttachment\u0027: {"},{"line_number":344,"context_line":"                \u0027net_id\u0027: FAKE_BAD_NET_ID"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_77a92923","line":341,"updated":"2014-10-28 01:16:59.000000000","message":"s/invalid/not_found/","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"68a0510cf0a9c85fd965551688099aa2df46cbfc","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        }"},{"line_number":339,"context_line":"        self._attach_interface_bad_request_case(body)"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_attach_interface_with_invalid_network_id(self):"},{"line_number":342,"context_line":"        body \u003d {"},{"line_number":343,"context_line":"            \u0027interfaceAttachment\u0027: {"},{"line_number":344,"context_line":"                \u0027net_id\u0027: FAKE_BAD_NET_ID"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_01369852","line":341,"in_reply_to":"9aa7fdbe_77a92923","updated":"2014-10-31 09:30:46.000000000","message":"Done","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        }"},{"line_number":347,"context_line":"        self._attach_interface_not_found_case(body)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def test_attach_interface_with_invalid_port_id(self):"},{"line_number":350,"context_line":"        body \u003d {"},{"line_number":351,"context_line":"            \u0027interfaceAttachment\u0027: {"},{"line_number":352,"context_line":"                \u0027port_id\u0027: FAKE_BAD_PORT_ID"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_37b32199","line":349,"updated":"2014-10-28 01:16:59.000000000","message":"s/invalid/not_found/","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    def test_attach_interface_instance_with_non_array_fixed_ips(self):"},{"line_number":476,"context_line":"        pass"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def _attach_interface_not_found_case(self, body):"},{"line_number":479,"context_line":"        self.stubs.Set(compute_api.API, \u0027attach_interface\u0027,"},{"line_number":480,"context_line":"                       fake_attach_interface)"},{"line_number":481,"context_line":"        req \u003d webob.Request.blank(self.url + \u0027/attach\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_b71b917f","line":478,"updated":"2014-10-28 01:16:59.000000000","message":"This _attach_interface_not_found_case is almost the same as the one of v2.1 API test, so how about defining\n\n not_found_case_exception \u003d exc.HTTPNotFound\n\nin InterfaceAttachTestsV21 class and defining\n\n not_found_case_exception \u003d exc.HTTPBadRequest\n\nin InterfaceAttachTestsV2 class and replacing\n\n - self.assertRaises(exc.HTTPBadRequest,\n + self.assertRaises(self.not_found_case_exception,\n\nin _attach_interface_not_found_case() of InterfaceAttachTestsV21 ?","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"68a0510cf0a9c85fd965551688099aa2df46cbfc","unresolved":false,"context_lines":[{"line_number":475,"context_line":"    def test_attach_interface_instance_with_non_array_fixed_ips(self):"},{"line_number":476,"context_line":"        pass"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def _attach_interface_not_found_case(self, body):"},{"line_number":479,"context_line":"        self.stubs.Set(compute_api.API, \u0027attach_interface\u0027,"},{"line_number":480,"context_line":"                       fake_attach_interface)"},{"line_number":481,"context_line":"        req \u003d webob.Request.blank(self.url + \u0027/attach\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8c0949_413fc025","line":478,"in_reply_to":"9aa7fdbe_b71b917f","updated":"2014-10-31 09:30:46.000000000","message":"Done. Thanks for your suggestion!","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        req.body \u003d jsonutils.dumps({})"},{"line_number":502,"context_line":"        req.headers[\u0027content-type\u0027] \u003d \u0027application/json\u0027"},{"line_number":503,"context_line":"        req.environ[\u0027nova.context\u0027] \u003d self.context"},{"line_number":504,"context_line":"        self.assertRaises(exc.HTTPBadRequest,"},{"line_number":505,"context_line":"                          self.attachments.create, req, FAKE_UUID1,"},{"line_number":506,"context_line":"                          body\u003djsonutils.loads(req.body))"},{"line_number":507,"context_line":"        attach_mock.assert_called_once_with(self.context, fake_instance, None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d71e556f","line":504,"updated":"2014-10-28 01:16:59.000000000","message":"ditto","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f25114d377aaf8d67d392f47b3fdeeb17ffd9f2d","unresolved":false,"context_lines":[{"line_number":524,"context_line":"        req.body \u003d jsonutils.dumps({})"},{"line_number":525,"context_line":"        req.headers[\u0027content-type\u0027] \u003d \u0027application/json\u0027"},{"line_number":526,"context_line":"        req.environ[\u0027nova.context\u0027] \u003d self.context"},{"line_number":527,"context_line":"        self.assertRaises(exc.HTTPBadRequest,"},{"line_number":528,"context_line":"                          self.attachments.create, req, FAKE_UUID1,"},{"line_number":529,"context_line":"                          body\u003djsonutils.loads(req.body))"},{"line_number":530,"context_line":"        attach_mock.assert_called_once_with(self.context, fake_instance, None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_17153d48","line":527,"updated":"2014-10-28 01:16:59.000000000","message":"ditto","commit_id":"9c0a2b65af90383cbd80779b31cbf602e0376287"}]}
