)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4930e13aa75113c457ab26e941c8c9b4345fbfb2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"plugins to manipulate the send parameters."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ib9e81773ab988ea05869bc27097d2b25e963e59c"},{"line_number":14,"context_line":"Blueprint: generic-plugins"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba7be1f8_c4ec7692","line":14,"updated":"2015-02-23 01:23:49.000000000","message":"The blueprint isn\u0027t approved and there\u0027s no spec.","commit_id":"251e5fbfbd6f4e9a0f7802e9a8c60ffad6f907e8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"20347dedc543cc0cb7c26825883769488ba0d163","unresolved":false,"context_lines":[{"line_number":11,"context_line":"plugins to manipulate the send parameters."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ib9e81773ab988ea05869bc27097d2b25e963e59c"},{"line_number":14,"context_line":"Blueprint: generic-plugins"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba7be1f8_b691669c","line":14,"in_reply_to":"ba7be1f8_453080e8","updated":"2015-02-23 14:06:37.000000000","message":"Same way we manage bps and specs in keystone.","commit_id":"251e5fbfbd6f4e9a0f7802e9a8c60ffad6f907e8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"461c6cb852c14c306e3d36f74436a88bd5c648b5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"plugins to manipulate the send parameters."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ib9e81773ab988ea05869bc27097d2b25e963e59c"},{"line_number":14,"context_line":"Blueprint: generic-plugins"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba7be1f8_453080e8","line":14,"in_reply_to":"ba7be1f8_c4ec7692","updated":"2015-02-23 03:42:52.000000000","message":"i don\u0027t know the last time where either of those things happened for keystoneclient.\n\nHow do you want to manage that?","commit_id":"251e5fbfbd6f4e9a0f7802e9a8c60ffad6f907e8"}],"keystoneclient/auth/base.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa36aebdf369eda44471faa09104aad59415ab01","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        :returns: Headers that are set to authenticate a message or None for"},{"line_number":146,"context_line":"                  failure. Note that when checking this value that the empty"},{"line_number":147,"context_line":"                  dict is a valid, non-failure response."},{"line_number":148,"context_line":"        :rtype: dict"},{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        return {}"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_e0f43b89","line":148,"updated":"2015-01-28 00:46:37.000000000","message":":raises: exception.HttpError if shit hits the fan","commit_id":"45d3a26169648f680badbc7a70777a8492ef5dce"}],"keystoneclient/exceptions.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f8da6ea264567e440f8eb996a589c25c208a8664","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def __init__(self, names):"},{"line_number":111,"context_line":"        self.names \u003d names"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        m \u003d _(\u0027The following parameters were given that are unsupported: %s\u0027)"},{"line_number":114,"context_line":"        super(UnsupportedParameters, self).__init__(m % \u0027, \u0027.join(self.names))"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3ab451fb_1a521168","line":113,"updated":"2015-04-17 16:56:37.000000000","message":"afaik exception messages a translated using _LE","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"93d53f805711e840e9550f41985fc57fc182b672","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def __init__(self, names):"},{"line_number":111,"context_line":"        self.names \u003d names"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        m \u003d _(\u0027The following parameters were given that are unsupported: %s\u0027)"},{"line_number":114,"context_line":"        super(UnsupportedParameters, self).__init__(m % \u0027, \u0027.join(self.names))"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dac4157f_98d1acfe","line":113,"in_reply_to":"3ab451fb_1a521168","updated":"2015-04-20 00:25:25.000000000","message":"i\u0027m pretty sure _LE is logger.error(), we use _() for actually throwing exceptions. Even if i\u0027m wrong i\u0027d prefer to use _() here because that\u0027s what we use in the rest of the exceptions in this file and in ksc/openstack/common/apiclient/exceptions and we would convert them all together.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c9dc9d7564629d0ea51ae808bb66a21e5b33cdc4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def __init__(self, names):"},{"line_number":111,"context_line":"        self.names \u003d names"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        m \u003d _(\u0027The following parameters were given that are unsupported: %s\u0027)"},{"line_number":114,"context_line":"        super(UnsupportedParameters, self).__init__(m % \u0027, \u0027.join(self.names))"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"dac4157f_f8f2e86e","line":113,"in_reply_to":"dac4157f_98d1acfe","updated":"2015-04-20 01:08:30.000000000","message":"_LE() is only used for message that would only go to logs.  If the message will go to logs and would also be visible to user, we should be using _().\n\nFor this case, I think using _() is correct since the exception will be seen by the client/user.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"}],"keystoneclient/session.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa36aebdf369eda44471faa09104aad59415ab01","unresolved":false,"context_lines":[{"line_number":378,"context_line":"            # flow. For now lets just allow certain elements."},{"line_number":379,"context_line":"            connection_params \u003d connection_params.copy()"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"            for arg in (\u0027cert\u0027, \u0027verify\u0027):"},{"line_number":382,"context_line":"                try:"},{"line_number":383,"context_line":"                    kwargs[arg] \u003d connection_params.pop(arg)"},{"line_number":384,"context_line":"                except KeyError:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_3b2688bb","line":381,"updated":"2015-01-28 00:46:37.000000000","message":"I am OK with starting with a small scope and expend on that. What does Kerberos need btw?","commit_id":"45d3a26169648f680badbc7a70777a8492ef5dce"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa36aebdf369eda44471faa09104aad59415ab01","unresolved":false,"context_lines":[{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        try:"},{"line_number":674,"context_line":"            return auth.get_connection_params(self, **kwargs)"},{"line_number":675,"context_line":"        except exceptions.HttpError as exc:"},{"line_number":676,"context_line":"            raise exceptions.AuthorizationFailure("},{"line_number":677,"context_line":"                _(\"Authentication failure: %s\") % exc)"},{"line_number":678,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_c0d017fa","line":675,"updated":"2015-01-28 00:46:37.000000000","message":"why would get_connection_params() raise HttpError?","commit_id":"45d3a26169648f680badbc7a70777a8492ef5dce"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"85479b0bcb3b4021f1411ab83bb27c54feda3175","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            if connection_params:"},{"line_number":388,"context_line":"                params \u003d \u0027, \u0027.join(connection_params)"},{"line_number":389,"context_line":"                msg \u003d _(\u0027Plugin returned unusable connection params: %s\u0027)"},{"line_number":390,"context_line":"                raise exceptions.AuthorizationFailure(msg % \u0027, \u0027.join(params))"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        resp \u003d send(**kwargs)"},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_09ce65b4","line":390,"updated":"2015-01-30 02:13:14.000000000","message":"Not sure if this should raise AuthorizationFailure.","commit_id":"c5eb3d1b435e551873b75c78e571831caf8d6e0c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"6641892172b4e538c0da8e36bfb4faec5b012028","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            if connection_params:"},{"line_number":388,"context_line":"                params \u003d \u0027, \u0027.join(connection_params)"},{"line_number":389,"context_line":"                msg \u003d _(\u0027Plugin returned unusable connection params: %s\u0027)"},{"line_number":390,"context_line":"                raise exceptions.AuthorizationFailure(msg % \u0027, \u0027.join(params))"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        resp \u003d send(**kwargs)"},{"line_number":393,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_7463a31a","line":390,"in_reply_to":"fa81d914_09ce65b4","updated":"2015-02-01 23:50:51.000000000","message":"Agree - but i\u0027m not sure what else it should. \n\nI picked AuthorizationFailure because that\u0027s what users are likely to catch, however this isn\u0027t a user issue, this would be a mistake on behalf of whoever wrote the plugin.","commit_id":"c5eb3d1b435e551873b75c78e571831caf8d6e0c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3a567559ad13cfe72cbf45eb38112e3b4136fc2a","unresolved":false,"context_lines":[{"line_number":654,"context_line":"        # flow. For now lets just allow certain elements."},{"line_number":655,"context_line":"        params_copy \u003d params.copy()"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        for arg in (\u0027cert\u0027, \u0027verify\u0027, \u0027auth\u0027):"},{"line_number":658,"context_line":"            try:"},{"line_number":659,"context_line":"                kwargs[arg] \u003d params_copy.pop(arg)"},{"line_number":660,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_533bdeea","line":657,"updated":"2015-02-10 01:56:52.000000000","message":"you allow an auth plugin to override an \u0027auth\u0027? What for?","commit_id":"936eb5309de9019e9e7ceb1bbc63257766dd50e3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            # anyway."},{"line_number":390,"context_line":"            pass"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            kwargs.update(connection_params)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        resp \u003d send(**kwargs)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_a22107fd","line":392,"updated":"2015-03-25 01:21:51.000000000","message":"self.get_auth_connection_params can return None according to the docstring, in which case this would fail with NoneType isn\u0027t iterable, so need to verify that connection_params is not None or change get_auth_connection_params so that it doesn\u0027t return None.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            # anyway."},{"line_number":390,"context_line":"            pass"},{"line_number":391,"context_line":"        else:"},{"line_number":392,"context_line":"            kwargs.update(connection_params)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        resp \u003d send(**kwargs)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_6fdfc10d","line":392,"in_reply_to":"1a6ced46_a22107fd","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":649,"context_line":"    def get_auth_connection_params(self, auth\u003dNone, **kwargs):"},{"line_number":650,"context_line":"        \"\"\"Return auth connection params as provided by the auth plugin."},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        :param auth: The auth plugin to use for token. Overrides the plugin"},{"line_number":653,"context_line":"                     on the session. (optional)"},{"line_number":654,"context_line":"        :type auth: :py:class:`keystoneclient.auth.base.BaseAuthPlugin`"},{"line_number":655,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_c24a83ab","line":652,"updated":"2015-03-25 01:21:51.000000000","message":"change \"token\" to \"tokens\"","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":649,"context_line":"    def get_auth_connection_params(self, auth\u003dNone, **kwargs):"},{"line_number":650,"context_line":"        \"\"\"Return auth connection params as provided by the auth plugin."},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        :param auth: The auth plugin to use for token. Overrides the plugin"},{"line_number":653,"context_line":"                     on the session. (optional)"},{"line_number":654,"context_line":"        :type auth: :py:class:`keystoneclient.auth.base.BaseAuthPlugin`"},{"line_number":655,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_4fe4fddf","line":652,"in_reply_to":"1a6ced46_c24a83ab","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        :param auth: The auth plugin to use for token. Overrides the plugin"},{"line_number":653,"context_line":"                     on the session. (optional)"},{"line_number":654,"context_line":"        :type auth: :py:class:`keystoneclient.auth.base.BaseAuthPlugin`"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        :raises keystoneclient.exceptions.AuthorizationFailure: if a new token"},{"line_number":657,"context_line":"                                                                fetch fails."}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_823b2b37","line":654,"updated":"2015-03-25 01:21:51.000000000","message":"don\u0027t need :py:class: here.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        :param auth: The auth plugin to use for token. Overrides the plugin"},{"line_number":653,"context_line":"                     on the session. (optional)"},{"line_number":654,"context_line":"        :type auth: :py:class:`keystoneclient.auth.base.BaseAuthPlugin`"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        :raises keystoneclient.exceptions.AuthorizationFailure: if a new token"},{"line_number":657,"context_line":"                                                                fetch fails."}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_2fe539db","line":654,"in_reply_to":"1a6ced46_823b2b37","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        :raises keystoneclient.exceptions.MissingAuthPlugin: if a plugin is not"},{"line_number":659,"context_line":"                                                             available."},{"line_number":660,"context_line":"        :raises keystoneclient.exceptions.UnsupportedParameters: if the plugin"},{"line_number":661,"context_line":"            returns a parameter that is not supported by the session."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        :returns: Authentication headers or None for failure."},{"line_number":664,"context_line":"        :rtype: dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_425f7372","line":661,"updated":"2015-03-25 01:21:51.000000000","message":"change \"the session\" to \"this session\"","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        :raises keystoneclient.exceptions.MissingAuthPlugin: if a plugin is not"},{"line_number":659,"context_line":"                                                             available."},{"line_number":660,"context_line":"        :raises keystoneclient.exceptions.UnsupportedParameters: if the plugin"},{"line_number":661,"context_line":"            returns a parameter that is not supported by the session."},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        :returns: Authentication headers or None for failure."},{"line_number":664,"context_line":"        :rtype: dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_0fea75ac","line":661,"in_reply_to":"1a6ced46_425f7372","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        :returns: Authentication headers or None for failure."},{"line_number":664,"context_line":"        :rtype: dict"},{"line_number":665,"context_line":"        \"\"\""},{"line_number":666,"context_line":"        auth \u003d self._auth_required(auth, \u0027fetch connection params\u0027)"},{"line_number":667,"context_line":"        params \u003d auth.get_connection_params(self, **kwargs)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        # NOTE(jamielennox): There needs to be some consensus on what"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_62dc6fe5","line":666,"updated":"2015-03-25 01:21:51.000000000","message":"how is this supposed to work? it\u0027ll be partially translated.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        :returns: Authentication headers or None for failure."},{"line_number":664,"context_line":"        :rtype: dict"},{"line_number":665,"context_line":"        \"\"\""},{"line_number":666,"context_line":"        auth \u003d self._auth_required(auth, \u0027fetch connection params\u0027)"},{"line_number":667,"context_line":"        params \u003d auth.get_connection_params(self, **kwargs)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        # NOTE(jamielennox): There needs to be some consensus on what"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_cff7ed89","line":666,"in_reply_to":"1a6ced46_62dc6fe5","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        # flow. For now lets just allow certain elements."},{"line_number":673,"context_line":"        params_copy \u003d params.copy()"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        for arg in (\u0027cert\u0027, \u0027verify\u0027):"},{"line_number":676,"context_line":"            try:"},{"line_number":677,"context_line":"                kwargs[arg] \u003d params_copy.pop(arg)"},{"line_number":678,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_82696b27","line":675,"updated":"2015-03-25 01:21:51.000000000","message":"we need to document somewhere what the allowed parameters are.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        # flow. For now lets just allow certain elements."},{"line_number":673,"context_line":"        params_copy \u003d params.copy()"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        for arg in (\u0027cert\u0027, \u0027verify\u0027):"},{"line_number":676,"context_line":"            try:"},{"line_number":677,"context_line":"                kwargs[arg] \u003d params_copy.pop(arg)"},{"line_number":678,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_efd3d102","line":675,"in_reply_to":"1a6ced46_82696b27","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d92859cba13b1bbe1ae24aff5a7c39f0361ceb16","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            # NOTE(jamielennox): we do the string replacement before"},{"line_number":591,"context_line":"            # translation on purpose here as msg is a helper string that also"},{"line_number":592,"context_line":"            # needs translation."},{"line_number":593,"context_line":"            msg \u003d _(\u0027An auth plugin is required to %s\u0027 % msg)  # noqa"},{"line_number":594,"context_line":"            raise exceptions.MissingAuthPlugin(msg)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        return auth"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ad32947_339514e4","line":593,"updated":"2015-04-27 22:52:30.000000000","message":"This doesn\u0027t work. The message catalog won\u0027t have the replaced string in it.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f8da6ea264567e440f8eb996a589c25c208a8664","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            # NOTE(jamielennox): we do the string replacement before"},{"line_number":591,"context_line":"            # translation on purpose here as msg is a helper string that also"},{"line_number":592,"context_line":"            # needs translation."},{"line_number":593,"context_line":"            msg \u003d _(\u0027An auth plugin is required to %s\u0027 % msg)  # noqa"},{"line_number":594,"context_line":"            raise exceptions.MissingAuthPlugin(msg)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        return auth"}],"source_content_type":"text/x-python","patch_set":9,"id":"3ab451fb_7ae8f57c","line":593,"updated":"2015-04-17 16:56:37.000000000","message":"same here","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a3d6cfc003bd6b7f7b9ef5dc8f5a99e52cb597a1","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            # NOTE(jamielennox): we do the string replacement before"},{"line_number":591,"context_line":"            # translation on purpose here as msg is a helper string that also"},{"line_number":592,"context_line":"            # needs translation."},{"line_number":593,"context_line":"            msg \u003d _(\u0027An auth plugin is required to %s\u0027 % msg)  # noqa"},{"line_number":594,"context_line":"            raise exceptions.MissingAuthPlugin(msg)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        return auth"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ad32947_a158a757","line":593,"in_reply_to":"7ad32947_339514e4","updated":"2015-04-28 04:25:43.000000000","message":"good catch.\n\nSo all the calls to _auth_required must make the msg already translatable before passing here.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f515b11486bb0a4598b600ab852b3989470f4db6","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            # NOTE(jamielennox): we do the string replacement before"},{"line_number":591,"context_line":"            # translation on purpose here as msg is a helper string that also"},{"line_number":592,"context_line":"            # needs translation."},{"line_number":593,"context_line":"            msg \u003d _(\u0027An auth plugin is required to %s\u0027 % msg)  # noqa"},{"line_number":594,"context_line":"            raise exceptions.MissingAuthPlugin(msg)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        return auth"}],"source_content_type":"text/x-python","patch_set":9,"id":"3acd31a7_b46da0ce","line":593,"in_reply_to":"7ad32947_5f2c0e4a","updated":"2015-04-29 14:07:08.000000000","message":"The contents of the _() can only be a string and not an expression. The .po file gets the string in it and not all possible strings.\n\nRather than try to have a helper that doesn\u0027t work, stop trying to provide a helper and just pass the message in.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b49fed632baff1aeb4a02049482e3f40f45131bc","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            # NOTE(jamielennox): we do the string replacement before"},{"line_number":591,"context_line":"            # translation on purpose here as msg is a helper string that also"},{"line_number":592,"context_line":"            # needs translation."},{"line_number":593,"context_line":"            msg \u003d _(\u0027An auth plugin is required to %s\u0027 % msg)  # noqa"},{"line_number":594,"context_line":"            raise exceptions.MissingAuthPlugin(msg)"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"        return auth"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ad32947_5f2c0e4a","line":593,"in_reply_to":"7ad32947_a158a757","updated":"2015-04-28 06:08:03.000000000","message":"As specified by the note doing the replacement BEFORE translation is the intention. This is just a helper to prevent copy and paste and the message is part of what needs to be transated.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d92859cba13b1bbe1ae24aff5a7c39f0361ceb16","unresolved":false,"context_lines":[{"line_number":682,"context_line":"        :returns: Authentication headers or None for failure."},{"line_number":683,"context_line":"        :rtype: dict"},{"line_number":684,"context_line":"        \"\"\""},{"line_number":685,"context_line":"        auth \u003d self._auth_required(auth, \u0027fetch connection params\u0027)"},{"line_number":686,"context_line":"        params \u003d auth.get_connection_params(self, **kwargs)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        # NOTE(jamielennox): There needs to be some consensus on what"}],"source_content_type":"text/x-python","patch_set":9,"id":"7ad32947_d3eca091","line":685,"updated":"2015-04-27 22:52:30.000000000","message":"\u0027fetch connection params\u0027 isn\u0027t going to be translated.","commit_id":"a6c6328becad915c6ce543729d272ae8a7f755a8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7d40edcb81542872f4c6e9cc97a6bdc9fccdedb6","unresolved":false,"context_lines":[{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        We restrict the values that may be returned from this function to"},{"line_number":658,"context_line":"        prevent an auth plugin overriding values unrelated to connection"},{"line_number":659,"context_line":"        parmeters. The values that are currently accepted are:"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"        - `cert`: a path to a client certificate, or tuple of client"},{"line_number":662,"context_line":"          certificate and key pair that are used with this request."}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_6421e69d","line":659,"updated":"2015-05-30 13:24:09.000000000","message":"change \"parmeters\" to \"parameters\"","commit_id":"0ecf9b1ab5177fc42d16b4a57e8522769433b156"}],"keystoneclient/tests/auth/test_identity_common.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa36aebdf369eda44471faa09104aad59415ab01","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                                           headers\u003dmock.ANY,"},{"line_number":442,"context_line":"                                           allow_redirects\u003dFalse,"},{"line_number":443,"context_line":"                                           cert\u003dGenericPlugin.CERT,"},{"line_number":444,"context_line":"                                           verify\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_1b5f0410","line":444,"updated":"2015-01-28 00:46:37.000000000","message":"A negative test (i.e. params other than \u0027cert\u0027 and \u0027verify\u0027) would be awesomer.","commit_id":"45d3a26169648f680badbc7a70777a8492ef5dce"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"85479b0bcb3b4021f1411ab83bb27c54feda3175","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                                           headers\u003dmock.ANY,"},{"line_number":442,"context_line":"                                           allow_redirects\u003dFalse,"},{"line_number":443,"context_line":"                                           cert\u003dGenericPlugin.CERT,"},{"line_number":444,"context_line":"                                           verify\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_494a1d27","line":444,"updated":"2015-01-30 02:13:14.000000000","message":"I think we need a test that tests unusable connection params.","commit_id":"c5eb3d1b435e551873b75c78e571831caf8d6e0c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"6641892172b4e538c0da8e36bfb4faec5b012028","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                                           headers\u003dmock.ANY,"},{"line_number":442,"context_line":"                                           allow_redirects\u003dFalse,"},{"line_number":443,"context_line":"                                           cert\u003dGenericPlugin.CERT,"},{"line_number":444,"context_line":"                                           verify\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ef67bae8","line":444,"in_reply_to":"fa81d914_494a1d27","updated":"2015-02-01 23:50:51.000000000","message":"Done","commit_id":"c5eb3d1b435e551873b75c78e571831caf8d6e0c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3a567559ad13cfe72cbf45eb38112e3b4136fc2a","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                        \u0027headerB\u0027: \u0027valueB\u0027}"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"        self.cert \u003d \u0027/path/to/cert\u0027"},{"line_number":388,"context_line":"        self.connection_params \u003d {\u0027cert\u0027: self.cert}"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def url(self, prefix):"},{"line_number":391,"context_line":"        return \u0027%s/%s\u0027 % (self.endpoint, prefix)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_4ef3310a","line":388,"updated":"2015-02-10 01:56:52.000000000","message":"no tests for \u0027verify\u0027 and \u0027auth\u0027 override?","commit_id":"936eb5309de9019e9e7ceb1bbc63257766dd50e3"}],"keystoneclient/tests/unit/auth/test_identity_common.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        self.assertNotIn(\u0027X-Auth-Token\u0027,"},{"line_number":431,"context_line":"                         self.requests_mock.last_request.headers)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_setting_connection_params(self):"},{"line_number":434,"context_line":"        text \u003d uuid.uuid4().hex"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        with mock.patch.object(self.session.session, \u0027request\u0027) as mocked:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_e2bdbf69","line":433,"updated":"2015-03-25 01:21:51.000000000","message":"a comment explaining how this tests setting connection params would make this easier to understand and maintain.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        self.assertNotIn(\u0027X-Auth-Token\u0027,"},{"line_number":431,"context_line":"                         self.requests_mock.last_request.headers)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def test_setting_connection_params(self):"},{"line_number":434,"context_line":"        text \u003d uuid.uuid4().hex"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        with mock.patch.object(self.session.session, \u0027request\u0027) as mocked:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_8fbfa5a9","line":433,"in_reply_to":"1a6ced46_e2bdbf69","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6733f3b0024d1a869317881ec16cbedb41869280","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_setting_bad_connection_params(self):"},{"line_number":452,"context_line":"        name \u003d uuid.uuid4().hex"},{"line_number":453,"context_line":"        self.auth.connection_params[name] \u003d uuid.uuid4().hex"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        e \u003d self.assertRaises(exceptions.UnsupportedParameters,"},{"line_number":456,"context_line":"                              self.session.get,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_e2969fef","line":453,"updated":"2015-03-25 01:21:51.000000000","message":"a comment saying what this is doing wrong would make the test easier to understand and maintain.","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9c36d0dc7ffbfbbb48759c615528683b020fdb97","unresolved":false,"context_lines":[{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_setting_bad_connection_params(self):"},{"line_number":452,"context_line":"        name \u003d uuid.uuid4().hex"},{"line_number":453,"context_line":"        self.auth.connection_params[name] \u003d uuid.uuid4().hex"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        e \u003d self.assertRaises(exceptions.UnsupportedParameters,"},{"line_number":456,"context_line":"                              self.session.get,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa53dc9_afc26932","line":453,"in_reply_to":"1a6ced46_e2969fef","updated":"2015-04-09 01:16:48.000000000","message":"Done","commit_id":"b02076ec700824c99c9d15459fb254f241061f4f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7d40edcb81542872f4c6e9cc97a6bdc9fccdedb6","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                              \u0027prefix\u0027,"},{"line_number":493,"context_line":"                              endpoint_filter\u003dself.ENDPOINT_FILTER)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        self.assertIn(name, str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a016987_e42dd68f","line":495,"updated":"2015-05-30 13:24:09.000000000","message":"This could be replaced by use assertRaisesRegex","commit_id":"0ecf9b1ab5177fc42d16b4a57e8522769433b156"}]}
