)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4d648750901eeb14360f5d8b78d99708cb1a73d5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Log if ODL\u0027s websocket is not initialized yet"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Apparently, it is technically possible for websocket"},{"line_number":10,"context_line":"subscriptions to be received before before the required"},{"line_number":11,"context_line":"infra is available and initialized in ODL. A recent change"},{"line_number":12,"context_line":"has ODL returning 503 in this case. This patch logs that"},{"line_number":13,"context_line":"before waiting and retrying."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f4b6375_0587ac11","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":42},"updated":"2017-11-01 10:19:13.000000000","message":"duplicated","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4d648750901eeb14360f5d8b78d99708cb1a73d5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Apparently, it is technically possible for websocket"},{"line_number":10,"context_line":"subscriptions to be received before before the required"},{"line_number":11,"context_line":"infra is available and initialized in ODL. A recent change"},{"line_number":12,"context_line":"has ODL returning 503 in this case. This patch logs that"},{"line_number":13,"context_line":"before waiting and retrying."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3f4b6375_85727c48","line":11,"range":{"start_line":11,"start_character":43,"end_line":11,"end_character":58},"updated":"2017-11-01 10:19:13.000000000","message":"do you have a reference?","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"}],"networking_odl/common/websocket_client.py":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"a2747e957a7cb0f6fb44212c1e943dd196a82c09","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable, wait and retry\")"},{"line_number":224,"context_line":"                return None"},{"line_number":225,"context_line":"            else:"},{"line_number":226,"context_line":"                LOG.warning(\"websocket connection failed\")"},{"line_number":227,"context_line":"                return None"},{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_eec21359","line":226,"range":{"start_line":226,"start_character":16,"end_line":226,"end_character":58},"updated":"2017-10-23 23:19:21.000000000","message":"Here we\u0027d like to log details of the error.","commit_id":"d2c8a3f54eed750301f922410a885e35bfc20d8e"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"b75d480d314fb8bdbce275e330f59e99aa736432","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable, wait and retry\")"},{"line_number":224,"context_line":"                return None"},{"line_number":225,"context_line":"            else:"},{"line_number":226,"context_line":"                LOG.warning(\"websocket connection failed\")"},{"line_number":227,"context_line":"                return None"},{"line_number":228,"context_line":"        except ValueError:"},{"line_number":229,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_e8170fa3","line":226,"range":{"start_line":226,"start_character":16,"end_line":226,"end_character":58},"in_reply_to":"3f4b6375_eec21359","updated":"2017-10-30 07:36:01.000000000","message":"Done","commit_id":"d2c8a3f54eed750301f922410a885e35bfc20d8e"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"186fe8fa651367a4002657604104c328cf18ac47","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            if e.response.status_code \u003d\u003d codes.not_found:"},{"line_number":219,"context_line":"                LOG.debug(\"response code not_found (404)\""},{"line_number":220,"context_line":"                          \"unable to websocket connection url\")"},{"line_number":221,"context_line":"                raise ValueError(_(\"bad_request (http 400),check path\"))"},{"line_number":222,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable \""},{"line_number":224,"context_line":"                         \"(http 503), wait and retry\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_a69b0d71","line":221,"range":{"start_line":221,"start_character":36,"end_line":221,"end_character":58},"updated":"2017-11-02 19:13:22.000000000","message":"string needs to be updated to be 404, not 400.\nThis isn\u0027t due to this patch, though.","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4d648750901eeb14360f5d8b78d99708cb1a73d5","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                LOG.debug(\"response code not_found (404)\""},{"line_number":220,"context_line":"                          \"unable to websocket connection url\")"},{"line_number":221,"context_line":"                raise ValueError(_(\"bad_request (http 400),check path\"))"},{"line_number":222,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable \""},{"line_number":224,"context_line":"                         \"(http 503), wait and retry\")"},{"line_number":225,"context_line":"                return None"},{"line_number":226,"context_line":"            else:"},{"line_number":227,"context_line":"                LOG.warning(\"websocket connection failed (%i)\","},{"line_number":228,"context_line":"                            e.response.status_code)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_e53ed027","line":225,"range":{"start_line":222,"start_character":0,"end_line":225,"end_character":27},"updated":"2017-11-01 10:19:13.000000000","message":"i\u0027m not sure if it\u0027s worth to have the dedicated case for 503 here. the following else clause with status_code looks enough to me.","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"f8f362c7f0f1a069c1d7ccc7d1e5b43dc52c2dc2","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return None"},{"line_number":216,"context_line":"        except exceptions.HTTPError as e:"},{"line_number":217,"context_line":"            # restconf returns 404 on operation when there is no entry"},{"line_number":218,"context_line":"            if e.response.status_code \u003d\u003d codes.not_found:"},{"line_number":219,"context_line":"                LOG.debug(\"response code not_found (404)\""},{"line_number":220,"context_line":"                          \"unable to websocket connection url\")"},{"line_number":221,"context_line":"                raise ValueError(_(\"bad_request (http 400),check path\"))"},{"line_number":222,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable \""},{"line_number":224,"context_line":"                         \"(http 503), wait and retry\")"},{"line_number":225,"context_line":"                return None"},{"line_number":226,"context_line":"            else:"},{"line_number":227,"context_line":"                LOG.warning(\"websocket connection failed (%i)\","},{"line_number":228,"context_line":"                            e.response.status_code)"},{"line_number":229,"context_line":"                return None"},{"line_number":230,"context_line":"        except ValueError:"},{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(\"websocket subscribe got invalid stream name\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_245cee7c","line":229,"range":{"start_line":218,"start_character":11,"end_line":229,"end_character":27},"updated":"2017-11-01 08:11:58.000000000","message":"I want to clarify that this does not vote as a -1, but it might be worth to apply a dictionary instead of doing if-elif-...-else \n\nsomething like:\n\n{codes.not_found: (\u0027log_level\u0027, \u0027message you want to print\u0027),\n...}","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"186fe8fa651367a4002657604104c328cf18ac47","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            return None"},{"line_number":216,"context_line":"        except exceptions.HTTPError as e:"},{"line_number":217,"context_line":"            # restconf returns 404 on operation when there is no entry"},{"line_number":218,"context_line":"            if e.response.status_code \u003d\u003d codes.not_found:"},{"line_number":219,"context_line":"                LOG.debug(\"response code not_found (404)\""},{"line_number":220,"context_line":"                          \"unable to websocket connection url\")"},{"line_number":221,"context_line":"                raise ValueError(_(\"bad_request (http 400),check path\"))"},{"line_number":222,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":223,"context_line":"                LOG.info(\"websocket subscription unavailable \""},{"line_number":224,"context_line":"                         \"(http 503), wait and retry\")"},{"line_number":225,"context_line":"                return None"},{"line_number":226,"context_line":"            else:"},{"line_number":227,"context_line":"                LOG.warning(\"websocket connection failed (%i)\","},{"line_number":228,"context_line":"                            e.response.status_code)"},{"line_number":229,"context_line":"                return None"},{"line_number":230,"context_line":"        except ValueError:"},{"line_number":231,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":232,"context_line":"                LOG.error(\"websocket subscribe got invalid stream name\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f4b6375_e6a3459d","line":229,"range":{"start_line":218,"start_character":11,"end_line":229,"end_character":27},"in_reply_to":"3f4b6375_245cee7c","updated":"2017-11-02 19:13:22.000000000","message":"If we want to have log message depending on response status code, dictionary makes sense.","commit_id":"3e706ebb29300327e04212e7c4a86bde756396c0"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e879655599634d292da68d6a37cd640a00151ba4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9f6a8fd7_030cb140","updated":"2018-04-26 17:12:14.000000000","message":"would it make sense to add a unit test to assert logs by mocking errorcode response ?","commit_id":"d6e7a7d16b2e2583a3ce68f7affcb93e69b5d81d"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"1514113119b7e691faad406bff361d3166d89c57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9f6a8fd7_ae96dc93","in_reply_to":"9f6a8fd7_030cb140","updated":"2018-04-30 07:33:41.000000000","message":"We still don\u0027t have a common position on this and thus no guideline to stick to...","commit_id":"d6e7a7d16b2e2583a3ce68f7affcb93e69b5d81d"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"b977058f421988000458bf8798f0ffb2eaf3bdf9","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                          \"unable to websocket connection url\")"},{"line_number":237,"context_line":"                raise ValueError(_(\"bad_request (http400),check path\"))"},{"line_number":238,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":239,"context_line":"                LOG.info(\"websocket subscription unavailable, wait and retry\")"},{"line_number":240,"context_line":"                return None"},{"line_number":241,"context_line":"            else:"},{"line_number":242,"context_line":"                LOG.warning(\"websocket connection failed\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f6a8fd7_4eedc023","line":239,"range":{"start_line":239,"start_character":62,"end_line":239,"end_character":76},"updated":"2018-04-30 07:34:37.000000000","message":"nit: \"waiting and retrying\" perhaps? as it is done automatically and not operator triggered...","commit_id":"d6e7a7d16b2e2583a3ce68f7affcb93e69b5d81d"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"1514113119b7e691faad406bff361d3166d89c57","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                raise ValueError(_(\"bad_request (http400),check path\"))"},{"line_number":238,"context_line":"            elif e.response.status_code \u003d\u003d codes.service_unavailable:"},{"line_number":239,"context_line":"                LOG.info(\"websocket subscription unavailable, wait and retry\")"},{"line_number":240,"context_line":"                return None"},{"line_number":241,"context_line":"            else:"},{"line_number":242,"context_line":"                LOG.warning(\"websocket connection failed\")"},{"line_number":243,"context_line":"                return None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f6a8fd7_0e826850","line":240,"range":{"start_line":240,"start_character":16,"end_line":240,"end_character":27},"updated":"2018-04-30 07:33:41.000000000","message":"There should be a test that asserts that when you get a codes.service_unavailable the method returns None.","commit_id":"d6e7a7d16b2e2583a3ce68f7affcb93e69b5d81d"}],"networking_odl/tests/unit/common/test_websocket_client.py":[{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"0ffb517d258184a446f9d1545797d937484f088a","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"data-change-event-subscription/neutron:neutron/\" +"},{"line_number":131,"context_line":"            \"neutron:hostconfigs/datastore\u003dOPERATIONAL/scope\u003dSUBTREE\")"},{"line_number":132,"context_line":"        self.assertEqual(EXPECTED_OUTPUT, stream_url)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_137eda6a","line":133,"updated":"2017-11-01 07:11:16.000000000","message":"Could you please mock LOG as well and assert on it?","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"f8f362c7f0f1a069c1d7ccc7d1e5b43dc52c2dc2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"data-change-event-subscription/neutron:neutron/\" +"},{"line_number":131,"context_line":"            \"neutron:hostconfigs/datastore\u003dOPERATIONAL/scope\u003dSUBTREE\")"},{"line_number":132,"context_line":"        self.assertEqual(EXPECTED_OUTPUT, stream_url)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_84d5e2e7","line":133,"in_reply_to":"3f4b6375_137eda6a","updated":"2017-11-01 08:11:58.000000000","message":"\u003e Could you please mock LOG as well and assert on it?\n\nI really don\u0027t find this useful. We don\u0027t want to test a particular interface, we want to test behavior. If you mock and assert on LOG then you bound the code to a specific workflow when you actually expect a result.","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"68d44b674536fae14c6c460c4855c71f7570aef7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"data-change-event-subscription/neutron:neutron/\" +"},{"line_number":131,"context_line":"            \"neutron:hostconfigs/datastore\u003dOPERATIONAL/scope\u003dSUBTREE\")"},{"line_number":132,"context_line":"        self.assertEqual(EXPECTED_OUTPUT, stream_url)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_448daa2f","line":133,"in_reply_to":"3f4b6375_137eda6a","updated":"2017-11-01 07:58:59.000000000","message":"Done","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"8db00998275913a1769294682927729b7280a616","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            \"data-change-event-subscription/neutron:neutron/\" +"},{"line_number":131,"context_line":"            \"neutron:hostconfigs/datastore\u003dOPERATIONAL/scope\u003dSUBTREE\")"},{"line_number":132,"context_line":"        self.assertEqual(EXPECTED_OUTPUT, stream_url)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_24eaae74","line":133,"in_reply_to":"3f4b6375_84d5e2e7","updated":"2017-11-01 08:14:18.000000000","message":"I gotta say, I\u0027m in agreement with Michel on this one. Can we please agree to remove the test of the log statement I just added?","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"0ffb517d258184a446f9d1545797d937484f088a","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"},{"line_number":137,"context_line":"        request_response \u003d self._get_mock_request_response(200)"},{"line_number":138,"context_line":"        request_response.json \u003d mock.Mock("},{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_b0713ce1","line":136,"range":{"start_line":136,"start_character":33,"end_line":136,"end_character":37},"updated":"2017-11-01 07:11:16.000000000","message":"For better readability, could you please use service_unavailable?","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"c868dba3acda57138b49365838c126ed0b47ff4b","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"},{"line_number":137,"context_line":"        request_response \u003d self._get_mock_request_response(200)"},{"line_number":138,"context_line":"        request_response.json \u003d mock.Mock("},{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_e4f93680","line":136,"range":{"start_line":136,"start_character":33,"end_line":136,"end_character":37},"in_reply_to":"3f4b6375_0487b211","updated":"2017-11-01 08:03:37.000000000","message":"For the record, I do not agree that \"service_unavailable\" is more readable than \"503\". Developers are familiar with http codes, less with the constants defined in requests.codes, imho. Anyway, I changed it to be like your suggestion.","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"68d44b674536fae14c6c460c4855c71f7570aef7","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"},{"line_number":137,"context_line":"        request_response \u003d self._get_mock_request_response(200)"},{"line_number":138,"context_line":"        request_response.json \u003d mock.Mock("},{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_0487b211","line":136,"range":{"start_line":136,"start_character":33,"end_line":136,"end_character":37},"in_reply_to":"3f4b6375_b0713ce1","updated":"2017-11-01 07:58:59.000000000","message":"Done","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"0ffb517d258184a446f9d1545797d937484f088a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"},{"line_number":137,"context_line":"        request_response \u003d self._get_mock_request_response(200)"},{"line_number":138,"context_line":"        request_response.json \u003d mock.Mock("},{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"},{"line_number":140,"context_line":"        mocked_sendjson.return_value \u003d request_response"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_f048d487","line":137,"range":{"start_line":137,"start_character":8,"end_line":137,"end_character":63},"updated":"2017-11-01 07:11:16.000000000","message":"use actual message not code. 200-\u003eok","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"68d44b674536fae14c6c460c4855c71f7570aef7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    @mock.patch.object(odl_client, \u0027sendjson\u0027)"},{"line_number":135,"context_line":"    @mock.patch.object(odl_client, \u0027get\u0027)"},{"line_number":136,"context_line":"    def test_subscribe_websocket_503(self, mocked_get, mocked_sendjson):"},{"line_number":137,"context_line":"        request_response \u003d self._get_mock_request_response(200)"},{"line_number":138,"context_line":"        request_response.json \u003d mock.Mock("},{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"},{"line_number":140,"context_line":"        mocked_sendjson.return_value \u003d request_response"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_e47db61c","line":137,"range":{"start_line":137,"start_character":8,"end_line":137,"end_character":63},"in_reply_to":"3f4b6375_f048d487","updated":"2017-11-01 07:58:59.000000000","message":"Done","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":13912,"name":"rajiv","email":"thenakliman@gmail.com","username":"rajiv.kumar"},"change_message_id":"0ffb517d258184a446f9d1545797d937484f088a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"},{"line_number":140,"context_line":"        mocked_sendjson.return_value \u003d request_response"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        request_response \u003d self._get_mock_request_response(500)"},{"line_number":143,"context_line":"        request_response.headers \u003d TestWebsocketClient.FAKE_WEBSOCKET_SUBS_DATA"},{"line_number":144,"context_line":"        mocked_get.return_value \u003d request_response"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_7054e421","line":142,"range":{"start_line":142,"start_character":59,"end_line":142,"end_character":63},"updated":"2017-11-01 07:11:16.000000000","message":"same as L131","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"},{"author":{"_account_id":22380,"name":"Josh Hershberg","email":"jhershbe@redhat.com","username":"jhershbe"},"change_message_id":"68d44b674536fae14c6c460c4855c71f7570aef7","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            return_value\u003dTestWebsocketClient.FAKE_WEBSOCKET_STREAM_NAME_DATA)"},{"line_number":140,"context_line":"        mocked_sendjson.return_value \u003d request_response"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        request_response \u003d self._get_mock_request_response(500)"},{"line_number":143,"context_line":"        request_response.headers \u003d TestWebsocketClient.FAKE_WEBSOCKET_SUBS_DATA"},{"line_number":144,"context_line":"        mocked_get.return_value \u003d request_response"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_a477be3a","line":142,"range":{"start_line":142,"start_character":59,"end_line":142,"end_character":63},"in_reply_to":"3f4b6375_7054e421","updated":"2017-11-01 07:58:59.000000000","message":"Done","commit_id":"4e6c689a80252ae7ac3893b7bce93df48c7501e6"}]}
