)]}'
{"swift/common/utils.py":[{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"2b53ae1dbee0c5b33cfbc026ff4447d0bfe4e801","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"    @trace_wsgi()"},{"line_number":1098,"context_line":"    __call__(self, environ, start_response)"},{"line_number":1099,"context_line":"    \"\"\""},{"line_number":1100,"context_line":"    def _outer(f):"},{"line_number":1101,"context_line":"        def _inner(*args, **kwargs):"},{"line_number":1102,"context_line":"            try:"},{"line_number":1103,"context_line":"                [_self, environ, start_response] \u003d args"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_48594f35","line":1100,"updated":"2014-08-16 00:05:44.000000000","message":"since you aren\u0027t passing in anything to trace_wsgi() or doing any conditionals in it, I think you can get rid of _outer() and instead use \"trace_wsgi(f)\"","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"383db80f2eeb2aa5070254f6fdeeacdd5220cc97","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"    @trace_wsgi()"},{"line_number":1098,"context_line":"    __call__(self, environ, start_response)"},{"line_number":1099,"context_line":"    \"\"\""},{"line_number":1100,"context_line":"    def _outer(f):"},{"line_number":1101,"context_line":"        def _inner(*args, **kwargs):"},{"line_number":1102,"context_line":"            try:"},{"line_number":1103,"context_line":"                [_self, environ, start_response] \u003d args"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_d0539d6a","line":1100,"in_reply_to":"7ac7a964_48594f35","updated":"2014-08-18 05:09:09.000000000","message":"Done","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"2b53ae1dbee0c5b33cfbc026ff4447d0bfe4e801","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"    __call__(self, environ, start_response)"},{"line_number":1099,"context_line":"    \"\"\""},{"line_number":1100,"context_line":"    def _outer(f):"},{"line_number":1101,"context_line":"        def _inner(*args, **kwargs):"},{"line_number":1102,"context_line":"            try:"},{"line_number":1103,"context_line":"                [_self, environ, start_response] \u003d args"},{"line_number":1104,"context_line":"                method \u003d environ.get(\u0027REQUEST_METHOD\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_28a093f3","line":1101,"updated":"2014-08-16 00:05:44.000000000","message":"it\u0027s polite to use functools.wraps (https://docs.python.org/2/library/functools.html#functools.wraps) to make sure the decorated function/method preserves names and docstrings","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"383db80f2eeb2aa5070254f6fdeeacdd5220cc97","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"    __call__(self, environ, start_response)"},{"line_number":1099,"context_line":"    \"\"\""},{"line_number":1100,"context_line":"    def _outer(f):"},{"line_number":1101,"context_line":"        def _inner(*args, **kwargs):"},{"line_number":1102,"context_line":"            try:"},{"line_number":1103,"context_line":"                [_self, environ, start_response] \u003d args"},{"line_number":1104,"context_line":"                method \u003d environ.get(\u0027REQUEST_METHOD\u0027, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_f0509960","line":1101,"in_reply_to":"7ac7a964_28a093f3","updated":"2014-08-18 05:09:09.000000000","message":"Done","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"2b53ae1dbee0c5b33cfbc026ff4447d0bfe4e801","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"                                                 exc_info\u003dNone):"},{"line_number":1127,"context_line":"                            try:"},{"line_number":1128,"context_line":"                                logger.stop_trace({\u0027status\u0027: status})"},{"line_number":1129,"context_line":"                            except:"},{"line_number":1130,"context_line":"                                pass"},{"line_number":1131,"context_line":"                            start_response(status, headers, exc_info)"},{"line_number":1132,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_c507081b","line":1129,"updated":"2014-08-16 00:05:44.000000000","message":"A bare except at least needs a \"# no QA\" comment on it. Is the bare except actually what\u0027s needed, or is \"except Exception\" ok? Note that eventlet timeouts don\u0027t inherit from Exception (rather then inherit from BaseException).","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"383db80f2eeb2aa5070254f6fdeeacdd5220cc97","unresolved":false,"context_lines":[{"line_number":1126,"context_line":"                                                 exc_info\u003dNone):"},{"line_number":1127,"context_line":"                            try:"},{"line_number":1128,"context_line":"                                logger.stop_trace({\u0027status\u0027: status})"},{"line_number":1129,"context_line":"                            except:"},{"line_number":1130,"context_line":"                                pass"},{"line_number":1131,"context_line":"                            start_response(status, headers, exc_info)"},{"line_number":1132,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_104ef5c1","line":1129,"in_reply_to":"7ac7a964_c507081b","updated":"2014-08-18 05:09:09.000000000","message":"Done","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"2b53ae1dbee0c5b33cfbc026ff4447d0bfe4e801","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"                                logger.stop_trace({\u0027status\u0027: status})"},{"line_number":1129,"context_line":"                            except:"},{"line_number":1130,"context_line":"                                pass"},{"line_number":1131,"context_line":"                            start_response(status, headers, exc_info)"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"                        new_args \u003d (args[0], environ, trace_start_response)"},{"line_number":1134,"context_line":"                        return f(*new_args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_28041314","line":1131,"updated":"2014-08-16 00:05:44.000000000","message":"does it make sense to put this in a \"finally\" clause so we know that it gets called, no matter the exception handling?","commit_id":"78861d8c48051031dad7903413531be48953907e"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"383db80f2eeb2aa5070254f6fdeeacdd5220cc97","unresolved":false,"context_lines":[{"line_number":1128,"context_line":"                                logger.stop_trace({\u0027status\u0027: status})"},{"line_number":1129,"context_line":"                            except:"},{"line_number":1130,"context_line":"                                pass"},{"line_number":1131,"context_line":"                            start_response(status, headers, exc_info)"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"                        new_args \u003d (args[0], environ, trace_start_response)"},{"line_number":1134,"context_line":"                        return f(*new_args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1abeadc6_304bf1b1","line":1131,"in_reply_to":"7ac7a964_28041314","updated":"2014-08-18 05:09:09.000000000","message":"Done","commit_id":"78861d8c48051031dad7903413531be48953907e"}]}
