)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca750f78c61b21e3eecce63000cd404fc8d28b23","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Remove _factory methods from auth plugins"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This was a simple factory that would give compatibility for the existing"},{"line_number":10,"context_line":"client to load up the appropriate auth plugin. A more robust plugin"},{"line_number":11,"context_line":"loading mechanism is coming for this and having it available encourages"},{"line_number":12,"context_line":"other auth plugins that they should be using that where they shouldn\u0027t."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F%2BFkM%3D","line":10,"updated":"2014-03-30 17:01:39.000000000","message":"there should be a blueprint.","commit_id":"9e2ea1d06c39fddee81ca9866b16bebbf74f3953"}],"keystoneclient/v2_0/client.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1b5f2298284898891f9a7a2446de89769d27de8","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                          \u0027tenant_id\u0027: project_id or tenant_id,"},{"line_number":164,"context_line":"                          \u0027tenant_name\u0027: project_name or tenant_name}"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"            if token:"},{"line_number":167,"context_line":"                plugin \u003d v2_auth.Token(auth_url, token, **new_kwargs)"},{"line_number":168,"context_line":"            elif username and password:"},{"line_number":169,"context_line":"                plugin \u003d v2_auth.Password(auth_url, username, password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2FkHc%3D","line":166,"updated":"2014-04-12 15:33:05.000000000","message":"the docstring should say that if token is passed then username and password are ignored.","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"853b396d8d91c359c62674db46528d51ec1f5ecc","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                          \u0027tenant_id\u0027: project_id or tenant_id,"},{"line_number":164,"context_line":"                          \u0027tenant_name\u0027: project_name or tenant_name}"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"            if token:"},{"line_number":167,"context_line":"                plugin \u003d v2_auth.Token(auth_url, token, **new_kwargs)"},{"line_number":168,"context_line":"            elif username and password:"},{"line_number":169,"context_line":"                plugin \u003d v2_auth.Password(auth_url, username, password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2FgqI%3D","line":166,"in_reply_to":"AAAAW3%2F%2FkHc%3D","updated":"2014-04-14 04:50:50.000000000","message":"Done. Note that this has always been the case it is not something i\u0027m changing.","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9e0d231c1a0f2aef86cea6d3c3db4bcc46ce852f","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                                          **new_kwargs)"},{"line_number":174,"context_line":"            else:"},{"line_number":175,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":176,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"            return plugin.get_auth_ref(self.session)"},{"line_number":179,"context_line":"        except (exceptions.AuthorizationFailure, exceptions.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_aa93dcf8","line":176,"updated":"2014-05-02 00:28:41.000000000","message":"coverage report shows that there\u0027s no test for this, add a test.","commit_id":"553ca2685c1112d43a302a85faa841875cc672f9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"af4c0c7506ef741eedba64658ee95c441ad88136","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                plugin \u003d v2_auth.Password(auth_url, username, password,"},{"line_number":173,"context_line":"                                          **new_kwargs)"},{"line_number":174,"context_line":"            else:"},{"line_number":175,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":176,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"            return plugin.get_auth_ref(self.session)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_ea9229f5","line":175,"updated":"2014-05-22 21:49:50.000000000","message":"(nit) The boolean logic in the message is a little strange.","commit_id":"f2f014214ac9e9f23d4cb6d056c221446ae22a11"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"af4c0c7506ef741eedba64658ee95c441ad88136","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                                          **new_kwargs)"},{"line_number":174,"context_line":"            else:"},{"line_number":175,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":176,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"            return plugin.get_auth_ref(self.session)"},{"line_number":179,"context_line":"        except (exceptions.AuthorizationFailure, exceptions.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7adec928_6ab6198c","line":176,"updated":"2014-05-22 21:49:50.000000000","message":"This is a different exception. Does that matter?","commit_id":"f2f014214ac9e9f23d4cb6d056c221446ae22a11"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7c7f0bdb302db4e695c956c4cac05799cd1c0efe","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                                          **new_kwargs)"},{"line_number":174,"context_line":"            else:"},{"line_number":175,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":176,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"            return plugin.get_auth_ref(self.session)"},{"line_number":179,"context_line":"        except (exceptions.AuthorizationFailure, exceptions.Unauthorized):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_e3da1d4b","line":176,"in_reply_to":"7adec928_6ab6198c","updated":"2014-06-03 18:55:16.000000000","message":"Honestly not really, it get\u0027s caught below immediately and throws the same thing.","commit_id":"f2f014214ac9e9f23d4cb6d056c221446ae22a11"}],"keystoneclient/v3/client.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1b5f2298284898891f9a7a2446de89769d27de8","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                          \u0027project_domain_id\u0027: project_domain_id,"},{"line_number":160,"context_line":"                          \u0027project_domain_name\u0027: project_domain_name}"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            if password:"},{"line_number":163,"context_line":"                plugin \u003d v3_auth.Password(auth_url,"},{"line_number":164,"context_line":"                                          user_id\u003duser_id,"},{"line_number":165,"context_line":"                                          username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2FkHY%3D","line":162,"updated":"2014-04-12 15:33:05.000000000","message":"the docstring should say that if password is used then token is ignored.","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"853b396d8d91c359c62674db46528d51ec1f5ecc","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                          \u0027project_domain_id\u0027: project_domain_id,"},{"line_number":160,"context_line":"                          \u0027project_domain_name\u0027: project_domain_name}"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            if password:"},{"line_number":163,"context_line":"                plugin \u003d v3_auth.Password(auth_url,"},{"line_number":164,"context_line":"                                          user_id\u003duser_id,"},{"line_number":165,"context_line":"                                          username\u003dusername,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2Fgpw%3D","line":162,"in_reply_to":"AAAAW3%2F%2FkHY%3D","updated":"2014-04-14 04:50:50.000000000","message":"Fixed.","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a1b5f2298284898891f9a7a2446de89769d27de8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            elif token:"},{"line_number":171,"context_line":"                plugin \u003d v3_auth.Token(auth_url, token, **new_kwargs)"},{"line_number":172,"context_line":"            else:"},{"line_number":173,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":174,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            return plugin.get_auth_ref(self.session)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2FkHU%3D","line":173,"updated":"2014-04-12 15:33:05.000000000","message":"username isn\u0027t required.","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"853b396d8d91c359c62674db46528d51ec1f5ecc","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            elif token:"},{"line_number":171,"context_line":"                plugin \u003d v3_auth.Token(auth_url, token, **new_kwargs)"},{"line_number":172,"context_line":"            else:"},{"line_number":173,"context_line":"                msg \u003d \u0027A username and password or token is required.\u0027"},{"line_number":174,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            return plugin.get_auth_ref(self.session)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2Fgps%3D","line":173,"in_reply_to":"AAAAW3%2F%2FkHU%3D","updated":"2014-04-14 04:50:50.000000000","message":"shortened to user because you could user an id or name","commit_id":"1a9dc065b2b9e9dd91d6bec7f8e88afc1361708d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"612ae0c2a41d7ae5b2f28f4499b082116ddb49d6","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                            token\u003dNone,"},{"line_number":140,"context_line":"                                            trust_id\u003dNone,"},{"line_number":141,"context_line":"                                            **kwargs):"},{"line_number":142,"context_line":"        \"\"\"Authenticate against the v3 Identity API."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :returns: access.AccessInfo if authentication was successful."},{"line_number":145,"context_line":"        :raises: AuthorizationFailure if unable to authenticate or validate"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2F1PY%3D","line":142,"updated":"2014-04-17 05:02:16.000000000","message":"Add a similar msg in this docstring about the behaviour between token/password, if one is used even if both are present.","commit_id":"e36bf1b67d842345f7b606534f0a23d7f000c9dd"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"4711ab048631508bdb214b36ee971cf192963477","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                                            token\u003dNone,"},{"line_number":140,"context_line":"                                            trust_id\u003dNone,"},{"line_number":141,"context_line":"                                            **kwargs):"},{"line_number":142,"context_line":"        \"\"\"Authenticate against the v3 Identity API."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :returns: access.AccessInfo if authentication was successful."},{"line_number":145,"context_line":"        :raises: AuthorizationFailure if unable to authenticate or validate"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAXH%2F%2FbU4%3D","line":142,"in_reply_to":"AAAAXH%2F%2F1PY%3D","updated":"2014-04-21 21:35:28.000000000","message":"This doesn\u0027t apply here. If both are present both are used and this has always been the behaviour.","commit_id":"e36bf1b67d842345f7b606534f0a23d7f000c9dd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9e0d231c1a0f2aef86cea6d3c3db4bcc46ce852f","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"            if not auth_methods:"},{"line_number":175,"context_line":"                msg \u003d \u0027A user and password or token is required.\u0027"},{"line_number":176,"context_line":"                raise exceptions.AuthorizationFailure(msg)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"            plugin \u003d v3_auth.Auth(auth_url, auth_methods,"},{"line_number":179,"context_line":"                                  trust_id\u003dtrust_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_4abc106a","line":176,"updated":"2014-05-02 00:28:41.000000000","message":"there should be a test for this.","commit_id":"553ca2685c1112d43a302a85faa841875cc672f9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"743908f3c569d9e51db9de38b10c18827d903438","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                                           user_domain_id\u003duser_domain_id,"},{"line_number":170,"context_line":"                                           user_domain_name\u003duser_domain_name,"},{"line_number":171,"context_line":"                                           password\u003dpassword)"},{"line_number":172,"context_line":"                auth_methods.append(m)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"            if not auth_methods:"},{"line_number":175,"context_line":"                msg \u003d \u0027A user and password or token is required.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_6fcdf2b6","line":172,"updated":"2014-05-18 17:35:10.000000000","message":"Apparently the order of auth_methods is important. Do we need to provide a way to specify the order of the methods?","commit_id":"11e48a822262a7dc33765713760097a306934a3c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5309056d2f96e508615351e05a92f0a8465b9c5e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                                           user_domain_id\u003duser_domain_id,"},{"line_number":170,"context_line":"                                           user_domain_name\u003duser_domain_name,"},{"line_number":171,"context_line":"                                           password\u003dpassword)"},{"line_number":172,"context_line":"                auth_methods.append(m)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"            if not auth_methods:"},{"line_number":175,"context_line":"                msg \u003d \u0027A user and password or token is required.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_a0d0a7c9","line":172,"in_reply_to":"7adec928_6fcdf2b6","updated":"2014-05-19 23:46:23.000000000","message":"The order shouldn\u0027t matter. Also this is the order in which it was always done, so i\u0027m not making a change here.","commit_id":"11e48a822262a7dc33765713760097a306934a3c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f88ad7f21174cbef61b373d61a79305243c053ee","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                                           user_domain_id\u003duser_domain_id,"},{"line_number":170,"context_line":"                                           user_domain_name\u003duser_domain_name,"},{"line_number":171,"context_line":"                                           password\u003dpassword)"},{"line_number":172,"context_line":"                auth_methods.append(m)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"            if not auth_methods:"},{"line_number":175,"context_line":"                msg \u003d \u0027A user and password or token is required.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_4000c301","line":172,"in_reply_to":"7adec928_a0d0a7c9","updated":"2014-05-20 00:06:30.000000000","message":"Apparently the order does matter: https://bugs.launchpad.net/keystone/+bug/1299012","commit_id":"11e48a822262a7dc33765713760097a306934a3c"}]}
