)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Create a base class from AuthProtocol that looks very like the"},{"line_number":10,"context_line":"oslo.middleware base middleware class. Convert existing AuthProtocol to"},{"line_number":11,"context_line":"use it."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ida68043e34234092701fe0f88209041c93716877"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3afb71cf_6a8d0cd2","line":12,"updated":"2015-06-11 02:09:11.000000000","message":"why?","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"}],"keystonemiddleware/auth_token/__init__.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":415,"context_line":"class _BaseAuthProtocol(object):"},{"line_number":416,"context_line":"    \"\"\"A Base class for AuthProtocol token checking implementations."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This class is modelled around the oslo middleware base middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_ca7ac0bc","line":418,"updated":"2015-06-11 02:09:11.000000000","message":"(nit) oslo.middleware (add .)\n\nI assume this is referring to oslo_middleware.base.Middleware ?","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This class is modelled around the oslo middleware base middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":422,"context_line":"        self._LOG \u003d log"},{"line_number":423,"context_line":"        self._LOG.info(_LI(\u0027Starting Keystone auth_token middleware\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_ca0f6035","line":420,"updated":"2015-06-11 02:09:11.000000000","message":"Middleware has factory()","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":418,"context_line":"    This class is modelled around the oslo middleware base middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":422,"context_line":"        self._LOG \u003d log"},{"line_number":423,"context_line":"        self._LOG.info(_LI(\u0027Starting Keystone auth_token middleware\u0027))"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_6a006c02","line":421,"updated":"2015-06-11 02:09:11.000000000","message":"Middleware uses application","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":428,"context_line":"    def __call__(self, req):"},{"line_number":429,"context_line":"        \"\"\"Handle incoming request."},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        Authenticate send downstream on success. Reject request if"},{"line_number":432,"context_line":"        we can\u0027t authenticate."},{"line_number":433,"context_line":"        \"\"\""},{"line_number":434,"context_line":"        response \u003d self.process_request(req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_5d17b844","line":431,"updated":"2015-06-11 02:09:11.000000000","message":"this sentence doesn\u0027t make sense.","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":440,"context_line":"    def process_request(self, req):"},{"line_number":441,"context_line":"        \"\"\"Called on each request."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        If this returns None, the next application down the stack will be"},{"line_number":444,"context_line":"        executed. If it returns a response then that response will be returned"},{"line_number":445,"context_line":"        and execution will stop here."},{"line_number":446,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_9d3890d4","line":443,"updated":"2015-06-11 02:09:11.000000000","message":"it can return anything falsy","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        \"\"\"Called on each request."},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        If this returns None, the next application down the stack will be"},{"line_number":444,"context_line":"        executed. If it returns a response then that response will be returned"},{"line_number":445,"context_line":"        and execution will stop here."},{"line_number":446,"context_line":"        \"\"\""},{"line_number":447,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_dd584833","line":444,"updated":"2015-06-11 02:09:11.000000000","message":"suggest change \"if it returns a response\" to \"Otherwise\"","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        If this returns None, the next application down the stack will be"},{"line_number":444,"context_line":"        executed. If it returns a response then that response will be returned"},{"line_number":445,"context_line":"        and execution will stop here."},{"line_number":446,"context_line":"        \"\"\""},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def process_response(self, response):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_3d775ca1","line":445,"updated":"2015-06-11 02:09:11.000000000","message":"the docstring should say what the default behavior is.","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8fb8f2893d7319196fe2e81762ca941880ddbfd7","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        \"\"\""},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def process_response(self, response):"},{"line_number":449,"context_line":"        \"\"\"Do whatever you\u0027d like to the response.\"\"\""},{"line_number":450,"context_line":"        return response"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_dd6f28c2","line":449,"updated":"2015-06-11 02:09:11.000000000","message":"the docstring should say what the default behavior is.","commit_id":"592af6f9ad20867fce50352111e0d7c68272d31a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c2f9a9b4e065b6862ca66d1568aeeab15cd91c35","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"class _BaseAuthProtocol(object):"},{"line_number":416,"context_line":"    \"\"\"A Base class for AuthProtocol token checking implementations."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This class is modelled around the oslo_middleware.base.Middleware class."},{"line_number":419,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"1af86dd1_8c9deb5b","line":416,"updated":"2015-06-11 22:54:27.000000000","message":"lowercase base","commit_id":"611cb9a8db9bf0d2dc7fec3ab6e9b9028624a793"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c2f9a9b4e065b6862ca66d1568aeeab15cd91c35","unresolved":false,"context_lines":[{"line_number":415,"context_line":"class _BaseAuthProtocol(object):"},{"line_number":416,"context_line":"    \"\"\"A Base class for AuthProtocol token checking implementations."},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This class is modelled around the oslo_middleware.base.Middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af86dd1_6c950f3f","line":418,"updated":"2015-06-11 22:54:27.000000000","message":"suggest remove \"the\" and \"class\" since it\u0027s obvious.\n\nDocument the parameters.","commit_id":"611cb9a8db9bf0d2dc7fec3ab6e9b9028624a793"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c2f9a9b4e065b6862ca66d1568aeeab15cd91c35","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    This class is modelled around the oslo_middleware.base.Middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":422,"context_line":"        self._LOG \u003d log"},{"line_number":423,"context_line":"        self._app \u003d app"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af86dd1_4c925359","line":420,"updated":"2015-06-11 22:54:27.000000000","message":"Middleware has factory()","commit_id":"611cb9a8db9bf0d2dc7fec3ab6e9b9028624a793"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c2f9a9b4e065b6862ca66d1568aeeab15cd91c35","unresolved":false,"context_lines":[{"line_number":418,"context_line":"    This class is modelled around the oslo_middleware.base.Middleware class."},{"line_number":419,"context_line":"    \"\"\""},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":422,"context_line":"        self._LOG \u003d log"},{"line_number":423,"context_line":"        self._app \u003d app"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1af86dd1_2c9f1761","line":421,"updated":"2015-06-11 22:54:27.000000000","message":"Middleware uses \"application\" rather than \"app\" for the parameter name, suggest change it.\n\nAlso, it doesn\u0027t have a log parameter, and self._LOG isn\u0027t used, so why have it on the base class?","commit_id":"611cb9a8db9bf0d2dc7fec3ab6e9b9028624a793"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c2f9a9b4e065b6862ca66d1568aeeab15cd91c35","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    def process_request(self, req):"},{"line_number":435,"context_line":"        \"\"\"Called on each request."},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        If this returns None, the next application down the stack will be"},{"line_number":438,"context_line":"        executed. Otherwise that response will be returned and execution will"},{"line_number":439,"context_line":"        stop here."},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1af86dd1_cc8c0338","line":437,"updated":"2015-06-11 22:54:27.000000000","message":"it can return anything falsy, not just None according to the code at line 429","commit_id":"611cb9a8db9bf0d2dc7fec3ab6e9b9028624a793"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"dfab91866078e0036d6bdb0557a764ae7addd7ad","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        response \u003d req.get_response(self._app)"},{"line_number":429,"context_line":"        return self.process_response(response)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def process_request(self, req):"},{"line_number":432,"context_line":"        \"\"\"Called on each request."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        If the return value evaluates as False the next application down the"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_597144a7","line":431,"updated":"2015-06-17 01:15:39.000000000","message":"https://review.openstack.org/#/c/180818/4/keystonemiddleware/auth_token/__init__.py changes req to request for some reason.","commit_id":"ea7779ee63d6d5d5fc815fdb9dd2387b5b18acd8"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"205a908f11aefef287c386634f69b768ee9a5460","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    \"\"\"A base class for AuthProtocol token checking implementations.\"\"\""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":419,"context_line":"        self._LOG \u003d log"},{"line_number":420,"context_line":"        self._app \u003d app"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @webob.dec.wsgify(RequestClass\u003d_request._AuthTokenRequest)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_b056365a","line":419,"updated":"2015-06-17 19:25:09.000000000","message":"(nit) having this uppercase feel weird, but i see this is used everywhere already","commit_id":"a62a75eefbbdd5ebdb41d1b59e80a7a977825512"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a015fa8142761eff695a31554acc4c9df376b5b1","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    \"\"\"A base class for AuthProtocol token checking implementations.\"\"\""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":419,"context_line":"        self._LOG \u003d log"},{"line_number":420,"context_line":"        self._app \u003d app"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @webob.dec.wsgify(RequestClass\u003d_request._AuthTokenRequest)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_ea991f7a","line":419,"updated":"2015-06-18 00:45:04.000000000","message":"Since _LOG is available to subclass, need to document it.\n\n .. py:attribute:: _LOG\n\n    The Python logger object passed in to the constructor as the log parameter.","commit_id":"a62a75eefbbdd5ebdb41d1b59e80a7a977825512"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a015fa8142761eff695a31554acc4c9df376b5b1","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":419,"context_line":"        self._LOG \u003d log"},{"line_number":420,"context_line":"        self._app \u003d app"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @webob.dec.wsgify(RequestClass\u003d_request._AuthTokenRequest)"},{"line_number":423,"context_line":"    def __call__(self, req):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_aabc77bb","line":420,"updated":"2015-06-18 00:45:04.000000000","message":"looks like self._app is not expected to be available to subclass since you\u0027re supposed to use process_response, but if the subclass can use it then need to document it.","commit_id":"a62a75eefbbdd5ebdb41d1b59e80a7a977825512"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":415,"context_line":"class _BaseAuthProtocol(object):"},{"line_number":416,"context_line":"    \"\"\"A base class for AuthProtocol token checking implementations.\"\"\""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":419,"context_line":"        self.log \u003d log"},{"line_number":420,"context_line":"        self._app \u003d app"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_eed39336","line":418,"updated":"2015-06-24 01:29:13.000000000","message":"document the arguments.","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    \"\"\"A base class for AuthProtocol token checking implementations.\"\"\""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    def __init__(self, app, log\u003d_LOG):"},{"line_number":419,"context_line":"        self.log \u003d log"},{"line_number":420,"context_line":"        self._app \u003d app"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    @webob.dec.wsgify(RequestClass\u003d_request._AuthTokenRequest)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_6e21c34c","line":419,"updated":"2015-06-24 01:29:13.000000000","message":"I still think this property needs to be documented.","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        return self.process_response(response)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def process_request(self, request):"},{"line_number":432,"context_line":"        \"\"\"Called on each request."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        If the return value evaluates as False the next application down the"},{"line_number":435,"context_line":"        stack will be executed. Otherwise that response will be returned and"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_2e741bfc","line":432,"updated":"2015-06-24 01:29:13.000000000","message":"suggest change this to \"Process request\".","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    def process_request(self, request):"},{"line_number":432,"context_line":"        \"\"\"Called on each request."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        If the return value evaluates as False the next application down the"},{"line_number":435,"context_line":"        stack will be executed. Otherwise that response will be returned and"},{"line_number":436,"context_line":"        execution will stop here."},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_8e3d272d","line":434,"updated":"2015-06-24 01:29:13.000000000","message":"How about:\n\n If this method returns a value then that value will be used as the response. The\n next application down the stack will not be executed and process_response will\n not be called.\n\n Otherwise, the next application down the stack will be executed and\n process_response will be called with the generated response.\n\n By default this method does not return a value.\n\nReaders will wonder why the logic is so strange... why not call process_response on the value returned by process_request? Seems like that would make the AuthProtocol code a little simpler since process_response sets the auth rejected header.","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            return CONF[group][name]"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def process_request(self, request):"},{"line_number":510,"context_line":"        \"\"\"Handle incoming request."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        Authenticate send downstream on success. Reject request if"},{"line_number":513,"context_line":"        we can\u0027t authenticate."}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_0e66f750","line":510,"updated":"2015-06-24 01:29:13.000000000","message":"suggest change this to \"Process request\", since it\u0027s not handling the request anymore, or it shouldn\u0027t be.","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":509,"context_line":"    def process_request(self, request):"},{"line_number":510,"context_line":"        \"\"\"Handle incoming request."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        Authenticate send downstream on success. Reject request if"},{"line_number":513,"context_line":"        we can\u0027t authenticate."},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_ee7953fd","line":512,"updated":"2015-06-24 01:29:13.000000000","message":"what does \"Authenticate send downstream on success\" mean?","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6ccd148dc4789afbd621ce6ead09966be5a04f96","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        if self.log.isEnabledFor(logging.DEBUG):"},{"line_number":568,"context_line":"            self.log.debug(\u0027Received request from %s\u0027 % p._log_format)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def process_response(self, response):"},{"line_number":571,"context_line":"        if response.status_int \u003d\u003d 401:"},{"line_number":572,"context_line":"            response.headers.extend(self._reject_auth_headers)"},{"line_number":573,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa32b979_eeee338a","line":570,"updated":"2015-06-24 01:29:13.000000000","message":"doc would be nice.","commit_id":"55c7e9001cfdaedb15fa1c6053003d4d8720057c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"83c9f785e2fda447f822ab35d22caa1f859b8073","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        Otherwise, the next application down the stack will be executed and"},{"line_number":445,"context_line":"        process_response will be called with the generated response."},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        By default this method does not return a value."},{"line_number":448,"context_line":"        \"\"\""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def process_response(self, response):"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_50dcf117","line":447,"updated":"2015-06-28 03:22:45.000000000","message":"should also document the parameter, and that its type is _request._AuthTokenRequest","commit_id":"525c2677b87a33ef1a712132a7ed29f294e24862"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"83c9f785e2fda447f822ab35d22caa1f859b8073","unresolved":false,"context_lines":[{"line_number":450,"context_line":"    def process_response(self, response):"},{"line_number":451,"context_line":"        \"\"\"Do whatever you\u0027d like to the response."},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"        By default the response is returned unmodified."},{"line_number":454,"context_line":"        \"\"\""},{"line_number":455,"context_line":"        return response"},{"line_number":456,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_70dfb50c","line":453,"updated":"2015-06-28 03:22:45.000000000","message":"should also document the parameter.","commit_id":"525c2677b87a33ef1a712132a7ed29f294e24862"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"83c9f785e2fda447f822ab35d22caa1f859b8073","unresolved":false,"context_lines":[{"line_number":519,"context_line":"        \"\"\"Process request."},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        Evaluate the headers in a request and attempt to authenticate the"},{"line_number":522,"context_line":"        request against the identity server. If authenticated then additional"},{"line_number":523,"context_line":"        headers are added to the request for use by applications. If not"},{"line_number":524,"context_line":"        authenticated the request will be rejected or marked unauthenticated"},{"line_number":525,"context_line":"        depending on configuration."}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_10e669e8","line":522,"updated":"2015-06-28 03:22:45.000000000","message":"suggest remove \"against the identity server\" since the identity server may not be involved.","commit_id":"525c2677b87a33ef1a712132a7ed29f294e24862"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"83c9f785e2fda447f822ab35d22caa1f859b8073","unresolved":false,"context_lines":[{"line_number":581,"context_line":"    def process_response(self, response):"},{"line_number":582,"context_line":"        \"\"\"Process Response."},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        Add WWW-Authenticate headers to failed requests so users know where to"},{"line_number":585,"context_line":"        authenticate for future requests."},{"line_number":586,"context_line":"        \"\"\""},{"line_number":587,"context_line":"        if response.status_int \u003d\u003d 401:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa32b979_30e92db8","line":584,"updated":"2015-06-28 03:22:45.000000000","message":"suggest \"requests that failed with 401 Unauthenticated\"","commit_id":"525c2677b87a33ef1a712132a7ed29f294e24862"}]}
