)]}'
{"keystone/auth/controllers.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2fb796eb031c9e9639f45927ec9bf858a744f61a","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        if request.remote_user:"},{"line_number":558,"context_line":"            try:"},{"line_number":559,"context_line":"                external \u003d get_auth_method(\u0027external\u0027)"},{"line_number":560,"context_line":"                # NOTE(notmorgan): Pass a readonly/Frozen version of the"},{"line_number":561,"context_line":"                # auth_context to the MethodHandler so that the values are"},{"line_number":562,"context_line":"                # available. It is expected the response will contain updates"},{"line_number":563,"context_line":"                # to auth_context in the response_data value (dict). This"},{"line_number":564,"context_line":"                # effectively eliminates \"side effects\" when running the auth"},{"line_number":565,"context_line":"                # path."},{"line_number":566,"context_line":"                resp \u003d external.authenticate(request,"},{"line_number":567,"context_line":"                                             auth_info)"},{"line_number":568,"context_line":"                if resp and resp.status:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_32f0af90","line":565,"range":{"start_line":560,"start_character":0,"end_line":565,"end_character":23},"updated":"2017-01-19 23:35:55.000000000","message":"Remove This comment.","commit_id":"0888668f3463f385be7a1bca77b9154183e555f0"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"2fb796eb031c9e9639f45927ec9bf858a744f61a","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        auth_response \u003d {\u0027methods\u0027: []}"},{"line_number":593,"context_line":"        for method_name in auth_info.get_method_names():"},{"line_number":594,"context_line":"            method \u003d get_auth_method(method_name)"},{"line_number":595,"context_line":"            # NOTE(notmorgan): Pass a readonly/Frozen version of the"},{"line_number":596,"context_line":"            # auth_context to the MethodHandler so that the values are"},{"line_number":597,"context_line":"            # available. It is expected the response will contain updates"},{"line_number":598,"context_line":"            # to auth_context in the response_data value (dict). This"},{"line_number":599,"context_line":"            # effectively eliminates \"side effects\" when running the auth"},{"line_number":600,"context_line":"            # path."},{"line_number":601,"context_line":"            resp \u003d method.authenticate(request,"},{"line_number":602,"context_line":"                                       auth_info.get_method_data(method_name))"},{"line_number":603,"context_line":"            if resp:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_b23adf34","line":600,"range":{"start_line":595,"start_character":0,"end_line":600,"end_character":19},"updated":"2017-01-19 23:35:55.000000000","message":"Remove this comment.","commit_id":"0888668f3463f385be7a1bca77b9154183e555f0"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1c155646b3585db4377e584b6d62c29f4ace5bc4","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                raise exception.Unauthorized(msg)"},{"line_number":129,"context_line":"        return super(AuthContext, self).__setitem__(key, val)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def update(self, E\u003dNone, **F):"},{"line_number":132,"context_line":"        \"\"\"Override update to prevent conflicting values.\"\"\""},{"line_number":133,"context_line":"        # NOTE(notmorgan): This will not be nearly as performant as the"},{"line_number":134,"context_line":"        # use of the built-in \"update\" method on the dict, however, the"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_e6535437","line":131,"range":{"start_line":131,"start_character":21,"end_line":131,"end_character":32},"updated":"2017-01-30 18:31:53.000000000","message":"what are/why E and F ?\nthis is not intuitive","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"c862d66bd698886ac57dc2ef5342bb19451675a6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                raise exception.Unauthorized(msg)"},{"line_number":129,"context_line":"        return super(AuthContext, self).__setitem__(key, val)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def update(self, E\u003dNone, **F):"},{"line_number":132,"context_line":"        \"\"\"Override update to prevent conflicting values.\"\"\""},{"line_number":133,"context_line":"        # NOTE(notmorgan): This will not be nearly as performant as the"},{"line_number":134,"context_line":"        # use of the built-in \"update\" method on the dict, however, the"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_4c0d29e7","line":131,"range":{"start_line":131,"start_character":21,"end_line":131,"end_character":32},"in_reply_to":"3a461143_e6535437","updated":"2017-01-30 19:05:13.000000000","message":"Duplicate of the actual python method signature. it mirrors that explicitly. E is \"dict\" and F is \"kwargs\"","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"234240d1a12681e3788cdb5d01fbc1c7e5f09482","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                        \u0027method_names\u0027, []).insert(0, \u0027external\u0027)"},{"line_number":567,"context_line":"                    # NOTE(notmorgan): All updates to auth_context is handled"},{"line_number":568,"context_line":"                    # here in the .authenticate method."},{"line_number":569,"context_line":"                    auth_context.update(resp.response_data or {})"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"            except exception.AuthMethodNotSupported:"},{"line_number":572,"context_line":"                # This will happen there is no \u0027external\u0027 plugin registered"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_7b91c4f0","line":569,"updated":"2017-01-30 15:38:14.000000000","message":"The method signature of `update` already seems to handle the default case, why do we need to specify it in the caller as well?","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8cb60a0dcce8e75df12a2b23d0a877e3e63027c7","unresolved":false,"context_lines":[{"line_number":566,"context_line":"                        \u0027method_names\u0027, []).insert(0, \u0027external\u0027)"},{"line_number":567,"context_line":"                    # NOTE(notmorgan): All updates to auth_context is handled"},{"line_number":568,"context_line":"                    # here in the .authenticate method."},{"line_number":569,"context_line":"                    auth_context.update(resp.response_data or {})"},{"line_number":570,"context_line":""},{"line_number":571,"context_line":"            except exception.AuthMethodNotSupported:"},{"line_number":572,"context_line":"                # This will happen there is no \u0027external\u0027 plugin registered"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_9bd02921","line":569,"in_reply_to":"3a461143_7b91c4f0","updated":"2017-01-30 17:49:08.000000000","message":"It has to be an iterable, this is catching the case of a None.","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"}],"keystone/auth/plugins/base.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"eaa9e6736705c1f7da08053bb46904eaf99b6df4","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AuthHandlerResponse \u003d collections.namedtuple("},{"line_number":24,"context_line":"    \u0027AuthHandlerResponse\u0027, \u0027status, response_body, response_data\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_4d852005","line":24,"updated":"2017-01-30 22:09:13.000000000","message":"I think my only nit would be to see if we can add some information that explains the difference between `response_data` and `response_body`. As a reviewer I see that all plugins set `response_body` to None before returning it to whatever called the .authenticate() method. Where-as `response_data` clearly contains things that were previously in `auth_context`... I think these are also things we\u0027ll need a release note for, but I left that comment on a previous review, too.\n\nAre we planning on just writing one release note for all changes auth plugin maintainers are suppose to follow?","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"037e5c14467c7ac3186b60f527d25076c973d6b0","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AuthHandlerResponse \u003d collections.namedtuple("},{"line_number":24,"context_line":"    \u0027AuthHandlerResponse\u0027, \u0027status, response_body, response_data\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_e3c89b24","line":24,"in_reply_to":"3a461143_4d852005","updated":"2017-01-30 23:26:03.000000000","message":"Yeah, a single release note and docs in a patch.","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1fe2a8f3f4a0ca2e8c503bf3ee18513c2e97e0c3","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"AuthHandlerResponse \u003d collections.namedtuple("},{"line_number":24,"context_line":"    \u0027AuthHandlerResponse\u0027, \u0027status, response_body, response_data\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_6d32c0a8","line":24,"in_reply_to":"3a461143_e3c89b24","updated":"2017-01-31 14:51:43.000000000","message":"Makes sense.","commit_id":"2e7c7c955e4a206ca8dff64031dccec932654c45"}],"keystone/tests/unit/test_auth_plugin.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b93115cfb529a778cb51d404158b06776ed21317","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                user_id\u003duuid.uuid4().hex)"},{"line_number":160,"context_line":"            self.api.authenticate(request, auth_info, auth_context)"},{"line_number":161,"context_line":"            # make sure Mapped plugin got invoked with the correct payload"},{"line_number":162,"context_line":"            ((context, auth_payload),"},{"line_number":163,"context_line":"             kwargs) \u003d authenticate.call_args"},{"line_number":164,"context_line":"            self.assertEqual(method_name, auth_payload[\u0027protocol\u0027])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def test_mapped_with_remote_user(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_65a733bd","line":163,"range":{"start_line":162,"start_character":12,"end_line":163,"end_character":45},"updated":"2017-01-24 05:24:10.000000000","message":"this can go on one line now","commit_id":"bff3bd9c36a80862923e5bcb0ab4a5b410a46f43"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b93115cfb529a778cb51d404158b06776ed21317","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            request \u003d self.make_request(environ\u003d{\u0027REMOTE_USER\u0027: \u0027foo@idp.com\u0027})"},{"line_number":186,"context_line":"            self.api.authenticate(request, auth_info, auth_context)"},{"line_number":187,"context_line":"            # make sure Mapped plugin got invoked with the correct payload"},{"line_number":188,"context_line":"            ((context, auth_payload),"},{"line_number":189,"context_line":"             kwargs) \u003d authenticate.call_args"},{"line_number":190,"context_line":"            self.assertEqual(method_name, auth_payload[\u0027protocol\u0027])"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def test_supporting_multiple_methods(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_85aa5f83","line":189,"range":{"start_line":188,"start_character":12,"end_line":189,"end_character":45},"updated":"2017-01-24 05:24:10.000000000","message":"this can go on one line now","commit_id":"bff3bd9c36a80862923e5bcb0ab4a5b410a46f43"}]}
