)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9449,"name":"Verónica Musso","email":"veronica.a.musso@intel.com","username":"vamusso"},"change_message_id":"22f80d956796ef711b6404ddd1f0683a378ecbf9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To have the same behavior as from command line,"},{"line_number":10,"context_line":"when adding a role to a unexisting user it should fail."},{"line_number":11,"context_line":"This patch correct this problem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If7b1225e40524f9b31d0ec11041c4f2766704170"},{"line_number":14,"context_line":"Closes-Bug: #1313956"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1ae5cdf2_1a96bff0","line":11,"updated":"2014-06-02 12:55:29.000000000","message":"It should say \"corrects\".","commit_id":"d824a05a5ebb3daa330022e987373b05742ba902"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"7ec25855ea06c34646773dc8b4cbe3cbb663fe21","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adding Role for an unexisting user should fail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To have the same behavior as from command line,"},{"line_number":10,"context_line":"when adding a role to a unexisting user it should fail."},{"line_number":11,"context_line":"This patch corrects this problem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If7b1225e40524f9b31d0ec11041c4f2766704170"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_b6e3c89e","line":10,"updated":"2014-06-27 06:36:12.000000000","message":"Just a typo - \u0027an\u0027 unexisting user","commit_id":"b5f6b5449b76f39110c1289f4e57ab1f0d1688d3"},{"author":{"_account_id":9450,"name":"Juan Manuel Ollé","email":"juan.m.olle@intel.com","username":"jmolle"},"change_message_id":"45b85957f8582daf4baaea8dcf9936fd89d150dc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adding Role for an unexisting user should fail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To have the same behavior as from command line,"},{"line_number":10,"context_line":"when adding a role to a unexisting user it should fail."},{"line_number":11,"context_line":"This patch corrects this problem."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If7b1225e40524f9b31d0ec11041c4f2766704170"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1ae5cdf2_c9050dc3","line":10,"in_reply_to":"1ae5cdf2_b6e3c89e","updated":"2014-06-27 12:42:30.000000000","message":"Done","commit_id":"b5f6b5449b76f39110c1289f4e57ab1f0d1688d3"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b13d244a7ebaf1464612ae33658fd35eb3ebad2c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Juan Manuel Olle \u003cjuan.m.olle@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-24 19:45:06 -0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding Role for an unexisting user should fail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To have the same behavior as from command line,"},{"line_number":10,"context_line":"when adding a role to an unexisting user it should fail."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"baada198_30c0b14f","line":7,"updated":"2014-07-13 11:23:29.000000000","message":"In the code you also check if the group exists (providing group_id was specified).","commit_id":"b0b558a4f0bfe7e6e74f49003de7acb8a3445e94"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5a3dd90a860dd1ac41de3c331cff3275a14ac7e3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lin-hua-cheng \u003cos.lcheng@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-20 21:22:09 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Validate user/group exist when assigning roles"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To have the same behavior as from command line,"},{"line_number":10,"context_line":"when adding a role to an unexisting user or group"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba7be1f8_2fae7898","line":7,"updated":"2015-02-26 02:05:01.000000000","message":"suggest add WIP in the title since the co-author can\u0027t mark the review itself as WIP.","commit_id":"62dafcbd57b6bd7df0ed5c51a225b13bfeecdad1"}],"keystone/assignment/controllers.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c2202b7ca025a694016b90d7d7f8234f41273b0b","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                     group_id\u003dNone, domain_id\u003dNone, project_id\u003dNone):"},{"line_number":519,"context_line":"        \"\"\"Grants a role to a user or group on either a domain or project.\"\"\""},{"line_number":520,"context_line":"        self._require_domain_xor_project(domain_id, project_id)"},{"line_number":521,"context_line":"        self._require_user_xor_group(user_id, group_id)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        self.assignment_api.create_grant("},{"line_number":524,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_e5dc2877","line":521,"updated":"2014-05-22 14:23:11.000000000","message":"this needs to be validated for the v3 API here -- if user, then check user, else if group, check group","commit_id":"773032d3444590156aae788804dd2b1172c64bd9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e0b40c16d4e28afc0db667503d94a897fc27052","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        return o"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027)"},{"line_number":187,"context_line":"class Role(controller.V2Controller):"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    # COMPAT(essex-3)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5adbc538_72357e45","line":186,"updated":"2014-05-25 04:12:15.000000000","message":"This is going against the work that we did to decouple the identity and assignment backends","commit_id":"8d443600dfdff2fa310664220c5b075ff0dd8d50"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"a4ad82d9858a83257dabc6500c5c32621145aae2","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        return o"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027identity_api\u0027)"},{"line_number":187,"context_line":"class Role(controller.V2Controller):"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    # COMPAT(essex-3)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ae8d1ca_b1ca989f","line":186,"in_reply_to":"5adbc538_72357e45","updated":"2014-05-27 12:44:28.000000000","message":"Any other suggestions? I can imagine any use case were there needs to be interaction with the User entity will require the function to know whether the user exists or not. And thus, will need functionality like this.","commit_id":"8d443600dfdff2fa310664220c5b075ff0dd8d50"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4e0b40c16d4e28afc0db667503d94a897fc27052","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        \"\"\""},{"line_number":246,"context_line":"        self.assert_admin(context)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if tenant_id is None:"},{"line_number":249,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":250,"context_line":"                                                   \u0027tenant_id required\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5adbc538_9203ea72","line":247,"updated":"2014-05-25 04:12:15.000000000","message":"unnecessary additional white space","commit_id":"8d443600dfdff2fa310664220c5b075ff0dd8d50"},{"author":{"_account_id":9449,"name":"Verónica Musso","email":"veronica.a.musso@intel.com","username":"vamusso"},"change_message_id":"22f80d956796ef711b6404ddd1f0683a378ecbf9","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if tenant_id is None:"},{"line_number":248,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":249,"context_line":"                                                   \u0027tenant_id required\u0027)"},{"line_number":250,"context_line":"        # Just to check that the user exist"},{"line_number":251,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        self.assignment_api.add_role_to_user_and_project("}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_1a64ff20","line":250,"updated":"2014-06-02 12:55:29.000000000","message":"It should say \"exists\"","commit_id":"d824a05a5ebb3daa330022e987373b05742ba902"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e435106c4b3f48a5653216255566dd136f34026b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        if user_id:"},{"line_number":522,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.identity_api.get_group(group_id)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        self.assignment_api.create_grant("},{"line_number":527,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_f13cd9c1","line":524,"updated":"2014-06-02 13:28:18.000000000","message":"Can a test be added for this case here? Maybe somewhere in this test case: \n\nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_v3_identity.py#L81","commit_id":"8c0cf2f685aece9eba6ddb0788a4d550a22b3f09"},{"author":{"_account_id":9450,"name":"Juan Manuel Ollé","email":"juan.m.olle@intel.com","username":"jmolle"},"change_message_id":"4111e26f236f07fa854ead94cf5aa5edd477dace","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        if user_id:"},{"line_number":522,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.identity_api.get_group(group_id)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        self.assignment_api.create_grant("},{"line_number":527,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_0477453b","line":524,"in_reply_to":"1ae5cdf2_041bc51b","updated":"2014-06-02 14:01:13.000000000","message":"Sorry was @Dolph who suggest the change.","commit_id":"8c0cf2f685aece9eba6ddb0788a4d550a22b3f09"},{"author":{"_account_id":9450,"name":"Juan Manuel Ollé","email":"juan.m.olle@intel.com","username":"jmolle"},"change_message_id":"c2ac76cd567668976e3d736f854b3d6c5063db2e","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        if user_id:"},{"line_number":522,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.identity_api.get_group(group_id)"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"        self.assignment_api.create_grant("},{"line_number":527,"context_line":"            role_id, user_id, group_id, domain_id, project_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_041bc51b","line":524,"in_reply_to":"1ae5cdf2_f13cd9c1","updated":"2014-06-02 13:59:52.000000000","message":"I think it is already covered here:\n\nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_v3_identity.py#L829\n\nand\n\nhttps://github.com/openstack/keystone/blob/master/keystone/tests/test_v3_identity.py#L868\n\nI have added the change becuase of @Matt comment.","commit_id":"8c0cf2f685aece9eba6ddb0788a4d550a22b3f09"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"516e46de317449aea09dace36c2f079a6dcdf239","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        \"\"\"Grants a role to a user or group on either a domain or project.\"\"\""},{"line_number":519,"context_line":"        self._require_domain_xor_project(domain_id, project_id)"},{"line_number":520,"context_line":"        self._require_user_xor_group(user_id, group_id)"},{"line_number":521,"context_line":"        if user_id:"},{"line_number":522,"context_line":"            self.identity_api.get_user(user_id)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.identity_api.get_group(group_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_4d09f629","line":521,"updated":"2014-07-26 23:14:18.000000000","message":"I don\u0027t think we are committing to raising an error in this case for v3","commit_id":"b0b558a4f0bfe7e6e74f49003de7acb8a3445e94"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4b216f90ebf5ae97f6f684c4393c27dd4df2ecf4","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":156,"context_line":"                                                   \u0027tenant_id required\u0027)"},{"line_number":157,"context_line":"        # Just to check that the user exists"},{"line_number":158,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":161,"context_line":"            user_id, tenant_id, role_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_dda4a2a7","line":158,"updated":"2015-03-16 10:42:02.000000000","message":"I think this should rather be placed in the Manager object.","commit_id":"d6a84d759e72cb913820fa4ca1952e1876bc63f0"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"59f1b912c0649df26e662ca90e5e41fd1672c0fe","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":156,"context_line":"                                                   \u0027tenant_id required\u0027)"},{"line_number":157,"context_line":"        # Just to check that the user exists"},{"line_number":158,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":161,"context_line":"            user_id, tenant_id, role_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dac4157f_e0554f50","line":158,"in_reply_to":"9a80dd14_0aba5b71","updated":"2015-04-21 12:15:05.000000000","message":"So, not sure if that was meant to be moved? It looks from your comment, however It\u0027s still here in the newest patch.","commit_id":"d6a84d759e72cb913820fa4ca1952e1876bc63f0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"1d27de7c25c73fd9047dc736e856260b0767f038","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":156,"context_line":"                                                   \u0027tenant_id required\u0027)"},{"line_number":157,"context_line":"        # Just to check that the user exists"},{"line_number":158,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":161,"context_line":"            user_id, tenant_id, role_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_0aba5b71","line":158,"in_reply_to":"9a80dd14_dda4a2a7","updated":"2015-03-16 17:53:00.000000000","message":"thanks, by moving to the manager, I had to put the validation in only one spot.","commit_id":"d6a84d759e72cb913820fa4ca1952e1876bc63f0"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"3f9a5af8112a102a1ea3e594c8a65f5e0b41e24d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            raise exception.NotImplemented(message\u003d\u0027User roles not supported: \u0027"},{"line_number":156,"context_line":"                                                   \u0027tenant_id required\u0027)"},{"line_number":157,"context_line":"        # Just to check that the user exists"},{"line_number":158,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":161,"context_line":"            user_id, tenant_id, role_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dac4157f_6fca4770","line":158,"in_reply_to":"dac4157f_e0554f50","updated":"2015-04-21 14:13:46.000000000","message":"patch set 17 now only have core.py as modified file instead of controllers.py, did I missed something? :)","commit_id":"d6a84d759e72cb913820fa4ca1952e1876bc63f0"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4b216f90ebf5ae97f6f684c4393c27dd4df2ecf4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        \"\"\""},{"line_number":222,"context_line":"        self.assert_admin(context)"},{"line_number":223,"context_line":"        # Ensure user exists by getting it first."},{"line_number":224,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":225,"context_line":"        # TODO(termie): for now we\u0027re ignoring the actual role"},{"line_number":226,"context_line":"        tenant_id \u003d role.get(\u0027tenantId\u0027)"},{"line_number":227,"context_line":"        role_id \u003d role.get(\u0027roleId\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_3da69eab","line":224,"updated":"2015-03-16 10:42:02.000000000","message":"I think this should rather be placed in the Manager object.","commit_id":"d6a84d759e72cb913820fa4ca1952e1876bc63f0"}],"keystone/assignment/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fec49775eba88f9631eb762cebf3d68ea25496f7","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        \"\"\""},{"line_number":239,"context_line":"        self.resource_api.get_project(tenant_id)"},{"line_number":240,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            self.role_api.get_role(CONF.member_role_id)"},{"line_number":243,"context_line":"            self.driver.add_role_to_user_and_project("}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_4d255aa9","line":240,"updated":"2015-06-29 22:29:37.000000000","message":"since this is done in _add_role_to_user_and_project_adapter there\u0027s no need to do it here, it\u0027ll just get checked twice.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"645ed861f82c798b683abec49c05f24769a7b009","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        \"\"\""},{"line_number":239,"context_line":"        self.resource_api.get_project(tenant_id)"},{"line_number":240,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            self.role_api.get_role(CONF.member_role_id)"},{"line_number":243,"context_line":"            self.driver.add_role_to_user_and_project("}],"source_content_type":"text/x-python","patch_set":17,"id":"fa1b9901_4c713b75","line":240,"in_reply_to":"ba3cc151_4d255aa9","updated":"2015-08-20 17:26:17.000000000","message":"++","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"97cef5a303ef42c1388ecd034dead196d15b08f7","unresolved":false,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        \"\"\""},{"line_number":239,"context_line":"        self.resource_api.get_project(tenant_id)"},{"line_number":240,"context_line":"        self.identity_api.get_user(user_id)"},{"line_number":241,"context_line":"        try:"},{"line_number":242,"context_line":"            self.role_api.get_role(CONF.member_role_id)"},{"line_number":243,"context_line":"            self.driver.add_role_to_user_and_project("}],"source_content_type":"text/x-python","patch_set":17,"id":"5a2ca52d_60bf09d1","line":240,"in_reply_to":"fa1b9901_4c713b75","updated":"2015-10-13 18:15:11.000000000","message":"good catch!\n\nThere are two other checks that are being executed twice, it get checked in _add_role_to_user_and_project_adapter too:\n\n* self.resource_api.get_project(tenant_id)\n* self.role_api.get_role(CONF.member_role_id)\n\nI\u0027m going to remove these two calls as well.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8656bf758a3e3f20bb05351f34a0d7426ee52203","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                 keystone.exception.UserNotFound"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        \"\"\""},{"line_number":209,"context_line":"        self.resource_api.get_project(tenant_id)"},{"line_number":210,"context_line":"        try:"},{"line_number":211,"context_line":"            self.role_api.get_role(CONF.member_role_id)"},{"line_number":212,"context_line":"            self.driver.add_role_to_user_and_project("}],"source_content_type":"text/x-python","patch_set":21,"id":"9a68dd71_05c820a7","side":"PARENT","line":209,"updated":"2016-01-23 12:08:22.000000000","message":"Why remove these gets? This is how we enforce RI","commit_id":"8500d76e354b797e0f094127a7b7a1a264a3b646"}],"keystone/tests/test_keystoneclient.py":[{"author":{"_account_id":9449,"name":"Verónica Musso","email":"veronica.a.musso@intel.com","username":"vamusso"},"change_message_id":"8bb4f00eaad21d05468b42bfbd9f48329f64222a","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                          role\u003duuid.uuid4().hex)"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def test_user_role_add_no_user_fail(self):"},{"line_number":898,"context_line":"        from keystoneclient import exceptions as client_exceptions"},{"line_number":899,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"},{"line_number":900,"context_line":"        self.assertRaises(client_exceptions.NotFound,"},{"line_number":901,"context_line":"                          client.roles.add_user_role,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_e874ffd1","line":898,"updated":"2014-06-24 16:49:06.000000000","message":"Since this line is repeated in several tests, we should located at the beginning, just one time.","commit_id":"8c0cf2f685aece9eba6ddb0788a4d550a22b3f09"}],"keystone/tests/unit/test_keystoneclient.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"863b6e2cf95e7690e60ad3007be24fd5b52295ff","unresolved":false,"context_lines":[{"line_number":875,"context_line":"                          role\u003duuid.uuid4().hex)"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"    def test_user_role_add_no_user_fail(self):"},{"line_number":878,"context_line":"        from keystoneclient import exceptions as client_exceptions"},{"line_number":879,"context_line":"        client \u003d self.get_client(admin\u003dTrue)"},{"line_number":880,"context_line":"        self.assertRaises(client_exceptions.NotFound,"},{"line_number":881,"context_line":"                          client.roles.add_user_role,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_1095f632","line":878,"updated":"2015-02-21 05:18:39.000000000","message":"this is already imported at the top, line 18","commit_id":"e8be866ef9a128f773d9441080e35ee7cf91374f"}],"keystone/tests/unit/test_v2_controller.py":[{"author":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"change_message_id":"bf60573286b48627c988b76ef4a14117e47bc01b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Assign a role to a user that doesn\u0027t exist to the `bar` project."},{"line_number":59,"context_line":"        def fake_get_user(user_id):"},{"line_number":60,"context_line":"            return {\u0027default_project_id\u0027: project_id}"},{"line_number":61,"context_line":"        with mock.patch.object(self.assignment_role_controller.identity_api,"},{"line_number":62,"context_line":"                               \u0027get_user\u0027, fake_get_user):"},{"line_number":63,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":64,"context_line":"            self.assignment_role_controller.add_role_to_user("}],"source_content_type":"text/x-python","patch_set":14,"id":"9a80dd14_50615da7","line":61,"updated":"2015-03-16 19:33:55.000000000","message":"Jenkins complains about this identity_api here","commit_id":"aa584fc4775af7bd1dac3a90cef5d44e9573fbf9"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"4020f7f5b6da4af6390a209eb8a22af2a29e027b","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Assign a role to a user that doesn\u0027t exist to the `bar` project."},{"line_number":59,"context_line":"        def fake_get_user(user_id):"},{"line_number":60,"context_line":"            return {\u0027default_project_id\u0027: project_id}"},{"line_number":61,"context_line":"        with mock.patch.object(self.identity_api, \u0027get_user\u0027, fake_get_user):"},{"line_number":62,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":"            self.assignment_role_controller.add_role_to_user("}],"source_content_type":"text/x-python","patch_set":17,"id":"fa32b979_28677626","line":60,"updated":"2015-06-16 09:25:35.000000000","message":"The fake is not correct.\n\nidentity_api::get_user should return something like this,\n{\u0027name\u0027: u\u0027nova\u0027, \u0027domain_id\u0027: u\u0027default\u0027, \u0027enabled\u0027: True, u\u0027email\u0027: None, \u0027id\u0027: u\u0027e9fe8ca1c6b34b69955f170d4713c550\u0027}.\n\nI\u0027d like there is no misleading here although the value returned is not used in this case.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"ca6eaa5606ee63df9bf077d75213dfecfdb4dfeb","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Assign a role to a user that doesn\u0027t exist to the `bar` project."},{"line_number":59,"context_line":"        def fake_get_user(user_id):"},{"line_number":60,"context_line":"            return {\u0027default_project_id\u0027: project_id}"},{"line_number":61,"context_line":"        with mock.patch.object(self.identity_api, \u0027get_user\u0027, fake_get_user):"},{"line_number":62,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":"            self.assignment_role_controller.add_role_to_user("}],"source_content_type":"text/x-python","patch_set":17,"id":"1af86dd1_2a1245b5","line":60,"updated":"2015-06-12 11:53:16.000000000","message":"provide a new line after fake_get_user function.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"95507360c2ec57102a89f0634873a5a5f2b0cfba","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        # Assign a role to a user that doesn\u0027t exist to the `bar` project."},{"line_number":59,"context_line":"        def fake_get_user(user_id):"},{"line_number":60,"context_line":"            return {\u0027default_project_id\u0027: project_id}"},{"line_number":61,"context_line":"        with mock.patch.object(self.identity_api, \u0027get_user\u0027, fake_get_user):"},{"line_number":62,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":"            self.assignment_role_controller.add_role_to_user("}],"source_content_type":"text/x-python","patch_set":17,"id":"fa32b979_fcab8d1b","line":60,"in_reply_to":"fa32b979_28677626","updated":"2015-06-16 11:01:26.000000000","message":"This seems to be intentional, invalid user then get the response without user info.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"645ed861f82c798b683abec49c05f24769a7b009","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        with mock.patch.object(self.identity_api, \u0027get_user\u0027, fake_get_user):"},{"line_number":62,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":"            self.assignment_role_controller.add_role_to_user("},{"line_number":64,"context_line":"                _ADMIN_CONTEXT, user_id, self.role_other[\u0027id\u0027], project_id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        new_project_users \u003d ("},{"line_number":67,"context_line":"            self.assignment_tenant_controller.get_project_users(_ADMIN_CONTEXT,"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa1b9901_aca497b9","line":64,"updated":"2015-08-20 17:26:17.000000000","message":"I\u0027m not sure I understand why we have a fake to make this test pass if we not longer desire the behavior the test describes?","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"edf65f25cb2e83438010897791e8ab5f17863e9e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        with mock.patch.object(self.identity_api, \u0027get_user\u0027, fake_get_user):"},{"line_number":62,"context_line":"            user_id \u003d uuid.uuid4().hex"},{"line_number":63,"context_line":"            self.assignment_role_controller.add_role_to_user("},{"line_number":64,"context_line":"                _ADMIN_CONTEXT, user_id, self.role_other[\u0027id\u0027], project_id)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        new_project_users \u003d ("},{"line_number":67,"context_line":"            self.assignment_tenant_controller.get_project_users(_ADMIN_CONTEXT,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a2ca52d_2e2337bf","line":64,"in_reply_to":"fa1b9901_aca497b9","updated":"2015-10-13 23:47:03.000000000","message":"You are right get_project_users() should now return a UsersNotFound if the role assignment have a user that does not exists. I missed that part of the code to revert back too.\n\nGoing to fix in the next patch set.","commit_id":"3eb16530c626a16697ec926f3d14cc376890ab4e"}]}
