)]}'
{"openstack/network/v2/router.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"1f6147ca9a66719ee33efc7a40ce30b9a6f60d4c","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027add_extraroutes\u0027)"},{"line_number":113,"context_line":"        resp \u003d session.put(url, json\u003dbody)"},{"line_number":114,"context_line":"        return Router(**resp.json()[\u0027router\u0027])"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def remove_extra_routes(self, session, body):"},{"line_number":117,"context_line":"        \"\"\"Remove extra routes from a logical router."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_80490733","line":114,"updated":"2019-08-30 09:27:07.000000000","message":"you are not properly evaluating response here. What if that returned an error?","commit_id":"a833ab71be32d741705b8925986d1eac2c3cb888"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1996c3469aa1a43a3328d50407b18d62d0b6c41a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027add_extraroutes\u0027)"},{"line_number":113,"context_line":"        resp \u003d session.put(url, json\u003dbody)"},{"line_number":114,"context_line":"        return Router(**resp.json()[\u0027router\u0027])"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def remove_extra_routes(self, session, body):"},{"line_number":117,"context_line":"        \"\"\"Remove extra routes from a logical router."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_e3954c3e","line":114,"in_reply_to":"7faddb67_80490733","updated":"2019-09-02 13:04:11.000000000","message":"Done","commit_id":"a833ab71be32d741705b8925986d1eac2c3cb888"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"1f6147ca9a66719ee33efc7a40ce30b9a6f60d4c","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027remove_extraroutes\u0027)"},{"line_number":126,"context_line":"        resp \u003d session.put(url, json\u003dbody)"},{"line_number":127,"context_line":"        return Router(**resp.json()[\u0027router\u0027])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def add_gateway(self, session, **body):"},{"line_number":130,"context_line":"        \"\"\"Add an external gateway to a logical router."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_a0468320","line":127,"updated":"2019-08-30 09:27:07.000000000","message":"same here","commit_id":"a833ab71be32d741705b8925986d1eac2c3cb888"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1996c3469aa1a43a3328d50407b18d62d0b6c41a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027remove_extraroutes\u0027)"},{"line_number":126,"context_line":"        resp \u003d session.put(url, json\u003dbody)"},{"line_number":127,"context_line":"        return Router(**resp.json()[\u0027router\u0027])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def add_gateway(self, session, **body):"},{"line_number":130,"context_line":"        \"\"\"Add an external gateway to a logical router."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_aebbbbc1","line":127,"in_reply_to":"7faddb67_a0468320","updated":"2019-09-02 13:04:11.000000000","message":"Done","commit_id":"a833ab71be32d741705b8925986d1eac2c3cb888"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d461c5f87ff354060af4a5ad98e2229d201e0590","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            message \u003d None"},{"line_number":109,"context_line":"            if \u0027NeutronError\u0027 in data:"},{"line_number":110,"context_line":"                message \u003d data[\u0027NeutronError\u0027][\u0027message\u0027]"},{"line_number":111,"context_line":"            raise HttpException(message\u003dmessage, response\u003dresp)"},{"line_number":112,"context_line":"        return data"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def add_extra_routes(self, session, body):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_bccc5c6a","line":111,"updated":"2019-10-10 16:53:24.000000000","message":"let\u0027s raise SDKException here","commit_id":"f2ff84649414bb1e7da56a076f67e840561b82cf"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1cbd0a25d7b03e0e6c62288244fff46ac4a730c0","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            message \u003d None"},{"line_number":109,"context_line":"            if \u0027NeutronError\u0027 in data:"},{"line_number":110,"context_line":"                message \u003d data[\u0027NeutronError\u0027][\u0027message\u0027]"},{"line_number":111,"context_line":"            raise HttpException(message\u003dmessage, response\u003dresp)"},{"line_number":112,"context_line":"        return data"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def add_extra_routes(self, session, body):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_6205ba13","line":111,"in_reply_to":"3fa7e38b_bccc5c6a","updated":"2019-10-14 12:07:15.000000000","message":"Done","commit_id":"f2ff84649414bb1e7da56a076f67e840561b82cf"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"d461c5f87ff354060af4a5ad98e2229d201e0590","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027add_extraroutes\u0027)"},{"line_number":126,"context_line":"        resp \u003d self._put(session, url, body)"},{"line_number":127,"context_line":"        return Router(**resp[\u0027router\u0027])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def remove_extra_routes(self, session, body):"},{"line_number":130,"context_line":"        \"\"\"Remove extra routes from a logical router."}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_9ca640ab","line":127,"updated":"2019-10-10 16:53:24.000000000","message":"why not using regular things like\n```\n  self._translate_response(resp)\n  return self\n```\ninstead of creating new object?","commit_id":"f2ff84649414bb1e7da56a076f67e840561b82cf"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"1cbd0a25d7b03e0e6c62288244fff46ac4a730c0","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        url \u003d utils.urljoin(self.base_path, self.id, \u0027add_extraroutes\u0027)"},{"line_number":126,"context_line":"        resp \u003d self._put(session, url, body)"},{"line_number":127,"context_line":"        return Router(**resp[\u0027router\u0027])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def remove_extra_routes(self, session, body):"},{"line_number":130,"context_line":"        \"\"\"Remove extra routes from a logical router."}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_10f44cf0","line":127,"in_reply_to":"3fa7e38b_9ca640ab","updated":"2019-10-14 12:07:15.000000000","message":"Done","commit_id":"f2ff84649414bb1e7da56a076f67e840561b82cf"}],"openstack/tests/unit/network/v2/test_router.py":[{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"038d585e9aa879cbd8854a12382c1d318878fe42","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        response.status_code \u003d 200"},{"line_number":183,"context_line":"        sess \u003d mock.Mock()"},{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d5f8ff7c","line":185,"updated":"2019-10-29 15:20:34.000000000","message":"according to router impl and spec we expect some result here. Let us check it as well.","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"730360e5207dbdf176b75c1a8634d0f100cc01ed","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        response.status_code \u003d 200"},{"line_number":183,"context_line":"        sess \u003d mock.Mock()"},{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_96ffad64","line":185,"in_reply_to":"3fa7e38b_d5f8ff7c","updated":"2019-11-04 09:25:26.000000000","message":"Done","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"038d585e9aa879cbd8854a12382c1d318878fe42","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_remove_extra_routes(self):"},{"line_number":190,"context_line":"        r \u003d router.Router(**EXAMPLE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_35e713e6","line":187,"updated":"2019-10-29 15:20:34.000000000","message":"nit: assert_called_with json\u003dresponse? Looks very weird to check that we have send something called \"response\"","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"730360e5207dbdf176b75c1a8634d0f100cc01ed","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_remove_extra_routes(self):"},{"line_number":190,"context_line":"        r \u003d router.Router(**EXAMPLE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d62e85f8","line":187,"in_reply_to":"3fa7e38b_35e713e6","updated":"2019-11-04 09:25:26.000000000","message":"This is a call in which (in many simple cases) the response just repeats the request. I can introduce a variable called request_body (with the same value) if you think that improves the code.","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"e55a89ec23e7055da029c2df0c8adbf0d775aa64","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_remove_extra_routes(self):"},{"line_number":190,"context_line":"        r \u003d router.Router(**EXAMPLE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f8136b57","line":187,"in_reply_to":"3fa7e38b_d62e85f8","updated":"2019-11-04 14:49:19.000000000","message":"I know, but it\u0027s exactly confusing:\n\n...\njson_body \u003d {\u0027router\u0027: {}}\n...\nresponse.body \u003d json_body\n...\nr.remove_extra_routes(sess, json_body)\n...\nsess.put.assert_called_with(url, json\u003djson_body)\n\nThis is much cleaner, compared to `r.remove_extraroutes(sess, response.body)`","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"a554e8806ed6a7fff5e14491973ff89fdc0c0ab0","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":185,"context_line":"        r.add_extra_routes(sess, response.body)"},{"line_number":186,"context_line":"        url \u003d \u0027routers/IDENTIFIER/add_extraroutes\u0027"},{"line_number":187,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_remove_extra_routes(self):"},{"line_number":190,"context_line":"        r \u003d router.Router(**EXAMPLE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_922ecbf7","line":187,"in_reply_to":"3fa7e38b_f8136b57","updated":"2019-11-05 07:53:50.000000000","message":"Done","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"038d585e9aa879cbd8854a12382c1d318878fe42","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        response.status_code \u003d 200"},{"line_number":196,"context_line":"        sess \u003d mock.Mock()"},{"line_number":197,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":198,"context_line":"        r.remove_extra_routes(sess, response.body)"},{"line_number":199,"context_line":"        url \u003d \u0027routers/IDENTIFIER/remove_extraroutes\u0027"},{"line_number":200,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_d5547f56","line":198,"updated":"2019-10-29 15:20:34.000000000","message":"check result here as well","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"730360e5207dbdf176b75c1a8634d0f100cc01ed","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        response.status_code \u003d 200"},{"line_number":196,"context_line":"        sess \u003d mock.Mock()"},{"line_number":197,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":198,"context_line":"        r.remove_extra_routes(sess, response.body)"},{"line_number":199,"context_line":"        url \u003d \u0027routers/IDENTIFIER/remove_extraroutes\u0027"},{"line_number":200,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_71531b17","line":198,"in_reply_to":"3fa7e38b_d5547f56","updated":"2019-11-04 09:25:26.000000000","message":"Done","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"038d585e9aa879cbd8854a12382c1d318878fe42","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":198,"context_line":"        r.remove_extra_routes(sess, response.body)"},{"line_number":199,"context_line":"        url \u003d \u0027routers/IDENTIFIER/remove_extraroutes\u0027"},{"line_number":200,"context_line":"        sess.put.assert_called_with(url, json\u003dresponse.body)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_add_router_gateway(self):"},{"line_number":203,"context_line":"        # Add gateway to a router"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b56ea329","line":200,"updated":"2019-10-29 15:20:34.000000000","message":"nit: same here","commit_id":"17805f402a3f3191ed101ea296361f421e9e0ed8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"264c2f17bc17bd1f6ba3c41a2c23516a79e78248","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        response.status_code \u003d 200"},{"line_number":200,"context_line":"        sess \u003d mock.Mock()"},{"line_number":201,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":202,"context_line":"        ret \u003d r.remove_extra_routes(sess, response.body)"},{"line_number":203,"context_line":"        self.assertIsInstance(ret, router.Router)"},{"line_number":204,"context_line":"        self.assertIsInstance(ret.routes, list)"},{"line_number":205,"context_line":"        url \u003d \u0027routers/IDENTIFIER/remove_extraroutes\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_2b699af7","line":202,"range":{"start_line":202,"start_character":42,"end_line":202,"end_character":55},"updated":"2019-11-06 01:24:46.000000000","message":"oops, I forgot this","commit_id":"b828a88880064e68f7c055395d8115810067882b"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"666f789ab0f59a9be564bc615833c6b09693aeba","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        response.status_code \u003d 200"},{"line_number":200,"context_line":"        sess \u003d mock.Mock()"},{"line_number":201,"context_line":"        sess.put \u003d mock.Mock(return_value\u003dresponse)"},{"line_number":202,"context_line":"        ret \u003d r.remove_extra_routes(sess, response.body)"},{"line_number":203,"context_line":"        self.assertIsInstance(ret, router.Router)"},{"line_number":204,"context_line":"        self.assertIsInstance(ret.routes, list)"},{"line_number":205,"context_line":"        url \u003d \u0027routers/IDENTIFIER/remove_extraroutes\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_6e49e064","line":202,"range":{"start_line":202,"start_character":42,"end_line":202,"end_character":55},"in_reply_to":"3fa7e38b_2b699af7","updated":"2019-11-06 01:53:22.000000000","message":"Done","commit_id":"b828a88880064e68f7c055395d8115810067882b"}]}
