)]}'
{"swift/cli/recon.py":[{"author":{"_account_id":15932,"name":"Bill Huber","email":"wbhuber@us.ibm.com","username":"wbhuber"},"change_message_id":"c6e843b1d6ccaa53fe99e345672d02984fecc9b9","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                else:"},{"line_number":438,"context_line":"                    print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":439,"context_line":"            else:"},{"line_number":440,"context_line":"                print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":441,"context_line":"        print(\"\u003d\" * 79)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def replication_check(self, hosts):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a26ad4f_07a5d4b3","side":"PARENT","line":440,"updated":"2015-10-29 15:40:35.000000000","message":"stats is always populated at line 421 so this else statement will be never hit.","commit_id":"9a7795086ccaf9463657389092677153380f6955"},{"author":{"_account_id":18838,"name":"Paul Dardeau","email":"paul.dardeau@intel.com","username":"pdardeau"},"change_message_id":"21e613b9b72969dce8d5ef344c76900d64db28b3","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                else:"},{"line_number":438,"context_line":"                    print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":439,"context_line":"            else:"},{"line_number":440,"context_line":"                print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":441,"context_line":"        print(\"\u003d\" * 79)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def replication_check(self, hosts):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a26ad4f_99e00d98","side":"PARENT","line":440,"updated":"2015-11-02 21:49:11.000000000","message":"Was this a logic error in initial implementation or a condition that\u0027s not possible? (or something else)","commit_id":"9a7795086ccaf9463657389092677153380f6955"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bca67af67f2f0082c85f22bcfcb112808efbd93d","unresolved":false,"context_lines":[{"line_number":437,"context_line":"                else:"},{"line_number":438,"context_line":"                    print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":439,"context_line":"            else:"},{"line_number":440,"context_line":"                print(\"[%s] - No hosts returned valid data.\" % k)"},{"line_number":441,"context_line":"        print(\"\u003d\" * 79)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def replication_check(self, hosts):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_5e216b4c","side":"PARENT","line":440,"updated":"2016-02-10 22:39:13.000000000","message":"I think this is the else for when the *value* of the key is an empty list?\n\nIt would be clearer to say:\n\n    for key, value in stats.items():\n        if value:\n            ... do stuff ...\n        else:\n            ... say nothing to be done ...","commit_id":"6a473e3d7bd7ca6a0754cffec1512c950649b0d5"}],"test/unit/cli/test_recon.py":[{"author":{"_account_id":18838,"name":"Paul Dardeau","email":"paul.dardeau@intel.com","username":"pdardeau"},"change_message_id":"21e613b9b72969dce8d5ef344c76900d64db28b3","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                     \"tcp_mem_allocated_bytes\": 45056}"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        def mock_scout_sockstat(app, host):"},{"line_number":324,"context_line":"            url \u003d \u0027http://%s:%s/sockstat\u0027 % host"},{"line_number":325,"context_line":"            response \u003d responses"},{"line_number":326,"context_line":"            status \u003d 200"},{"line_number":327,"context_line":"            return url, response, status, 0, 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a26ad4f_3c9d27bc","line":324,"updated":"2015-11-02 21:49:11.000000000","message":"is the port number supposed to passed into this format string? it doesn\u0027t appear to make any difference here, but could be helpful if this code gets copied somewhere else down the road.","commit_id":"d236f998d23a0865b4adaef46c063f824157ddeb"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bca67af67f2f0082c85f22bcfcb112808efbd93d","unresolved":false,"context_lines":[{"line_number":646,"context_line":"                0)]"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        cli \u003d recon.SwiftRecon()"},{"line_number":649,"context_line":"        cli.pool.imap \u003d dummy_request"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        expected_calls \u003d ["},{"line_number":652,"context_line":"            mock.call(\u0027Not mounted: sdb1 on 127.0.0.1:6010\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_fed61726","line":649,"updated":"2016-02-10 22:39:13.000000000","message":"this feels like *wrong* place to mock - it would look so much better if there was some framework to do something like this:\n\n    host_responses \u003d {\n        (\u0027127.0.0.1\u0027, 6000): \u003cstub_response\u003e\n    }\n    with self.capture_requests(host_responses) as request_log:\n        \u003cturn the crank\u003e\n\n    expected_requests \u003d set([\n        \u0027http://127.0.0.1:6001/something\u0027,\n    ])\n    self.assertEqual(request_log, expected_requests)\n    self.assert(\u003coutout\u003e)","commit_id":"f80c947e44edd3124a17dbb07c1e65ea0a9b1700"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bca67af67f2f0082c85f22bcfcb112808efbd93d","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        cli.umount_check([(\u0027127.0.0.1\u0027, 6010)])"},{"line_number":658,"context_line":"        mock_print.assert_has_calls(expected_calls)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    @mock.patch(\u0027six.moves.builtins.print\u0027)"},{"line_number":661,"context_line":"    def test_expirer_check(self, mock_print):"},{"line_number":662,"context_line":"        def dummy_request(*args, **kwargs):"},{"line_number":663,"context_line":"            return ["}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_7ee30706","line":660,"updated":"2016-02-10 22:39:13.000000000","message":"is mocking the print method better than some sort of with CaptureStdout context manager?  What happens if I put a print statement inside this test to debug something?","commit_id":"f80c947e44edd3124a17dbb07c1e65ea0a9b1700"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bca67af67f2f0082c85f22bcfcb112808efbd93d","unresolved":false,"context_lines":[{"line_number":679,"context_line":"            mock.call(\u0027[object_expiration_pass] low: 0, high: 0, avg: 0.9, \u0027 +"},{"line_number":680,"context_line":"                      \u0027total: 1, Failed: 0.0%, no_result: 0, reported: 2\u0027),"},{"line_number":681,"context_line":"            mock.call(\u0027[expired_last_pass] low: 45, high: 99, avg: 72.0, \u0027 +"},{"line_number":682,"context_line":"                      \u0027total: 144, Failed: 0.0%, no_result: 0, reported: 2\u0027)"},{"line_number":683,"context_line":"        ]"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"        cli \u003d recon.SwiftRecon()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_1ef213d3","line":682,"updated":"2016-02-10 22:39:13.000000000","message":"nit: this looks so annoying to maintain - if this output ever changes for better it\u0027s just overhead to have to come up date these too (isn\u0027t it?)\n\nI don\u0027t think we care about the specific format - it\u0027s not a parseable data format - more that there\u0027s some specific information assertIn is probably 99% good enough\n\nOTOH, the explicit documentation with an example is not *terrible* - but it\u0027d be easier to maintain if it was just a string literal:\n\nexpected output \u003d \"\"\"\n\u003clots of lines that can be replaced whole sale from test failure output when we inevitable change the format on purpose\u003e\n\"\"\"","commit_id":"f80c947e44edd3124a17dbb07c1e65ea0a9b1700"}]}
