)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6771,"name":"tiago-martins","email":"tiago.ferraz@gmail.com","username":"tiago-martins"},"change_message_id":"71845e53b7aa628973113dee5bf64b9e5e4c2947","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter User by project"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In version v2.0 keystone allows filtering users by projects (v2.0/tenants/{tenantId}/users) but in v3 it doesn\u0027t."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"If you need to list the users belonging to a project in keystone v3, you must use the role_assignments API, but it only returns a list of user_ids. To get further informatio$"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F%2BBX8%3D","line":9,"updated":"2014-03-31 13:58:23.000000000","message":"adhere to 80 carachaters/line as maximum","commit_id":"9226bc2d68e1baa2fb7eb9b242a6970fc4b6e5ce"}],"keystone/identity/controllers.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b978d989658e1b5dd339b3cb55d2cc2bf30c74a6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if project_id:"},{"line_number":285,"context_line":"            user_ids \u003d self.assignment_api.list_user_ids_for_project("},{"line_number":286,"context_line":"                project_id)"},{"line_number":287,"context_line":"            refs \u003d {}"},{"line_number":288,"context_line":"            refs \u003d ["},{"line_number":289,"context_line":"                self.identity_api.get_user(user_id) for user_id in user_ids]"},{"line_number":290,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2Flxg%3D","line":287,"updated":"2014-04-11 23:39:10.000000000","message":"Remove unused code.","commit_id":"5cc52d6936ab444b06f5082eed69a838f3ec8b1a"}],"keystone/tests/test_v3_filters.py":[{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b978d989658e1b5dd339b3cb55d2cc2bf30c74a6","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Now create some users, one in domainA and two of them in domainB"},{"line_number":83,"context_line":"        self.user1 \u003d self.new_user_ref(domain_id\u003dself.domainA[\u0027id\u0027],"},{"line_number":84,"context_line":"                                       project_id\u003dself.project1[\u0027id\u0027])"},{"line_number":85,"context_line":"        self.user1[\u0027password\u0027] \u003d uuid.uuid4().hex"},{"line_number":86,"context_line":"        self.identity_api.create_user(self.user1[\u0027id\u0027], self.user1)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FluY%3D","line":84,"updated":"2014-04-11 23:39:10.000000000","message":"default_project_id is no necessary in the test case.","commit_id":"5cc52d6936ab444b06f5082eed69a838f3ec8b1a"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"b978d989658e1b5dd339b3cb55d2cc2bf30c74a6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        self.identity_api.create_user(self.user1[\u0027id\u0027], self.user1)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        self.user2 \u003d self.new_user_ref(domain_id\u003dself.domainB[\u0027id\u0027],"},{"line_number":89,"context_line":"                                       project_id\u003dself.project2[\u0027id\u0027])"},{"line_number":90,"context_line":"        self.user2[\u0027password\u0027] \u003d uuid.uuid4().hex"},{"line_number":91,"context_line":"        self.identity_api.create_user(self.user2[\u0027id\u0027], self.user2)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAW3%2F%2FluU%3D","line":89,"updated":"2014-04-11 23:39:10.000000000","message":"default_project_id is no necessary in the test case.","commit_id":"5cc52d6936ab444b06f5082eed69a838f3ec8b1a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"615fb8dd5343215e2642af5f202917afdff952bb","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.domainC[\u0027enabled\u0027] \u003d False"},{"line_number":72,"context_line":"        self.assignment_api.create_domain(self.domainC[\u0027id\u0027], self.domainC)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Now create some projects, one in domain A and another in domainB"},{"line_number":75,"context_line":"        self.project1 \u003d self.new_project_ref("},{"line_number":76,"context_line":"            domain_id\u003dself.domainA[\u0027id\u0027])"},{"line_number":77,"context_line":"        self.assignment_api.create_project(self.project1[\u0027id\u0027], self.project1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7adec928_8bfeee36","line":74,"updated":"2014-05-13 20:24:41.000000000","message":"nit: domainA to be consistent with domainA and domainB on like 83","commit_id":"5f14dcf333fe4b0eb263cb4b3557e7874e16a475"},{"author":{"_account_id":10765,"name":"Andre Aranha","email":"afaranha@lsd.ufcg.edu.br","username":"afaranha"},"change_message_id":"b49a417dcf37f44e384727b1e612c98fb1bd815c","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        - Update policy so api is unprotected"},{"line_number":147,"context_line":"        - Use an un-scoped token to make sure we can filter the"},{"line_number":148,"context_line":"          users by project1, getting back the a user in that project"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        self._set_policy({\"identity:list_users\": []})"}],"source_content_type":"text/x-python","patch_set":11,"id":"7adec928_882f1fa1","line":148,"updated":"2014-05-08 14:09:54.000000000","message":"minor issue: \"getting back the a user in that project\", it may be: \"... the user ...\"","commit_id":"5f14dcf333fe4b0eb263cb4b3557e7874e16a475"},{"author":{"_account_id":10765,"name":"Andre Aranha","email":"afaranha@lsd.ufcg.edu.br","username":"afaranha"},"change_message_id":"b49a417dcf37f44e384727b1e612c98fb1bd815c","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        r \u003d self.get(url_by_name, auth\u003dself.auth)"},{"line_number":155,"context_line":"        id_list \u003d self._get_id_list_from_ref_list(r.result.get(\u0027users\u0027))"},{"line_number":156,"context_line":"        self.assertIn(self.user1[\u0027id\u0027], id_list)"},{"line_number":157,"context_line":"        self.assertNotIn(self.user2[\u0027id\u0027], id_list)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def test_list_filtered_domains(self):"},{"line_number":160,"context_line":"        \"\"\"GET /domains?enabled\u003d0"}],"source_content_type":"text/x-python","patch_set":11,"id":"7adec928_28bc4b69","line":157,"updated":"2014-05-08 14:09:54.000000000","message":"It may be good to do more tests:\n- Use the same projects but in the same domain (both in Domain A or Domain B);\n- Add a new user to a project and then list this project\u0027s users to retrieve more than on user;","commit_id":"5f14dcf333fe4b0eb263cb4b3557e7874e16a475"}]}
