)]}'
{"swift/cli/recon.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"9c56025a80a7cb020a66710a53ce7f7d66a4b520","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            req \u003d urllib2.Request(url)"},{"line_number":132,"context_line":"            req.get_method \u003d lambda: \u0027OPTIONS\u0027"},{"line_number":133,"context_line":"            conn \u003d urllib2.urlopen(req)"},{"line_number":134,"context_line":"            header \u003d getattr(conn.info(), \u0027getheader\u0027"},{"line_number":135,"context_line":"                             if six.PY2 else \u0027get\u0027)(\u0027Server\u0027)"},{"line_number":136,"context_line":"            server_header \u003d header.split(\u0027/\u0027)"},{"line_number":137,"context_line":"            content \u003d server_header[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_5fd87f1c","line":134,"updated":"2018-04-12 22:48:22.000000000","message":"I think this has gone too far. Just replace it with plain\n\ninfo \u003d conn.info()\nserver \u003d info[\u0027Server\u0027]\n\nThe key point of getheader() in this case, it behaves like get() otherwise would. But, if it ever returns None, the very next statement will traceback. Might as well throw KeyError()!\n\nIf it is too hard to adjust the test that mocks getheader(), then you can use plain get() in py2 too. Maybe it wasn\u0027t supported in very old py2, but seems to work in 2.7. I verified that the comparison is case-independent.","commit_id":"4600d80897fa19877d826ac8e12cbcf2dc65bc24"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a2109abafdc6209b3a92c471efcd5fbb5b67c057","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            body \u003d urllib2.urlopen(url, timeout\u003dself.timeout).read()"},{"line_number":90,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"},{"line_number":91,"context_line":"                body \u003d body.decode(\u0027utf8\u0027)"},{"line_number":92,"context_line":"            content \u003d json.loads(body)"},{"line_number":93,"context_line":"            if self.verbose:"},{"line_number":94,"context_line":"                print(\"-\u003e %s: %s\" % (url, content))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_755466fe","line":91,"updated":"2018-04-13 20:57:19.000000000","message":"Huh. I\u0027m a little surprised that this is necessary... typically when we write out JSON it\u0027s all ASCII anyway, so when we pass it to json.loads it\u0027ll get decoded automatically... or so I thought.\n\nAh. If I back this out, looks like py36 is still happy, but py34 (at least) complains:\n\n TypeError: the JSON object must be str, not \u0027bytes\u0027\n\nNo idea what py35 does.\n\nAs another idea, we could just *always* decode(\u0027ascii\u0027) here... the JSON spec talks only of code points (so it\u0027s a sane thing to do on py2), and again, we should always be writing out ASCII...","commit_id":"817ca078e13c688efbd9fad3af93541d64ca3886"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a2109abafdc6209b3a92c471efcd5fbb5b67c057","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            req \u003d urllib2.Request(url)"},{"line_number":132,"context_line":"            req.get_method \u003d lambda: \u0027OPTIONS\u0027"},{"line_number":133,"context_line":"            conn \u003d urllib2.urlopen(req)"},{"line_number":134,"context_line":"            header \u003d conn.info().get(\u0027Server\u0027)"},{"line_number":135,"context_line":"            server_header \u003d header.split(\u0027/\u0027)"},{"line_number":136,"context_line":"            content \u003d server_header[0]"},{"line_number":137,"context_line":"            status \u003d 200"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_b21bf47e","line":134,"updated":"2018-04-13 20:57:19.000000000","message":"Yeah, seems to check out\n\n Python 2.7.10 (default, Jul 15 2017, 17:16:57)\n [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n \u003e\u003e\u003e from eventlet.green import urllib2\n \u003e\u003e\u003e req \u003d urllib2.Request(\u0027http://saio:8090/info\u0027)\n \u003e\u003e\u003e conn \u003d urllib2.urlopen(req)\n \u003e\u003e\u003e i\u003dconn.info()\n \u003e\u003e\u003e i.get(\u0027content-type\u0027)\n \u0027application/json; charset\u003dUTF-8\u0027\n \u003e\u003e\u003e i.getheader(\u0027content-type\u0027)\n \u0027application/json; charset\u003dUTF-8\u0027\n \u003e\u003e\u003e i.get\n \u003cbound method HTTPMessage.getheader of \u003chttplib.HTTPMessage instance at 0x10c60b8c0\u003e\u003e","commit_id":"817ca078e13c688efbd9fad3af93541d64ca3886"}],"test/unit/cli/test_recon.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f2873d5b6752f0eccf173483cf693b9324f70c6b","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            response_body \u003d resps[(host, port, path[7:])]"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"            resp \u003d mock.MagicMock()"},{"line_number":674,"context_line":"            resp.read \u003d mock.MagicMock(side_effect\u003d[response_body])"},{"line_number":675,"context_line":"            return resp"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        return mock.patch(GREEN_URLLIB_URLOPEN, fake_urlopen)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_45d7db4c","line":674,"range":{"start_line":674,"start_character":52,"end_line":674,"end_character":65},"updated":"2018-03-09 00:44:02.000000000","message":"I wonder if this should get encoded...","commit_id":"fd524ae89ab2bb051ab749eaf6a2264bcc6a2902"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"9c56025a80a7cb020a66710a53ce7f7d66a4b520","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            return d.get(name)"},{"line_number":115,"context_line":"        mock_urlopen.return_value.info.return_value.getheader \u003d getheader"},{"line_number":116,"context_line":"        # Py3 uses info().get(\u0027header\u0027)"},{"line_number":117,"context_line":"        mock_urlopen.return_value.info.return_value.get \u003d getheader"},{"line_number":118,"context_line":"        url, content, status \u003d self.scout_instance.scout_server_type("},{"line_number":119,"context_line":"            (\"127.0.0.1\", \"8080\"))"},{"line_number":120,"context_line":"        self.assertEqual(url, self.server_type_url)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_7fec63ba","line":117,"updated":"2018-04-12 22:48:22.000000000","message":"See remark about get()/getheader() in the code under test.","commit_id":"4600d80897fa19877d826ac8e12cbcf2dc65bc24"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a2109abafdc6209b3a92c471efcd5fbb5b67c057","unresolved":false,"context_lines":[{"line_number":175,"context_line":"name \u003d unu"},{"line_number":176,"context_line":"aliases \u003d %s"},{"line_number":177,"context_line":"\u0027\u0027\u0027 % self.policy_name"},{"line_number":178,"context_line":"        with open(swift_conf, \"wb\") as sc:"},{"line_number":179,"context_line":"            sc.write(swift_conf_data.encode(\u0027utf8\u0027))"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def tearDown(self, *_args, **_kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_f2d72ced","line":178,"range":{"start_line":178,"start_character":31,"end_line":178,"end_character":33},"updated":"2018-04-13 20:57:19.000000000","message":"I think we could also have opened this \"wt\" and left off the encode(), but w/e -- both work.","commit_id":"817ca078e13c688efbd9fad3af93541d64ca3886"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a2109abafdc6209b3a92c471efcd5fbb5b67c057","unresolved":false,"context_lines":[{"line_number":672,"context_line":""},{"line_number":673,"context_line":"            resp \u003d mock.MagicMock()"},{"line_number":674,"context_line":"            resp.read \u003d mock.MagicMock(side_effect\u003d["},{"line_number":675,"context_line":"                response_body if six.PY2 else response_body.encode(\u0027utf8\u0027)])"},{"line_number":676,"context_line":"            return resp"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"        return mock.patch(GREEN_URLLIB_URLOPEN, fake_urlopen)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_f2f08c93","line":675,"updated":"2018-04-13 20:57:19.000000000","message":"This is one of those times where I\u0027m tempted to just do\n\n side_effect\u003d[response_body.encode(\u0027ascii\u0027)]\n\nsince the body should all be ascii anyway. Meh.","commit_id":"817ca078e13c688efbd9fad3af93541d64ca3886"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a2109abafdc6209b3a92c471efcd5fbb5b67c057","unresolved":false,"context_lines":[{"line_number":876,"context_line":"            mock.call(\u0027Disk usage: lowest: 85.0%, \u0027 +"},{"line_number":877,"context_line":"                      \u0027highest: 90.0%%, avg: %s\u0027 %"},{"line_number":878,"context_line":"                      (\u002786.6666666667%\u0027 if six.PY2 else"},{"line_number":879,"context_line":"                       \u002786.66666666666667%\u0027)),"},{"line_number":880,"context_line":"            mock.call(\u0027\u003d\u0027 * 79),"},{"line_number":881,"context_line":"        ]"},{"line_number":882,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_f21e4cb9","line":879,"updated":"2018-04-13 20:57:19.000000000","message":"Does all this extra precision buy us much? I wonder if we should just use %g or %.2f in the original format string.","commit_id":"817ca078e13c688efbd9fad3af93541d64ca3886"}]}
