)]}'
{"tests/unit/queues/v2/test_client.py":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3211c1a0c2217548879704a0bd8650bf2c72e0c2","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@ddt.ddt"},{"line_number":29,"context_line":"class TestClient(base.TestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @ddt.data(*VERSIONS)"},{"line_number":32,"context_line":"    def test_transport(self, version):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_420ab8d3","line":29,"range":{"start_line":29,"start_character":17,"end_line":29,"end_character":30},"updated":"2016-03-15 20:31:36.000000000","message":"You have transformed health tests into ping tests.\n\nIt means API v2 don\u0027t have health tests now, which is not good.\n\nI think, if we inherit this API v2 test class from tests.unit.queues.v1.test_client.TestClient, the problem will be easily solved.","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3211c1a0c2217548879704a0bd8650bf2c72e0c2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def test_ping_ok(self, version):"},{"line_number":39,"context_line":"        cli \u003d client.Client(\u0027http://example.com\u0027,"},{"line_number":40,"context_line":"                            version, {\"auth_opts\": {\u0027backend\u0027: \u0027noauth\u0027}})"},{"line_number":41,"context_line":"        with mock.patch.object(core, \u0027ping\u0027, autospec\u003dTrue) as core_ping:"},{"line_number":42,"context_line":"            core_ping.return_value \u003d None"},{"line_number":43,"context_line":"            self.assertTrue(cli.ping())"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_9f441775","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":73},"updated":"2016-03-15 20:31:36.000000000","message":"I think to test this feature properly(including the code inside \u0027core\u0027), we should mock \u0027transport.send\u0027 instead of \u0027core.ping\u0027. Just like in other unit tests.\n\nHere\u0027s how the transport mock looks like:\n\nwith mock.patch.object(self.transport, \u0027send\u0027,\n                       autospec\u003dTrue) as send_method:\n    ...\n\n\nSame for the test_ping_bad test.","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"fe1ec19c21718e8c0167df9e0e599fec678a7b65","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            raise errors.ServiceUnavailableError()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        with mock.patch.object(core, \u0027ping\u0027, autospec\u003dTrue) as core_ping:"},{"line_number":54,"context_line":"            core_ping.side_effect \u003d raise_error"},{"line_number":55,"context_line":"            self.assertRaises(errors.ServiceUnavailableError, cli.ping)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_fdf3469c","line":55,"range":{"start_line":54,"start_character":12,"end_line":55,"end_character":71},"updated":"2016-03-23 03:46:12.000000000","message":"core.ping in your implementation is not raising any exceptions. Why we make it raise an exception in this test? What do we test?\n\nAlso I still don\u0027t think it\u0027s good to mock core.ping method. The legacy code wasn\u0027t written very nice. Maybe it\u0027s better not to copy it and instead fix it - to make it mock transport.","commit_id":"b3c6dbbc4a8d0ec64c76f8137e8435467c081243"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3cec97357a1468b1c6528bfef804795d2ab0d861","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@ddt.ddt"},{"line_number":29,"context_line":"class TestClient(base.TestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @ddt.data(*VERSIONS)"},{"line_number":32,"context_line":"    def test_transport(self, version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa0719c6_32e76841","line":29,"range":{"start_line":29,"start_character":17,"end_line":29,"end_character":30},"updated":"2016-03-24 01:12:40.000000000","message":"It\u0027s still doesn\u0027t inherit from api v1 TestClient.","commit_id":"f3b4bb5f999af8d5721cdcae570d3807793d0802"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"bce45a7ba8d927bc59ca7e0d9a0377de758057b5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@ddt.ddt"},{"line_number":29,"context_line":"class TestClient(base.TestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @ddt.data(*VERSIONS)"},{"line_number":32,"context_line":"    def test_transport(self, version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_c2ec132c","line":29,"range":{"start_line":29,"start_character":17,"end_line":29,"end_character":30},"in_reply_to":"ba0121b8_e52eba8a","updated":"2016-04-01 22:44:50.000000000","message":"Oh, I didn\u0027t knew health is different.\nYou\u0027re right. In API v1 it\u0027s a simple ping. In API v1.1 and API v2 it\u0027s full health report.\nBTW I\u0027m not sure it\u0027s bad or good that our python-zaqarclient don\u0027t show full health report on API v1.1 on client.health() method, but behaves exactly like on API v1.","commit_id":"f3b4bb5f999af8d5721cdcae570d3807793d0802"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"a16ea5043e91e3f3335c1fed3a9b42284fb0ce57","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@ddt.ddt"},{"line_number":29,"context_line":"class TestClient(base.TestBase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @ddt.data(*VERSIONS)"},{"line_number":32,"context_line":"    def test_transport(self, version):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_e52eba8a","line":29,"range":{"start_line":29,"start_character":17,"end_line":29,"end_character":30},"in_reply_to":"fa0719c6_32e76841","updated":"2016-03-31 21:44:31.000000000","message":"I don\u0027t really understand why we have to inherit from v1, TBH.\n\nThe /health in v1 is totally different from /health of v2, because /health of v1 has been renamed as /ping in v2.\n\nAnd we have already add a separate test file for health. So can you remind me why do we have to inherit from v1 at here?","commit_id":"f3b4bb5f999af8d5721cdcae570d3807793d0802"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3cec97357a1468b1c6528bfef804795d2ab0d861","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        def raise_error(*args, **kwargs):"},{"line_number":52,"context_line":"            raise errors.ServiceUnavailableError()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        transport.send \u003d raise_error"},{"line_number":55,"context_line":"        self.assertFalse(cli.ping())"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa0719c6_d238acd5","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":36},"updated":"2016-03-24 01:12:40.000000000","message":"I don\u0027t think this is the proper way of mocking. You can reuse the example of how we mock transport from other tests.\n\nAlso what about all other tests in v1 and v2 \u0027test_client.py\u0027 that mock \u0027core\u0027 object?","commit_id":"f3b4bb5f999af8d5721cdcae570d3807793d0802"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"a16ea5043e91e3f3335c1fed3a9b42284fb0ce57","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        def raise_error(*args, **kwargs):"},{"line_number":52,"context_line":"            raise errors.ServiceUnavailableError()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        transport.send \u003d raise_error"},{"line_number":55,"context_line":"        self.assertFalse(cli.ping())"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba0121b8_25955232","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":36},"in_reply_to":"fa0719c6_d238acd5","updated":"2016-03-31 21:44:31.000000000","message":"Done","commit_id":"f3b4bb5f999af8d5721cdcae570d3807793d0802"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3a6169990857caf7fb50a951024afa7ab9722365","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def test_ping_ok(self, version):"},{"line_number":39,"context_line":"        cli \u003d client.Client(\u0027http://example.com\u0027,"},{"line_number":40,"context_line":"                            version, {\"auth_opts\": {\u0027backend\u0027: \u0027noauth\u0027}})"},{"line_number":41,"context_line":"        with mock.patch.object(core, \u0027ping\u0027, autospec\u003dTrue) as core_ping:"},{"line_number":42,"context_line":"            core_ping.return_value \u003d True"},{"line_number":43,"context_line":"            self.assertTrue(cli.ping())"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_42912352","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":73},"updated":"2016-04-01 22:56:41.000000000","message":"Unlike our API v1\u0027s core.health function, that just parses the response, API v2\u0027s core.ping contains some important logic that we don\u0027t want ever to break accidentally.\nSo I still think it\u0027s better to mock transport instead of core.ping.","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"5a8fcc4b12924b94100a1343350ee26fbd3c0008","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def test_ping_ok(self, version):"},{"line_number":39,"context_line":"        cli \u003d client.Client(\u0027http://example.com\u0027,"},{"line_number":40,"context_line":"                            version, {\"auth_opts\": {\u0027backend\u0027: \u0027noauth\u0027}})"},{"line_number":41,"context_line":"        with mock.patch.object(core, \u0027ping\u0027, autospec\u003dTrue) as core_ping:"},{"line_number":42,"context_line":"            core_ping.return_value \u003d True"},{"line_number":43,"context_line":"            self.assertTrue(cli.ping())"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_c9acd4a2","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":73},"in_reply_to":"ba0121b8_42912352","updated":"2016-04-07 03:40:11.000000000","message":"Ok, will fix it in next ps.","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"529457086f9c6f3361c6a3813b80295561c61e3d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        def raise_error(*args, **kwargs):"},{"line_number":51,"context_line":"            raise errors.ServiceUnavailableError()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        with mock.patch.object(cli.transport(), \u0027send\u0027,"},{"line_number":54,"context_line":"                               autospec\u003dTrue) as send_method:"},{"line_number":55,"context_line":"            send_method.side_effect \u003d raise_error"},{"line_number":56,"context_line":"            self.assertFalse(cli.ping())"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_22d06fc9","line":56,"range":{"start_line":53,"start_character":0,"end_line":56,"end_character":40},"updated":"2016-04-01 23:02:18.000000000","message":"Nice, thank you!","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"}],"zaqarclient/queues/v2/cli.py":[{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3211c1a0c2217548879704a0bd8650bf2c72e0c2","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    def take_action(self, parsed_args):"},{"line_number":416,"context_line":"        client \u003d _get_client(self, parsed_args)"},{"line_number":417,"context_line":"        health \u003d client.health()"},{"line_number":418,"context_line":"        print(json.dumps(health, indent\u003d4, sort_keys\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_452be282","line":418,"updated":"2016-03-15 20:31:36.000000000","message":"Hope it\u0027s okay to print json, when in other cases we print ASCII tables. I know it\u0027s hard in this case to make python-zaqarclient print tables. And we probably don\u0027t need it.","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"}],"zaqarclient/queues/v2/core.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"107372b01e6e9c445f8569bec9e6c5fb70cfe7ea","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    request.operation \u003d \u0027ping\u0027"},{"line_number":239,"context_line":"    resp \u003d transport.send(request)"},{"line_number":240,"context_line":"    return resp.deserialized_content"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def health(transport, request, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_64ab858a","line":240,"updated":"2016-03-11 20:05:35.000000000","message":"Do we really need to call deserialzed_content here? What\u0027s the expected response body here?","commit_id":"c8df5e9f44e5566377dd40e3f527e80218c19ab4"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"ac89083b6b02631dba462949ce0b6f5e45201fb8","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    request.operation \u003d \u0027ping\u0027"},{"line_number":238,"context_line":"    resp \u003d transport.send(request)"},{"line_number":239,"context_line":"    return resp.deserialized_content"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def health(transport, request, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_a1ab7f1c","line":239,"updated":"2016-03-14 14:27:12.000000000","message":"Did you see my comment in the previous PS?","commit_id":"37f3c62db38acadade375ab4f2ac6315eaa0c0eb"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"c2f3ebaded67bd0c79d67be9aba115bd77e5cdbb","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    request.operation \u003d \u0027ping\u0027"},{"line_number":238,"context_line":"    resp \u003d transport.send(request)"},{"line_number":239,"context_line":"    return resp.deserialized_content"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def health(transport, request, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_bf36ec4f","line":239,"in_reply_to":"3afc51ec_a1ab7f1c","updated":"2016-03-14 17:07:35.000000000","message":"Shit, I can\u0027t believe what I did.","commit_id":"37f3c62db38acadade375ab4f2ac6315eaa0c0eb"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"196c254e9699c59673645fe48b5d61101af62c87","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    \"\"\""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    request.operation \u003d \u0027ping\u0027"},{"line_number":239,"context_line":"    return transport.send(request)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def health(transport, request, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_de86c112","line":239,"updated":"2016-03-15 11:41:53.000000000","message":"What do you think about returning True/False? \n\nReturning the request object doesn\u0027t feel right to me as it doesn\u0027t belong to the higher level of this library.","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3211c1a0c2217548879704a0bd8650bf2c72e0c2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    \"\"\""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    request.operation \u003d \u0027ping\u0027"},{"line_number":239,"context_line":"    return transport.send(request)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def health(transport, request, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_0518ba1c","line":239,"in_reply_to":"1af94dfe_de86c112","updated":"2016-03-15 20:31:36.000000000","message":"* response object\n\n+1\n\nAlso maybe we should additionally handle the situation, when Zaqar server is completely off, so our client don\u0027t get any response codes from Zaqar.\n\nBecause now, when I run openstack messaging ping --os-queues-api-version\u003d2, instead of getting this output in console:\n+----------+-------+\n| Field    | Value |\n+----------+-------+\n| Pingable | False |\n+----------+-------+\nI get this:\nHTTPConnectionPool(host\u003d\u0027127.0.0.1\u0027, port\u003d8888): Max retries exceeded with url: /v2/ping (Caused by NewConnectionError(\u0027\u003crequests.packages.urllib3.connection.HTTPConnection object at 0x7f9afa1d3cd0\u003e: Failed to establish a new connection: [Errno 111] Connection refused\u0027,))\n\nOr maybe it\u0027s actually good that our client produces this output in case of no response from Zaqar, because this way the user can know if zaqar has returned 503 response or hasn\u0027t responded at all.","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3211c1a0c2217548879704a0bd8650bf2c72e0c2","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"def health(transport, request, callback\u003dNone):"},{"line_number":243,"context_line":"    \"\"\"Get deailed health status of Zaqar server"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    :param transport: Transport instance to use"},{"line_number":246,"context_line":"    :type transport: `transport.base.Transport`"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_801ddd11","line":243,"range":{"start_line":243,"start_character":11,"end_line":243,"end_character":18},"updated":"2016-03-15 20:31:36.000000000","message":"s/deailed/detailed","commit_id":"85c1ac58017183cd91f2d490f593e321bb3da0f6"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"3a6169990857caf7fb50a951024afa7ab9722365","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    try:"},{"line_number":240,"context_line":"        transport.send(request)"},{"line_number":241,"context_line":"        return True"},{"line_number":242,"context_line":"    except Exception:"},{"line_number":243,"context_line":"        return False"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_a2f11f98","line":242,"range":{"start_line":242,"start_character":11,"end_line":242,"end_character":20},"updated":"2016-04-01 22:56:41.000000000","message":"FYI: I know I may be repeating myself. Just want to make sure it is really what you want.\n\nIn API v1 we catch errors.ServiceUnavailableError in this case and let any other exception continue raising. Maybe this behavior was better, because it provided more information to the user about Zaqar\u0027s state. But it forced the library user to catch exceptions, instead of just returning True or False.\n\nPersonally I\u0027m okay with both ways.","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"},{"author":{"_account_id":18683,"name":"Eva Balycheva","email":"ubershy@gmail.com","username":"eva"},"change_message_id":"fb282ddb4e7cb4188f788dd0575b093b5d536949","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    try:"},{"line_number":240,"context_line":"        transport.send(request)"},{"line_number":241,"context_line":"        return True"},{"line_number":242,"context_line":"    except Exception:"},{"line_number":243,"context_line":"        return False"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_00a07a42","line":242,"range":{"start_line":242,"start_character":11,"end_line":242,"end_character":20},"in_reply_to":"9a061dce_09d08c1e","updated":"2016-04-13 11:51:22.000000000","message":"It makes no more sense. I know it already. Okay, let\u0027s implement it like this.","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"5a8fcc4b12924b94100a1343350ee26fbd3c0008","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    try:"},{"line_number":240,"context_line":"        transport.send(request)"},{"line_number":241,"context_line":"        return True"},{"line_number":242,"context_line":"    except Exception:"},{"line_number":243,"context_line":"        return False"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_09d08c1e","line":242,"range":{"start_line":242,"start_character":11,"end_line":242,"end_character":20},"in_reply_to":"ba0121b8_a2f11f98","updated":"2016-04-07 03:40:11.000000000","message":"The transport layer at client side is very thin, that said, if there is any error at here. There must be something wrong on the server side, which means this \u0027ping\u0027 is failed, not pingable, hence False. Does that make more sense?","commit_id":"1166dc89e6437a53152575210b48ec27a5de1102"}]}
