)]}'
{"glance/api/v1/images.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"5fd89c5cd88314c69322d8e9f8546385fe38924b","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            LOG.debug(e)"},{"line_number":1052,"context_line":"            raise HTTPBadRequest(explanation\u003de, request\u003drequest)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F2dw%3D","line":1051,"updated":"2013-12-30 06:56:07.000000000","message":"nit: for prevent potential coding exception, it will be better if we always do \"unicode()\" conversion on the exception object, says:\n\nLOG.debug(unicode(e))\n\nraise .... explanation\u003dunicode(e) ...\n\nyou can see this pattern in the code.","commit_id":"3964e0d96c0e741208347c317b16da15dea9b48b"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"fda741f65b5a6f79d2076a62cadabd603aaddbb7","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            LOG.debug(e)"},{"line_number":1052,"context_line":"            raise HTTPBadRequest(explanation\u003de, request\u003drequest)"},{"line_number":1053,"context_line":""},{"line_number":1054,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F2NY%3D","line":1051,"in_reply_to":"AAAAT3%2F%2F2dw%3D","updated":"2013-12-30 08:56:36.000000000","message":"I thought it wasn\u0027t necessary because the exception message is already in _(...).\n\nBut since there\u0027s no harm I\u0027ll do the unicode(...) as well :).","commit_id":"3964e0d96c0e741208347c317b16da15dea9b48b"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"56127b4fe424d523fb72eae7abe00215e5361018","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F1HY%3D","line":1051,"updated":"2013-12-30 15:27:08.000000000","message":"nit: It would be nice to retain some of the context text in the error message.  I see that a good message comes from the exception that is raised but you may as well retain the \"Incoming image size \" text.","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"b89c23b9662b8a7af047565e5482857d5dc659c9","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2Fz4A%3D","line":1051,"in_reply_to":"AAAAT3%2F%2F1HY%3D","updated":"2013-12-31 02:11:40.000000000","message":"As of now utils.get_image_meta_from_headers raises this exception only if the \u0027size\u0027 value is inappropriate. Therefore we can get away with \"translating\" that exception into an \"image size\" message to the user here.\n\nBut if in the future utils.get_image_meta_from_headers were to validate other parameters (e.g. validate the values of disk_format or container_format) and still throw the same InvalidParameterValue exception (after all, that is the problem), then we can\u0027t/shouldn\u0027t do any such translations here.\n\nThat\u0027s why I chose to remove any parameter value analysis logic here (including any assumptions on the cause of the exception) and chose to put the offending parameter and value in the exception message.\n\nHere\u0027s what I\u0027ll do then ...\n\nclass InvalidParameterValue(Invalid):\n    message \u003d _(\"Invalid value \u0027%(value)s\u0027 for parameter \u0027%(param)s\u0027: %(extra_msg)s\")\n\nand in utils.get_image_meta_from_headers:\n\n    ...\n    extra_msg_str \u003d _(\"Incoming image size of %s was not convertible to\"\n                      \"an integer.\") % result[\u0027size\u0027]\n    raise exception.InvalidParameterValue(value\u003dresult[\u0027size\u0027],\n                                          param\u003d\u0027size\u0027,\n                                          extra_msg\u003dextra_msg_str)\n    ...\n\nOK?","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"d2a2aab9caca2b29ec9381d707abe605a01e2fff","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2Fzxc%3D","line":1051,"in_reply_to":"AAAAT3%2F%2Fz4A%3D","updated":"2013-12-31 03:41:38.000000000","message":"Sounds great!","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"56127b4fe424d523fb72eae7abe00215e5361018","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F1HQ%3D","line":1052,"updated":"2013-12-30 15:27:08.000000000","message":"I am not sure that debug is the right log level here, can you explain why you picked that? (I could see it going either way).","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"b89c23b9662b8a7af047565e5482857d5dc659c9","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2Fz7w%3D","line":1052,"in_reply_to":"AAAAT3%2F%2F1HQ%3D","updated":"2013-12-31 02:11:40.000000000","message":"I guess it\u0027s redundant given that we\u0027re returning an HTTP error to the user anyway ... I was just following the practice I see in the code elsewhere. I\u0027ll remove it (or do you prefer logging at some other (what?) level?)","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":6493,"name":"John Bresnahan","email":"john@bresnahan.me","username":"jbresnah"},"change_message_id":"d2a2aab9caca2b29ec9381d707abe605a01e2fff","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.debug(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2FzxU%3D","line":1052,"in_reply_to":"AAAAT3%2F%2Fz7w%3D","updated":"2013-12-31 03:41:38.000000000","message":"I don\u0027t really know what the right thing here is.  I definitely like logging it and returning it to the user (not really redundant because there are 2 different audiences) I am just not sure of the right log level.  Debug seems like a noisy level for this but I might be wrong.  I guess what I would like here is to discover the policy or drive to asserting one.  However I do not want to hold up this patch any longer on such an issue.  We can take it to another forum.","commit_id":"7ad235fa682164ee28efe87bb3ad3a5ee63b65c2"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"6dd4697c2c3ef3b9108c15ba18fbc6ddccbeb71a","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.info(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FyP8%3D","line":1052,"updated":"2013-12-31 17:09:46.000000000","message":"I am not sure that the info level is correct, LOG. exception maybe since we are raising an exception and not letting the request go further? This would help sys admins or anyone else looking at logs be able to pick out exceptions which occur more easily","commit_id":"de0e139c9312e44e16f1ddd2978a9facf3f79d8d"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"e47925ab28f0a6d7917e7e5aec592f97e496f6c0","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.info(msg)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2Fx98%3D","line":1052,"in_reply_to":"AAAAT3%2F%2FyP8%3D","updated":"2014-01-01 00:17:13.000000000","message":"I had a chat with John Bresnahan yesterday on IRC and he had similar concerns about the appropriate log level. The direction he preferred (and I agree) was that we try to define some policy as to what log level should we have for logging (user-facing) exceptions.\n\nDo we have such a policy? Should we take this up on the mailing list to a wider audience and see if we can agree on such a policy?\n\nIn the end since we didn\u0027t know of such a policy we settled on log.info.\n\nWe didn\u0027t want a log.error (and that\u0027s the same as log.exception) because it might wake up some operator in the middle of the night over an exception that really doesn\u0027t negatively impact the system, and we dropped log.debug (that\u0027s what it originally was) because we felt adding it to already abundant debug messages might not be helpful. Therefore we settled on log.info.\n\nHow about this then - we leave it at log.info but add the exception info?\n\n  log.info(msg, exc_info\u003dTrue)","commit_id":"de0e139c9312e44e16f1ddd2978a9facf3f79d8d"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"a49976c7a0b4ca2ac542b046180269b2345cb51a","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.info(msg, exc_info\u003dTrue)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FwrI%3D","line":1052,"updated":"2014-01-02 07:16:00.000000000","message":"humm interesting, so I\u0027m thinking how about to using warn level, it is not too strong like exception level but, the other hand, it can get some notices from admin/operator. IMO info level is too light at here, as iccha motioned.","commit_id":"eae653b9cb9cc27fbc5e4cb6fc9b9571aa56dfa0"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"5f61e6f1f3d8404d6ef45a1a1792a106d63025c1","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"            result[\u0027image_meta\u0027] \u003d utils.get_image_meta_from_headers(request)"},{"line_number":1050,"context_line":"        except exception.InvalidParameterValue as e:"},{"line_number":1051,"context_line":"            msg \u003d unicode(e)"},{"line_number":1052,"context_line":"            LOG.info(msg, exc_info\u003dTrue)"},{"line_number":1053,"context_line":"            raise HTTPBadRequest(explanation\u003dmsg, request\u003drequest)"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"        image_meta \u003d result[\u0027image_meta\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2Fwow%3D","line":1052,"in_reply_to":"AAAAT3%2F%2FwrI%3D","updated":"2014-01-02 07:53:44.000000000","message":"Done","commit_id":"eae653b9cb9cc27fbc5e4cb6fc9b9571aa56dfa0"}],"glance/common/utils.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"06b2441e089e85a80a3a9ce71e71e67e7236fd9b","unresolved":false,"context_lines":[{"line_number":260,"context_line":"        except ValueError:"},{"line_number":261,"context_line":"            raise exception.Invalid"},{"line_number":262,"context_line":"        if result[\u0027size\u0027] \u003c 0:"},{"line_number":263,"context_line":"            raise exception.Invalid"},{"line_number":264,"context_line":"    for key in (\u0027is_public\u0027, \u0027deleted\u0027, \u0027protected\u0027):"},{"line_number":265,"context_line":"        if key in result:"},{"line_number":266,"context_line":"            result[key] \u003d strutils.bool_from_string(result[key])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F8fA%3D","line":263,"updated":"2013-12-26 15:26:00.000000000","message":"It would be nice to raise Invalid with more specific message","commit_id":"23489a396f767c12e7e6b8a3f9fdc7b038af0af4"}],"glance/tests/unit/v1/test_api.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"5d72c9e893da0277dfbdca25426f88182120a1a6","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        }"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        def exec_bad_size_test(bad_size):"},{"line_number":344,"context_line":"            fixture_headers[\u0027size\u0027] \u003d bad_size"},{"line_number":345,"context_line":"            req \u003d webob.Request.blank(\"/images\","},{"line_number":346,"context_line":"                                      method\u003d\u0027POST\u0027,"},{"line_number":347,"context_line":"                                      headers\u003dfixture_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F%2BAc%3D","line":344,"updated":"2013-12-26 05:53:00.000000000","message":"x-image-meta-size?\nObviously, the member \u0027x-image-meta-size\u0027 in fixture_headers should be removed and set it at here instead of setting the key \u0027size\u0027.","commit_id":"313c159a0e4a7e237babefa5eebf6886705556c0"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"8b85d30d3f1b426a4035aa84ec2b027990f1f37a","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        }"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        def exec_bad_size_test(bad_size):"},{"line_number":344,"context_line":"            fixture_headers[\u0027size\u0027] \u003d bad_size"},{"line_number":345,"context_line":"            req \u003d webob.Request.blank(\"/images\","},{"line_number":346,"context_line":"                                      method\u003d\u0027POST\u0027,"},{"line_number":347,"context_line":"                                      headers\u003dfixture_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAT3%2F%2F91s%3D","line":344,"in_reply_to":"AAAAT3%2F%2F%2BAc%3D","updated":"2013-12-26 06:19:55.000000000","message":"*facepalm* - I was thinking size and so that\u0027s what I wrote!! Will do. Thanks.","commit_id":"313c159a0e4a7e237babefa5eebf6886705556c0"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8b1cc526e199541b2e2c54f063c5249bc4e7691c","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                                      headers\u003dfixture_headers)"},{"line_number":347,"context_line":"            res \u003d req.get_response(self.api)"},{"line_number":348,"context_line":"            self.assertEqual(res.status_int, 400)"},{"line_number":349,"context_line":"            self.assertTrue(\u0027Incoming image size\u0027 in res.body)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        exec_bad_size_test(\u0027invalid\u0027)"},{"line_number":352,"context_line":"        #Bugfix 1260738: Check for negative sizes too"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9JE%3D","line":349,"updated":"2013-12-26 10:56:24.000000000","message":"I\u0027m thinking if these above two assert are reasonable given we\u0027re adding a new scenario. I mean, we should check more for the 2nd assert, such as checking if the given bad size is shown in the res.body. Otherwise, we can just use assertRaises to expect the BadRequest exception.","commit_id":"23489a396f767c12e7e6b8a3f9fdc7b038af0af4"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8b1cc526e199541b2e2c54f063c5249bc4e7691c","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            self.assertTrue(\u0027Incoming image size\u0027 in res.body)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        exec_bad_size_test(\u0027invalid\u0027)"},{"line_number":352,"context_line":"        #Bugfix 1260738: Check for negative sizes too"},{"line_number":353,"context_line":"        exec_bad_size_test(-10)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def test_bad_image_name(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F9KI%3D","line":352,"updated":"2013-12-26 10:56:24.000000000","message":"Sorry for the picky, but I would say this comment is not necessary. Since the code can the reviewers what happened.","commit_id":"23489a396f767c12e7e6b8a3f9fdc7b038af0af4"},{"author":{"_account_id":9369,"name":"Steve Kowalik","email":"steven@wedontsleep.org","username":"stevenk"},"change_message_id":"56d3aa086f1a0b615918d7e5cbc42f559ca73858","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            \u0027x-image-meta-container-format\u0027: \u0027bare\u0027,"},{"line_number":340,"context_line":"        }"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        def exec_bad_size_test(bad_size):"},{"line_number":343,"context_line":"            fixture_headers[\u0027x-image-meta-size\u0027] \u003d bad_size"},{"line_number":344,"context_line":"            req \u003d webob.Request.blank(\"/images\","},{"line_number":345,"context_line":"                                      method\u003d\u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F68Y%3D","line":342,"updated":"2013-12-27 04:58:12.000000000","message":"I think this can be refactored out into the main test class. Other tests are doing much the same thing, and asserting errors are returned. This should allow you to make the code clearer, and help make the other test cases smaller too.","commit_id":"3964e0d96c0e741208347c317b16da15dea9b48b"},{"author":{"_account_id":9520,"name":"David Koo (koofoss)","email":"david.koo@huawei.com","username":"koofoss"},"change_message_id":"11100298c851b69c15b92f6c43367fa503ccefd4","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            \u0027x-image-meta-container-format\u0027: \u0027bare\u0027,"},{"line_number":340,"context_line":"        }"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        def exec_bad_size_test(bad_size):"},{"line_number":343,"context_line":"            fixture_headers[\u0027x-image-meta-size\u0027] \u003d bad_size"},{"line_number":344,"context_line":"            req \u003d webob.Request.blank(\"/images\","},{"line_number":345,"context_line":"                                      method\u003d\u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F6wM%3D","line":342,"in_reply_to":"AAAAT3%2F%2F68Y%3D","updated":"2013-12-27 06:13:46.000000000","message":"I had thought about that ... in fact I wanted to do a bigger refactoring of the entire file - ATM it seems a little haphazard and there seems to be a fair amount of duplicated code. So I changed this small spot here and thought I\u0027d raise another bug for the refactoring - I\u0027m sure I\u0027d get a -1 if I started touching code not related to the defect  was trying to fix.\n\nWhat do you think?","commit_id":"3964e0d96c0e741208347c317b16da15dea9b48b"},{"author":{"_account_id":9369,"name":"Steve Kowalik","email":"steven@wedontsleep.org","username":"stevenk"},"change_message_id":"d1ff45b8bcc9f948d1c166d0143e497d113b074c","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            \u0027x-image-meta-container-format\u0027: \u0027bare\u0027,"},{"line_number":340,"context_line":"        }"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        def exec_bad_size_test(bad_size):"},{"line_number":343,"context_line":"            fixture_headers[\u0027x-image-meta-size\u0027] \u003d bad_size"},{"line_number":344,"context_line":"            req \u003d webob.Request.blank(\"/images\","},{"line_number":345,"context_line":"                                      method\u003d\u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F4h4%3D","line":342,"in_reply_to":"AAAAT3%2F%2F6wM%3D","updated":"2013-12-28 04:52:14.000000000","message":"How about moving that function out into the main test class, and having your new test call it, and then once it\u0027s merged, proposing another change that refactors the rest to make use of it?","commit_id":"3964e0d96c0e741208347c317b16da15dea9b48b"}]}
