)]}'
{"keystone/middleware/url.py":[{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NormalizingFilter(object):"},{"line_number":29,"context_line":"    \"\"\"Middleware filter to handle URL and Accept header normalization\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, app, conf):"},{"line_number":32,"context_line":"        # app is the next app in WSGI chain - eventually the OpenStack service"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2F4%3D","line":29,"updated":"2012-04-12 23:32:26.000000000","message":"period por favor","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __call__(self, env, start_response):"},{"line_number":37,"context_line":"        env[\u0027PATH_INFO\u0027] \u003d normalize_trailing_slash(env[\u0027PATH_INFO\u0027])"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        return self.app(env, start_response)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2F0%3D","line":38,"updated":"2012-04-12 23:32:26.000000000","message":"superfluous newline?","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    if len(path_info) \u003e 1 and path_info[-1] \u003d\u003d \u0027/\u0027:"},{"line_number":46,"context_line":"        return path_info[:-1]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # No need to change anything"},{"line_number":49,"context_line":"    else:"},{"line_number":50,"context_line":"        return path_info"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2Fw%3D","line":48,"updated":"2012-04-12 23:32:26.000000000","message":"this comment and the newline don\u0027t seem helpful","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"40ceef234446ae608812e9db7689158e7380e706","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def normalize_trailing_slash(path_info):"},{"line_number":42,"context_line":"    \"\"\"Removes a trailing slash from the given path, if any.\"\"\""},{"line_number":43,"context_line":"    # Remove trailing slash, unless it\u0027s the only char"},{"line_number":44,"context_line":"    if len(path_info) \u003e 1 and path_info[-1] \u003d\u003d \u0027/\u0027:"},{"line_number":45,"context_line":"        return path_info[:-1]"},{"line_number":46,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAHH%2F%2F%2Fu4%3D","line":43,"updated":"2012-04-25 16:57:29.000000000","message":"this comment is unnecessary","commit_id":"a20b3fa82a8352c684a5de319ac286bec4d5146c"}],"tests/test_url_middleware.py":[{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.middleware import url"},{"line_number":20,"context_line":"from keystone import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from test_auth_token_middleware import FakeHTTPConnection"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2Fk%3D","line":22,"updated":"2012-04-12 23:32:26.000000000","message":"you\u0027re importing an object directly. I agree that it is a long file name perhaps you could do something like:\n\n  import test_auth_token_middleware\n  \n  \n  FakeHTTPConnection \u003d test_auth_token_middleware.FakeHTTPConnection","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeApp(object):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Fakes a WSGI app URL normalized"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":"    def __call__(self, env, start_response):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2Fo%3D","line":26,"updated":"2012-04-12 23:32:26.000000000","message":"this is a one-line docstring, please put it on one line with a period","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"3ab7476a2ff852397a4460f5f9953c9b90b5a549","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        resp \u003d webob.Response()"},{"line_number":31,"context_line":"        resp.body \u003d \u0027SUCCESS\u0027"},{"line_number":32,"context_line":"        return resp(env, start_response)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class UrlMiddlewareTest(test.TestCase):"},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        self.middleware \u003d url.NormalizingFilter(FakeApp(), {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAGX%2F%2F%2F%2Fs%3D","line":33,"updated":"2012-04-12 23:32:26.000000000","message":"extra newline required","commit_id":"523b2d33c31c6103d784e6144f4778406feb9dba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c1ecd50c27048f3a508f6af6a9e54b883a5c0a59","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.middleware import url"},{"line_number":20,"context_line":"from keystone import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import test_auth_token_middleware as base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAG3%2F%2F%2F%2Fw%3D","line":22,"updated":"2012-04-24 19:05:44.000000000","message":"Not sure \u0027base\u0027 makes sense here given how it\u0027s used? Not sure what else to suggest though","commit_id":"a20b3fa82a8352c684a5de319ac286bec4d5146c"},{"author":{"_account_id":1188,"name":"Rafael Durán Castañeda","username":"rafadurancastaneda"},"change_message_id":"57cb6b506186851f141001e80ab99b9d75c34dd2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.middleware import url"},{"line_number":20,"context_line":"from keystone import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import test_auth_token_middleware as base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAG3%2F%2F%2F90%3D","line":22,"in_reply_to":"AAAAG3%2F%2F%2F%2Fw%3D","updated":"2012-04-24 20:12:52.000000000","message":"What about?:\n\nimport test_auth_token_middleware as test_atm","commit_id":"a20b3fa82a8352c684a5de319ac286bec4d5146c"},{"author":{"_account_id":494,"name":"termie","email":"termie@openstack.org","username":"termie"},"change_message_id":"40ceef234446ae608812e9db7689158e7380e706","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.middleware import url"},{"line_number":20,"context_line":"from keystone import test"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import test_auth_token_middleware as base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeApp(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAHH%2F%2F%2Fu0%3D","line":22,"in_reply_to":"AAAAG3%2F%2F%2F90%3D","updated":"2012-04-25 16:57:29.000000000","message":"test_atm sounds reasonable","commit_id":"a20b3fa82a8352c684a5de319ac286bec4d5146c"}]}
