)]}'
{"glance/api/v1/images.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"a89d55de541142fc73a4671ac37c879fa1167edc","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"},{"line_number":789,"context_line":"        copy_from \u003d self._copy_from(req)"},{"line_number":790,"context_line":"        location \u003d image_meta.get(\u0027location\u0027)"},{"line_number":791,"context_line":"        sources \u003d list(filter(bool, (copy_from, location, image_data)))"},{"line_number":792,"context_line":"        if len(sources) \u003e\u003d 2:"},{"line_number":793,"context_line":"            msg \u003d _(\"It\u0027s invalid to provide multiple image sources.\")"},{"line_number":794,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_46a9d0de","line":791,"updated":"2016-01-26 16:29:28.000000000","message":"Should this just be\n\n    sources \u003d [x for x in (copy_from, location, image_data) if x]\n\nI know filter exists and its more functional but comprehensions are faster, right?","commit_id":"b7bcd9d73e6531427625c04f20f156dd985019ce"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"12a1d1196c707d5da2fb82390e95410d1dbf70f6","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"},{"line_number":789,"context_line":"        copy_from \u003d self._copy_from(req)"},{"line_number":790,"context_line":"        location \u003d image_meta.get(\u0027location\u0027)"},{"line_number":791,"context_line":"        sources \u003d list(filter(bool, (copy_from, location, image_data)))"},{"line_number":792,"context_line":"        if len(sources) \u003e\u003d 2:"},{"line_number":793,"context_line":"            msg \u003d _(\"It\u0027s invalid to provide multiple image sources.\")"},{"line_number":794,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_ec40e337","line":791,"in_reply_to":"9a68dd71_46a9d0de","updated":"2016-01-26 16:54:43.000000000","message":"Done","commit_id":"b7bcd9d73e6531427625c04f20f156dd985019ce"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"1ba4155a3e2dc0d25bcf9fd557d9dd402dedb126","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"},{"line_number":789,"context_line":"        copy_from \u003d self._copy_from(req)"},{"line_number":790,"context_line":"        location \u003d image_meta.get(\u0027location\u0027)"},{"line_number":791,"context_line":"        sources \u003d [obj for obj in (copy_from, location, image_data) if x]"},{"line_number":792,"context_line":"        if len(sources) \u003e\u003d 2:"},{"line_number":793,"context_line":"            msg \u003d _(\"It\u0027s invalid to provide multiple image sources.\")"},{"line_number":794,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_3d9e2308","line":791,"updated":"2016-01-26 18:03:33.000000000","message":"Should be `if obj`","commit_id":"aae923fd8836a7c1220f937e644f47ab13725263"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"b52e04cba56cf13325954bc5312b2ef45b296859","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"},{"line_number":789,"context_line":"        copy_from \u003d self._copy_from(req)"},{"line_number":790,"context_line":"        location \u003d image_meta.get(\u0027location\u0027)"},{"line_number":791,"context_line":"        sources \u003d [obj for obj in (copy_from, location, image_data) if x]"},{"line_number":792,"context_line":"        if len(sources) \u003e\u003d 2:"},{"line_number":793,"context_line":"            msg \u003d _(\"It\u0027s invalid to provide multiple image sources.\")"},{"line_number":794,"context_line":"            LOG.warn(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_fd240bc7","line":791,"in_reply_to":"9a68dd71_3d9e2308","updated":"2016-01-26 18:05:48.000000000","message":"Sorry, I rushed to push the new version before leaving and I didn\u0027t have time to test. It should be fixed in the new patch.","commit_id":"aae923fd8836a7c1220f937e644f47ab13725263"}],"glance/tests/unit/v1/test_api.py":[{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"bd66f6951df7784f6828a2140819f28348032b61","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.assertEqual(1, mock_external_source.call_count)"},{"line_number":514,"context_line":"        self.assertEqual(1, mock_get_store_from_location.call_count)"},{"line_number":515,"context_line":"        self.assertIn(\u0027Store for scheme %s not found\u0027 % scheme,"},{"line_number":516,"context_line":"                      res.body.decode())"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def test_create_with_location_unknown_scheme(self):"},{"line_number":519,"context_line":"        fixture_headers \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_9586b663","line":516,"updated":"2015-11-26 02:28:15.000000000","message":"Should this be decode(\u0027utf-8\u0027)?","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"027269f7a8787af591dddb3675c84cb13bfd81b7","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        self.assertEqual(1, mock_external_source.call_count)"},{"line_number":514,"context_line":"        self.assertEqual(1, mock_get_store_from_location.call_count)"},{"line_number":515,"context_line":"        self.assertIn(\u0027Store for scheme %s not found\u0027 % scheme,"},{"line_number":516,"context_line":"                      res.body.decode())"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    def test_create_with_location_unknown_scheme(self):"},{"line_number":519,"context_line":"        fixture_headers \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_37424eaf","line":516,"in_reply_to":"9a8ffd7b_9586b663","updated":"2015-11-26 14:39:34.000000000","message":"yep, good catch","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"bd66f6951df7784f6828a2140819f28348032b61","unresolved":false,"context_lines":[{"line_number":3415,"context_line":"        if six.PY3:"},{"line_number":3416,"context_line":"            body \u003d res.body.decode(\u0027utf-8\u0027)"},{"line_number":3417,"context_line":"        else:"},{"line_number":3418,"context_line":"            body \u003d res.body"},{"line_number":3419,"context_line":"        self.assertIn("},{"line_number":3420,"context_line":"            \u0027Image with identifier %s has been deleted.\u0027 % UUID2, body)"},{"line_number":3421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_952f96f5","line":3418,"updated":"2015-11-26 02:28:15.000000000","message":"Why is this special on python 3? There\u0027s a lot of other assertIn tests that either pass body without decoding, with decode() and also decode(\u0027utf-8\u0027). I\u0027m not quite sure what differentiates them. Any pointers on helping me understand this?","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"027269f7a8787af591dddb3675c84cb13bfd81b7","unresolved":false,"context_lines":[{"line_number":3415,"context_line":"        if six.PY3:"},{"line_number":3416,"context_line":"            body \u003d res.body.decode(\u0027utf-8\u0027)"},{"line_number":3417,"context_line":"        else:"},{"line_number":3418,"context_line":"            body \u003d res.body"},{"line_number":3419,"context_line":"        self.assertIn("},{"line_number":3420,"context_line":"            \u0027Image with identifier %s has been deleted.\u0027 % UUID2, body)"},{"line_number":3421,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_dad76749","line":3418,"in_reply_to":"9a8ffd7b_952f96f5","updated":"2015-11-26 14:39:34.000000000","message":"Right, I must have been tired when writing this.","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"bd66f6951df7784f6828a2140819f28348032b61","unresolved":false,"context_lines":[{"line_number":3658,"context_line":"        response \u003d webob.Response(request\u003dreq)"},{"line_number":3659,"context_line":"        self.serializer.meta(response, self.FIXTURE)"},{"line_number":3660,"context_line":"        for key, value in six.iteritems(exp_headers):"},{"line_number":3661,"context_line":"            self.assertEqual(value, response.headers[key], key)"},{"line_number":3662,"context_line":""},{"line_number":3663,"context_line":"    def test_meta_utf8(self):"},{"line_number":3664,"context_line":"        # We get unicode strings from JSON, and therefore all strings in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_d54afeab","line":3661,"updated":"2015-11-26 02:28:15.000000000","message":"Why did you add this key parameter?","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"027269f7a8787af591dddb3675c84cb13bfd81b7","unresolved":false,"context_lines":[{"line_number":3658,"context_line":"        response \u003d webob.Response(request\u003dreq)"},{"line_number":3659,"context_line":"        self.serializer.meta(response, self.FIXTURE)"},{"line_number":3660,"context_line":"        for key, value in six.iteritems(exp_headers):"},{"line_number":3661,"context_line":"            self.assertEqual(value, response.headers[key], key)"},{"line_number":3662,"context_line":""},{"line_number":3663,"context_line":"    def test_meta_utf8(self):"},{"line_number":3664,"context_line":"        # We get unicode strings from JSON, and therefore all strings in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_979c5a5e","line":3661,"in_reply_to":"9a8ffd7b_d54afeab","updated":"2015-11-26 14:39:34.000000000","message":"Done","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"482a525ea1b589048bdf53ba5bbf63f4e8c89373","unresolved":false,"context_lines":[{"line_number":3658,"context_line":"        response \u003d webob.Response(request\u003dreq)"},{"line_number":3659,"context_line":"        self.serializer.meta(response, self.FIXTURE)"},{"line_number":3660,"context_line":"        for key, value in six.iteritems(exp_headers):"},{"line_number":3661,"context_line":"            self.assertEqual(value, response.headers[key], key)"},{"line_number":3662,"context_line":""},{"line_number":3663,"context_line":"    def test_meta_utf8(self):"},{"line_number":3664,"context_line":"        # We get unicode strings from JSON, and therefore all strings in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_617fbd66","line":3661,"in_reply_to":"9a8ffd7b_d54afeab","updated":"2015-11-26 12:39:54.000000000","message":"I added this parameter for debug, it must be removed from this change. (It\u0027s unrelated to Python 3.)","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"}],"tox.ini":[{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"bd66f6951df7784f6828a2140819f28348032b61","unresolved":false,"context_lines":[{"line_number":19,"context_line":"commands \u003d sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:py34]"},{"line_number":22,"context_line":"commands \u003d lockutils-wrapper python setup.py testr --slowest --testr-args\u003d\u0027glance.tests.unit\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[testenv:pep8]"},{"line_number":25,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":1,"id":"9a8ffd7b_7561d238","line":22,"updated":"2015-11-26 02:28:15.000000000","message":"Could you add this change in a separate patch please? This will allow us to properly verify that the other changes are working okay.","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"027269f7a8787af591dddb3675c84cb13bfd81b7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"commands \u003d sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:py34]"},{"line_number":22,"context_line":"commands \u003d lockutils-wrapper python setup.py testr --slowest --testr-args\u003d\u0027glance.tests.unit\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[testenv:pep8]"},{"line_number":25,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":1,"id":"9a8ffd7b_3296e193","line":22,"in_reply_to":"9a8ffd7b_7561d238","updated":"2015-11-26 14:39:34.000000000","message":"Hum, I could, but, just like Victor, I don\u0027t really understand why you\u0027d like a separate patch. Could you be more explicit?","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"482a525ea1b589048bdf53ba5bbf63f4e8c89373","unresolved":false,"context_lines":[{"line_number":19,"context_line":"commands \u003d sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"[testenv:py34]"},{"line_number":22,"context_line":"commands \u003d lockutils-wrapper python setup.py testr --slowest --testr-args\u003d\u0027glance.tests.unit\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"[testenv:pep8]"},{"line_number":25,"context_line":"commands \u003d"}],"source_content_type":"text/x-properties","patch_set":1,"id":"9a8ffd7b_c1bc6908","line":22,"in_reply_to":"9a8ffd7b_7561d238","updated":"2015-11-26 12:39:54.000000000","message":"With this command, *all* glance.tests.unit tests are now run, so including the modified test_api. Why do want a separated change?","commit_id":"02bd5c6e94ae8f9532805a5b8d364bb5614683ff"}]}
