)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"bb0a2d30be3f8b96ca708f49b0d4de1dbd74681b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Remove get user roles without tenant"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"On the server side, getting a users roles without a tenant throws a 501"},{"line_number":10,"context_line":"Unimplemented, and it\u0027s planned to be supported. This change reflects those"},{"line_number":11,"context_line":"plans on the client side."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da86d52c_93f1df6c","line":9,"updated":"2015-02-09 21:23:47.000000000","message":"which server? The python API needs to be coded to the identity API and not a specific implementation.","commit_id":"89da2d67b14be1c3fe0f441677e8f5403948b1eb"}],"keystoneclient/v2_0/roles.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"caf59fff218f62d58721c448df5724f8288e1d4e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            route \u003d \"/tenants/%s/users/%s/roles\""},{"line_number":54,"context_line":"            return self._list(route % (tenant_id, user_id), \"roles\")"},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            return self._list(\"/users/%s/roles\" % user_id, \"roles\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def add_user_role(self, user, role, tenant\u003dNone):"},{"line_number":59,"context_line":"        \"\"\"Adds a role to a user."}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_aca0a7f4","side":"PARENT","line":56,"updated":"2015-02-12 18:12:45.000000000","message":"What happens in the else case? an exception / error?","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"230ca161a6966ed1f7bbe9b198f18ff3a29994d3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            route \u003d \"/tenants/%s/users/%s/roles\""},{"line_number":54,"context_line":"            return self._list(route % (tenant_id, user_id), \"roles\")"},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            return self._list(\"/users/%s/roles\" % user_id, \"roles\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def add_user_role(self, user, role, tenant\u003dNone):"},{"line_number":59,"context_line":"        \"\"\"Adds a role to a user."}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_261bf373","side":"PARENT","line":56,"in_reply_to":"da86d52c_aca0a7f4","updated":"2015-02-12 19:20:09.000000000","message":"Yep, 501 Unimplemented is returned","commit_id":"32c18a83e2ffe80f559ca871eeddb2ef8848ff17"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"caf59fff218f62d58721c448df5724f8288e1d4e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\"List all available roles.\"\"\""},{"line_number":47,"context_line":"        return self._list(\"/OS-KSADM/roles\", \"roles\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def roles_for_user(self, user, tenant):"},{"line_number":50,"context_line":"        user_id \u003d base.getid(user)"},{"line_number":51,"context_line":"        tenant_id \u003d base.getid(tenant)"},{"line_number":52,"context_line":"        route \u003d \"/tenants/%s/users/%s/roles\""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_acd50744","line":49,"updated":"2015-02-12 18:12:45.000000000","message":"Likely we can\u0027t change this, as it would be incompatible. If an exception would have occured from keystone we should at the very least mirror that behavior here and maintain the signature.","commit_id":"ebd449ca811f30806d4541f492f165867f636e7a"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"e3a4c5111e60453c2fe9ee904e6234421b3cc21a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\"List all available roles.\"\"\""},{"line_number":47,"context_line":"        return self._list(\"/OS-KSADM/roles\", \"roles\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def roles_for_user(self, user, tenant):"},{"line_number":50,"context_line":"        user_id \u003d base.getid(user)"},{"line_number":51,"context_line":"        tenant_id \u003d base.getid(tenant)"},{"line_number":52,"context_line":"        route \u003d \"/tenants/%s/users/%s/roles\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_9f6942c1","line":49,"in_reply_to":"da86d52c_6d5b2886","updated":"2015-05-02 11:36:35.000000000","message":"I agree that changing signatures could break people.\n\nAn example would be a tool that uses this client and i) try to get all the roles for a user, ii) rolls back if the request fails and get only the roles for a specific tenant.\n\nThis tool could enter in error in step i) if we change the signature.\n\nLet\u0027s keep the if/else and raise an exception on the else case without the need of calling the Keystone server.","commit_id":"ebd449ca811f30806d4541f492f165867f636e7a"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"2590503bc9c5e3e675c5f766388b08fa94b2746c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\"List all available roles.\"\"\""},{"line_number":47,"context_line":"        return self._list(\"/OS-KSADM/roles\", \"roles\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def roles_for_user(self, user, tenant):"},{"line_number":50,"context_line":"        user_id \u003d base.getid(user)"},{"line_number":51,"context_line":"        tenant_id \u003d base.getid(tenant)"},{"line_number":52,"context_line":"        route \u003d \"/tenants/%s/users/%s/roles\""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_6d5b2886","line":49,"in_reply_to":"da86d52c_979db0be","updated":"2015-02-19 07:32:49.000000000","message":"Horizon always passes tenant value whenever this method is called, at least this bug doesn\u0027t impact horizon. Yay!\n\n++ on keeping the signature","commit_id":"ebd449ca811f30806d4541f492f165867f636e7a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"ade37a42a6688bcc7ecb7c5007fc0df301f1545d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\"List all available roles.\"\"\""},{"line_number":47,"context_line":"        return self._list(\"/OS-KSADM/roles\", \"roles\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def roles_for_user(self, user, tenant):"},{"line_number":50,"context_line":"        user_id \u003d base.getid(user)"},{"line_number":51,"context_line":"        tenant_id \u003d base.getid(tenant)"},{"line_number":52,"context_line":"        route \u003d \"/tenants/%s/users/%s/roles\""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_979db0be","line":49,"in_reply_to":"da86d52c_acd50744","updated":"2015-02-12 18:27:36.000000000","message":"Ah, good point!","commit_id":"ebd449ca811f30806d4541f492f165867f636e7a"}]}
