)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"11fccfb2df9e8b82707313c54cea8cb149e4a67c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"element separated by SP characters\u0027"},{"line_number":13,"context_line":"(http://www.faqs.org/rfcs/rfc2616.html)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch coerces filling associated textual phrase."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I68d4c41d0c04871eb032d23d7b16aa2bf2c0bb73"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba15a1d1_35d0f51e","line":15,"updated":"2015-09-23 14:46:01.000000000","message":"Was there a bug associate with this behaviour? I thought I remembered a bug where this was affecting Nova running inside Apache or nginx?","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"d93f443617c0f0f33aafe376c461f0249d339d96","unresolved":false,"context_lines":[{"line_number":12,"context_line":"element separated by SP characters\u0027"},{"line_number":13,"context_line":"(http://www.faqs.org/rfcs/rfc2616.html)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch coerces filling associated textual phrase."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I68d4c41d0c04871eb032d23d7b16aa2bf2c0bb73"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a1a9d01_1ba75f50","line":15,"in_reply_to":"ba15a1d1_35d0f51e","updated":"2015-09-28 11:42:25.000000000","message":"Bug ID added","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2e56be8d012edbf6e0de2ed2e439fd99ff28fc77","unresolved":false,"context_lines":[{"line_number":12,"context_line":"element separated by SP characters\u0027"},{"line_number":13,"context_line":"(http://www.faqs.org/rfcs/rfc2616.html)"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch coerces filling associated textual phrase."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1496055"},{"line_number":18,"context_line":"Change-Id: I68d4c41d0c04871eb032d23d7b16aa2bf2c0bb73"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9a1a9d01_bfb3c009","line":15,"updated":"2015-10-04 19:27:31.000000000","message":"The above sentence doesn\u0027t really make sense. I think you mean:\n\nThis patch ensures the associated textual phrase for a status line is sent in the HTTP response.","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"}],"nova/exception.py":[{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"a49c60f9a9d72bee32d852c7858832635052e2b2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # \u0027code\u0027 and \u0027title\u0027 can not be empty because they correspond"},{"line_number":61,"context_line":"        # to numeric status code and its associated textual"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        elif self.code !\u003d 0:"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                self.title \u003d status_reasons[self.code]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_8fb4bbf2","line":63,"updated":"2015-09-14 19:51:08.000000000","message":"this assertion looks ambiguous, maybe it would be better to rewrite code with smth like: \nif not self.title and self.code !\u003d 0:\n  try:\n    ...  \nwhat do you think?","commit_id":"1a364b7c774a8c2f670584c4150f4162456c8457"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"f25999d78622190dd5534e1a98d4752ceacba639","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # \u0027code\u0027 and \u0027title\u0027 can not be empty because they correspond"},{"line_number":61,"context_line":"        # to numeric status code and its associated textual"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        elif self.code !\u003d 0:"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                self.title \u003d status_reasons[self.code]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba15a1d1_5430649e","line":63,"in_reply_to":"ba15a1d1_8fb4bbf2","updated":"2015-09-15 07:39:39.000000000","message":"Good question!\nThe problem is that I don\u0027t know how to behave when \n code \u003d\u003d 0\nLooks like if code \u003d\u003d 0 - it is some kind of server mistake...and I\u0027m not sure what to do in such case. Should we assign 500 status code or rise exception here. What is your point of view?","commit_id":"1a364b7c774a8c2f670584c4150f4162456c8457"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"11fccfb2df9e8b82707313c54cea8cb149e4a67c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # element separated by SP characters\u0027"},{"line_number":59,"context_line":"        # (http://www.faqs.org/rfcs/rfc2616.html)"},{"line_number":60,"context_line":"        # \u0027code\u0027 and \u0027title\u0027 can not be empty because they correspond"},{"line_number":61,"context_line":"        # to numeric status code and its associated textual"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_d58e592d","line":61,"updated":"2015-09-23 14:46:01.000000000","message":"s/textual/text/","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"d93f443617c0f0f33aafe376c461f0249d339d96","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # element separated by SP characters\u0027"},{"line_number":59,"context_line":"        # (http://www.faqs.org/rfcs/rfc2616.html)"},{"line_number":60,"context_line":"        # \u0027code\u0027 and \u0027title\u0027 can not be empty because they correspond"},{"line_number":61,"context_line":"        # to numeric status code and its associated textual"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_9b484f89","line":61,"in_reply_to":"ba15a1d1_d58e592d","updated":"2015-09-28 11:42:25.000000000","message":"Done","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4642b13d0c8bc13ac90851dcd3b505253a16aea9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # to numeric status code and its associated text"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":67,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_5b2d8593","line":64,"updated":"2015-09-29 19:50:46.000000000","message":"i\u0027d prefer to rewrite this, as you\u0027ve decided to leave self.title \u003d title on line 54 to:\nif not title:\n  ...","commit_id":"6fd6507cb70e8590a46087400cf7cc630142923b"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"4f118670e9198d99f5bc6fd93b914f67c768050e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        # to numeric status code and its associated text"},{"line_number":62,"context_line":"        if title:"},{"line_number":63,"context_line":"            self.title \u003d title"},{"line_number":64,"context_line":"        else:"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":67,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a1a9d01_b8c05551","line":64,"in_reply_to":"9a1a9d01_5b2d8593","updated":"2015-09-30 07:38:46.000000000","message":"Oh that\u0027s my fault! I\u0027ll remove self.title \u003d title from line 54","commit_id":"6fd6507cb70e8590a46087400cf7cc630142923b"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"19c360d5ae16afc1b3839073a0e7edb27434ce78","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_e73dc58f","line":67,"updated":"2015-09-30 11:52:31.000000000","message":"according to the logic, if the code is 222 , then we will report Success but I\u0027d think we can\u0027t say 222 is Success since it\u0027s not a valid code?","commit_id":"1a3a5f334d1c6ddabd64072b74ab6960c9373599"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"6ddb18da2273471c02066bd711499a1cfa05c6be","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_a7ea6d72","line":67,"in_reply_to":"9a1a9d01_67cd3584","updated":"2015-09-30 12:08:50.000000000","message":"yes I know we won\u0027t but seems \nstatus_reasons dict covers all the possible error code \nthe try / catch here to avoid the situation but this won\u0027t happen if nova code is carefully handle the error code, right? \n\nIf we do care about the error code return from nova, then except known code, all others should be taken as error ?","commit_id":"1a3a5f334d1c6ddabd64072b74ab6960c9373599"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"afa05b110af4e13a0502004b3ab4a9f4b186d57d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_4df28607","line":67,"in_reply_to":"9a1a9d01_a7ea6d72","updated":"2015-09-30 15:35:01.000000000","message":"Standard defines groups of status codes, and codes 200-299 indicate Success. So \u0027success\u0027 is default and valid value for codes 200-299.","commit_id":"1a3a5f334d1c6ddabd64072b74ab6960c9373599"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"3455c9b063b79cc849ac184687206d0b386fc4b0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_67cd3584","line":67,"in_reply_to":"9a1a9d01_e73dc58f","updated":"2015-09-30 11:57:53.000000000","message":"@jichenjc, I wonder who could raise this exception with code \u003d\u003d 222?:)","commit_id":"1a3a5f334d1c6ddabd64072b74ab6960c9373599"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"42723603b70874a035059d1c45caa6a1f53e8c81","unresolved":false,"context_lines":[{"line_number":31,"context_line":"import six"},{"line_number":32,"context_line":"import webob.exc"},{"line_number":33,"context_line":"from webob.util import status_generic_reasons"},{"line_number":34,"context_line":"from webob.util import status_reasons"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from nova.i18n import _, _LE"},{"line_number":37,"context_line":"from nova import safe_utils"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_7b57f725","line":34,"updated":"2015-10-09 17:21:41.000000000","message":"The above import objects, not modules. In the new patch I pushed here, I fixed that up.","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"36f026d38e3c23b877ec315333913dac5d6d1722","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_761db00e","line":67,"updated":"2015-10-05 14:02:52.000000000","message":"I\u0027m a little concerned about this fall back, because that means that someone used an error code that\u0027s not in HTTP today, which we\u0027re trying to avoid. I feel like if we get here we need a big ERROR in the logs as well, or something, because the code is very wrong.","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"eed39282b1f0e664636de1c61db57c9c63d3924a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_da55a91d","line":67,"in_reply_to":"7a2fa921_761db00e","updated":"2015-10-06 07:13:26.000000000","message":"Hi Sean Dague,\nQuestion: Why it is very wrong to return for example code 599?\nIf this response code is documented and clients know about that code I believe it isn\u0027t very wrong.\nRFC2616 says: \n\"The first digit of the Status-Code defines the class of response. The last two digits do not have any categorization role.\" Since \u0027last two digits do not have any categorization role\u0027 we can use whole range: 100-599.\nIf response code like 599 is not documented(not expected) tests should catch it, isn\u0027t it?","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"42723603b70874a035059d1c45caa6a1f53e8c81","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_7b80578b","line":67,"in_reply_to":"7a2fa921_88b039df","updated":"2015-10-09 17:21:41.000000000","message":"I pushed a new patch here that adds a LOG.error() call...","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"08852cc716cac37c471a8c60ef36657d92d75780","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_88b039df","line":67,"in_reply_to":"7a2fa921_abbe52fd","updated":"2015-10-06 13:24:37.000000000","message":"Sean Dague,\nI\u0027m not sure that it is right place to make such verification...Beside this webob.util.status_reasons contains list of codes not related to nova.","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"bf44e030eeb2a915fa4d1833fb76ec5e0d4645a0","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            try:"},{"line_number":65,"context_line":"                self.title \u003d status_reasons[self.code]"},{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a2fa921_abbe52fd","line":67,"in_reply_to":"7a2fa921_da55a91d","updated":"2015-10-06 12:38:26.000000000","message":"Because we explicitly don\u0027t want any code using any of that. This means an invalid status code is going back to the user.","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2e56be8d012edbf6e0de2ed2e439fd99ff28fc77","unresolved":false,"context_lines":[{"line_number":66,"context_line":"            except KeyError:"},{"line_number":67,"context_line":"                self.title \u003d status_generic_reasons[self.code // 100]"},{"line_number":68,"context_line":"        self.explanation \u003d explanation"},{"line_number":69,"context_line":"        super(ConvertedException, self).__init__()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def _cleanse_dict(original):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a1a9d01_1fa42cb7","line":69,"updated":"2015-10-04 19:27:31.000000000","message":"I was originally going to suggest that the webob.exc.WSGIHTTPException\u0027s constructor be used to properly set the title, but after looking at the horrible webob code, realized that wouldn\u0027t work anyway... so, yeah, this is fine. :)","commit_id":"0a82d20bafc31beda101a66e190fe531b04661f5"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"ca0e3671527dcb91e33d14c644eec8d62f70b42e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                self.title \u003d woutil.status_reasons[self.code]"},{"line_number":65,"context_line":"            except KeyError:"},{"line_number":66,"context_line":"                msg \u003d _LE(\"Improper or unknown HTTP status code used: %d\")"},{"line_number":67,"context_line":"                LOG.error(msg, code)"},{"line_number":68,"context_line":"                self.title \u003d woutil.status_generic_reasons[self.code // 100]"},{"line_number":69,"context_line":"        self.explanation \u003d explanation"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_565189d7","line":66,"updated":"2015-10-12 09:57:39.000000000","message":"Hi Jay,\n\nIt looks like this error message could appear or disappear without changes in openstack. Adding or removing codes from webob https://github.com/Pylons/webob/blob/master/webob/util.py#L56 will cause changing nova behaviour.\nThere is no strict definition of all HTTP codes in RFC2616(\"HTTP status codes are extensible. HTTP applications are not required to understand the meaning of all registered status codes\"). Webob uses it own list https://github.com/Pylons/webob/blob/master/webob/util.py#L56 and for example google uses different https://golang.org/src/net/http/status.go (there isn\u0027t 102 code for example). And niether webob nor GO contains 105 HTTP code.\nThat\u0027s why I think we shouldn\u0027t make nova sensitive to definition of some library\u0027s HTTP codes.\n\n\nFrom RFC2616 \"...applications MUST understand the class of any status code, as indicated by the first digit, and treat any unrecognized response as being equivalent to the x00 status code of that class\".\nThat\u0027s why I believe that usage of generic status reasons is not a violation.\n\n\n...But if we need such checking of status code I believe we should create own list of known openstack codes.","commit_id":"be81e8a1dc138face841fcb21941926b6a846a7e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b51a12ac52a8b053a84dda0dccb8581184cef3c4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            try:"},{"line_number":64,"context_line":"                self.title \u003d woutil.status_reasons[self.code]"},{"line_number":65,"context_line":"            except KeyError:"},{"line_number":66,"context_line":"                msg \u003d _LE(\"Improper or unknown HTTP status code used: %d\")"},{"line_number":67,"context_line":"                LOG.error(msg, code)"},{"line_number":68,"context_line":"                self.title \u003d woutil.status_generic_reasons[self.code // 100]"},{"line_number":69,"context_line":"        self.explanation \u003d explanation"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_a76c6237","line":66,"in_reply_to":"7a2fa921_565189d7","updated":"2015-10-12 11:54:35.000000000","message":"@Marian: All I did was add the error log message that Sean Dague had requested....","commit_id":"be81e8a1dc138face841fcb21941926b6a846a7e"}],"nova/tests/unit/test_exception.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"11fccfb2df9e8b82707313c54cea8cb149e4a67c","unresolved":false,"context_lines":[{"line_number":149,"context_line":"class ExceptionTestCase(test.NoDBTestCase):"},{"line_number":150,"context_line":"    @staticmethod"},{"line_number":151,"context_line":"    def _raise_exc(exc):"},{"line_number":152,"context_line":"        raise exc(500)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_exceptions_raise(self):"},{"line_number":155,"context_line":"        # NOTE(dprince): disable format errors since we are not passing kwargs"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba15a1d1_75e42ddf","line":152,"updated":"2015-09-23 14:46:01.000000000","message":"Please add a unit test that stresses the new code paths for determining the title attribute...","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"1683aba765d6e21b475183ec964449c6a083af93","unresolved":false,"context_lines":[{"line_number":149,"context_line":"class ExceptionTestCase(test.NoDBTestCase):"},{"line_number":150,"context_line":"    @staticmethod"},{"line_number":151,"context_line":"    def _raise_exc(exc):"},{"line_number":152,"context_line":"        raise exc(500)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_exceptions_raise(self):"},{"line_number":155,"context_line":"        # NOTE(dprince): disable format errors since we are not passing kwargs"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a1a9d01_55dfe068","line":152,"in_reply_to":"ba15a1d1_75e42ddf","updated":"2015-09-28 11:42:53.000000000","message":"Done","commit_id":"7dec82bdc2342a872a3764a4a23f4c9615bc6081"}]}
