)]}'
{"patrole_tempest_plugin/tests/api/identity/v2/rbac_base.py":[{"author":{"_account_id":23184,"name":"DavidPurcell","email":"d.purcell222@gmail.com","username":"DavidPurcell"},"change_message_id":"d213e64992c45867efbbc3f6705f30534449a5f8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":54,"context_line":"        return self.service"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_tenant(self, name):"},{"line_number":57,"context_line":"        tenant_name \u003d data_utils.rand_name(name)"},{"line_number":58,"context_line":"        self.tenant \u003d self.non_admin_tenants_client.create_tenant("},{"line_number":59,"context_line":"            name\u003dtenant_name)"},{"line_number":60,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":61,"context_line":"                        self.non_admin_tenants_client.delete_tenant,"},{"line_number":62,"context_line":"                        self.tenant[\u0027tenant\u0027][\u0027id\u0027])"},{"line_number":63,"context_line":"        return self.tenant"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_069f595f","line":63,"range":{"start_line":56,"start_character":4,"end_line":63,"end_character":26},"updated":"2017-02-15 14:58:16.000000000","message":"Is there a reason we need to use this over setup_test_tenant in the identity base?","commit_id":"87ec9ef7267baf15a0d300d916e148b9a74cd7a4"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"c46b9498cb23900072a8dcfe0081d6d6c06f1fcf","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":54,"context_line":"        return self.service"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _create_tenant(self, name):"},{"line_number":57,"context_line":"        tenant_name \u003d data_utils.rand_name(name)"},{"line_number":58,"context_line":"        self.tenant \u003d self.non_admin_tenants_client.create_tenant("},{"line_number":59,"context_line":"            name\u003dtenant_name)"},{"line_number":60,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":61,"context_line":"                        self.non_admin_tenants_client.delete_tenant,"},{"line_number":62,"context_line":"                        self.tenant[\u0027tenant\u0027][\u0027id\u0027])"},{"line_number":63,"context_line":"        return self.tenant"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_e7a4fc4b","line":63,"range":{"start_line":56,"start_character":4,"end_line":63,"end_character":26},"in_reply_to":"fa31d9ce_069f595f","updated":"2017-02-15 17:04:40.000000000","message":"good catch in fact roles, users, tenants can all point back to tempest base. thanks.","commit_id":"87ec9ef7267baf15a0d300d916e148b9a74cd7a4"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4e2a8e83dcb12ee24fcb9e1a1abc7f82653786","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":56,"context_line":"        return self.service"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_user(self, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Set up a test user.\"\"\""},{"line_number":60,"context_line":"        if kwargs[\u0027name\u0027] is None:"},{"line_number":61,"context_line":"            name \u003d data_utils.rand_name(\u0027test_user\u0027)"},{"line_number":62,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":63,"context_line":"        if kwargs[\u0027email\u0027] is None:"},{"line_number":64,"context_line":"            email \u003d kwargs[\u0027name\u0027] + \u0027@testmail.tm\u0027"},{"line_number":65,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":66,"context_line":"        if kwargs[\u0027password\u0027] is None:"},{"line_number":67,"context_line":"            password \u003d data_utils.rand_password()"},{"line_number":68,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":69,"context_line":"        user \u003d self.users_client.create_user(**kwargs)[\u0027user\u0027]"},{"line_number":70,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":71,"context_line":"                        self.users_client.delete_user,"},{"line_number":72,"context_line":"                        user[\u0027id\u0027])"},{"line_number":73,"context_line":"        return user"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _create_tenant(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4ddc4073","line":72,"range":{"start_line":58,"start_character":0,"end_line":72,"end_character":35},"updated":"2017-02-23 18:42:00.000000000","message":"This approach is fine, but I think can be improved. That is by changing the function prototype to the following:\n\ndef _create_user(name\u003dNone, email\u003dNone, password\u003dNone, **kwargs)\n\n(I would explicitly list all kwargs that are needed to create a user, if I\u0027m missing any, feel free to add them, i.e. if tenant id is needed, you could default to the tempest tenant id).\n\nThen of course, you simply do:\n\nif name is None:\n    ...\nif email is None:\n    ...\nAnd so on\n\nThat way, you can simply do self._create_user() in a test without having to explicitly pass email\u003dNone, password\u003dNone to the function, which is unnecessarily verbose.","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"d87f82e202bdd52979d10136e84245c99a4a37c8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":56,"context_line":"        return self.service"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_user(self, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Set up a test user.\"\"\""},{"line_number":60,"context_line":"        if kwargs[\u0027name\u0027] is None:"},{"line_number":61,"context_line":"            name \u003d data_utils.rand_name(\u0027test_user\u0027)"},{"line_number":62,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":63,"context_line":"        if kwargs[\u0027email\u0027] is None:"},{"line_number":64,"context_line":"            email \u003d kwargs[\u0027name\u0027] + \u0027@testmail.tm\u0027"},{"line_number":65,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":66,"context_line":"        if kwargs[\u0027password\u0027] is None:"},{"line_number":67,"context_line":"            password \u003d data_utils.rand_password()"},{"line_number":68,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":69,"context_line":"        user \u003d self.users_client.create_user(**kwargs)[\u0027user\u0027]"},{"line_number":70,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":71,"context_line":"                        self.users_client.delete_user,"},{"line_number":72,"context_line":"                        user[\u0027id\u0027])"},{"line_number":73,"context_line":"        return user"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _create_tenant(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8d8e38ce","line":72,"range":{"start_line":58,"start_character":0,"end_line":72,"end_character":35},"in_reply_to":"da36d5c6_4ddc4073","updated":"2017-02-23 18:56:47.000000000","message":"I agree. thanks for pointing this out.","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"686b2e18cd47bf2a557d5d4ed2ce06c95a886137","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":56,"context_line":"        return self.service"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_user(self, name\u003dNone, email\u003dNone, password\u003dNone, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Set up a test user.\"\"\""},{"line_number":60,"context_line":"        if name is None:"},{"line_number":61,"context_line":"            name \u003d data_utils.rand_name(\u0027test_user\u0027)"},{"line_number":62,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":65,"context_line":"        if email is None:"},{"line_number":66,"context_line":"            email \u003d name + \u0027@testmail.tm\u0027"},{"line_number":67,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":70,"context_line":"        if password is None:"},{"line_number":71,"context_line":"            password \u003d data_utils.rand_password()"},{"line_number":72,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":73,"context_line":"        else:"},{"line_number":74,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":75,"context_line":"        user \u003d self.users_client.create_user(**kwargs)[\u0027user\u0027]"},{"line_number":76,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":77,"context_line":"                        self.users_client.delete_user,"},{"line_number":78,"context_line":"                        user[\u0027id\u0027])"},{"line_number":79,"context_line":"        return user"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _create_tenant(self):"},{"line_number":82,"context_line":"        \"\"\"Set up a test tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_a8068acb","line":79,"range":{"start_line":58,"start_character":0,"end_line":79,"end_character":19},"updated":"2017-02-23 19:05:30.000000000","message":"packaged it in kwargs with else, but I can directly pass in name, email, password and then kwargs if you guys think thats more concise. lmk","commit_id":"ff339d9b2b58ca756634e04c3c8b1a674d6bfe49"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2a5483e8d0302e34f1650a46550a6d1ce5c0e099","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                        self.service[\u0027OS-KSADM:service\u0027][\u0027id\u0027])"},{"line_number":56,"context_line":"        return self.service"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _create_user(self, name\u003dNone, email\u003dNone, password\u003dNone, **kwargs):"},{"line_number":59,"context_line":"        \"\"\"Set up a test user.\"\"\""},{"line_number":60,"context_line":"        if name is None:"},{"line_number":61,"context_line":"            name \u003d data_utils.rand_name(\u0027test_user\u0027)"},{"line_number":62,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            kwargs[\u0027name\u0027] \u003d name"},{"line_number":65,"context_line":"        if email is None:"},{"line_number":66,"context_line":"            email \u003d name + \u0027@testmail.tm\u0027"},{"line_number":67,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":68,"context_line":"        else:"},{"line_number":69,"context_line":"            kwargs[\u0027email\u0027] \u003d email"},{"line_number":70,"context_line":"        if password is None:"},{"line_number":71,"context_line":"            password \u003d data_utils.rand_password()"},{"line_number":72,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":73,"context_line":"        else:"},{"line_number":74,"context_line":"            kwargs[\u0027password\u0027] \u003d password"},{"line_number":75,"context_line":"        user \u003d self.users_client.create_user(**kwargs)[\u0027user\u0027]"},{"line_number":76,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":77,"context_line":"                        self.users_client.delete_user,"},{"line_number":78,"context_line":"                        user[\u0027id\u0027])"},{"line_number":79,"context_line":"        return user"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def _create_tenant(self):"},{"line_number":82,"context_line":"        \"\"\"Set up a test tenant.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"da36d5c6_6f4d6e3d","line":79,"range":{"start_line":58,"start_character":0,"end_line":79,"end_character":19},"in_reply_to":"da36d5c6_a8068acb","updated":"2017-02-23 23:04:26.000000000","message":"Yes, that\u0027s the best approach; no need to update kwargs with name, email and password.\n\nCould simply be self.users_client.create_user(name\u003dname, email\u003demail, password\u003dpassword, **kwargs)[\u0027user\u0027].\n\nThen that would remove the need for so many if/else blocks.","commit_id":"ff339d9b2b58ca756634e04c3c8b1a674d6bfe49"}],"patrole_tempest_plugin/tests/api/identity/v2/test_projects_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"630b0c022fd2294e6b71a2d90852edd44607812f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def setup_clients(cls):"},{"line_number":36,"context_line":"        super(IdentityProjectV2AdminRbacTest, cls).setup_clients()"},{"line_number":37,"context_line":"        cls.tenants_client \u003d cls.os.tenants_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _create_tenant(self, name):"},{"line_number":40,"context_line":"        self.tenant \u003d self.tenants_client.create_tenant(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_73600002","side":"PARENT","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":50},"updated":"2017-02-14 19:34:51.000000000","message":"Was this moved somewhere else (i.e. in another commit)? If not, I don\u0027t see it included to the rbac_base for identity here.","commit_id":"b4fefe96d7c30bffc95dd1370d120ea21a9e97c5"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"8aa43f8a999a0629fed7b619ecdc2db230a63e77","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def setup_clients(cls):"},{"line_number":36,"context_line":"        super(IdentityProjectV2AdminRbacTest, cls).setup_clients()"},{"line_number":37,"context_line":"        cls.tenants_client \u003d cls.os.tenants_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _create_tenant(self, name):"},{"line_number":40,"context_line":"        self.tenant \u003d self.tenants_client.create_tenant(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_1c724c11","side":"PARENT","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":50},"in_reply_to":"fa31d9ce_398029f7","updated":"2017-02-15 15:41:38.000000000","message":"Makes sense.","commit_id":"b4fefe96d7c30bffc95dd1370d120ea21a9e97c5"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"202ef1490db28b38db1b9dfe4987dd2bbcc2a644","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def setup_clients(cls):"},{"line_number":36,"context_line":"        super(IdentityProjectV2AdminRbacTest, cls).setup_clients()"},{"line_number":37,"context_line":"        cls.tenants_client \u003d cls.os.tenants_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _create_tenant(self, name):"},{"line_number":40,"context_line":"        self.tenant \u003d self.tenants_client.create_tenant(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_398029f7","side":"PARENT","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":50},"in_reply_to":"fa31d9ce_73600002","updated":"2017-02-14 20:16:13.000000000","message":"so in a different review, I saw that you should avoid redundant client calls as much as possible. I found that this already exists in tempest identity base as non_admin_tenants_client so I just removed the setup clients","commit_id":"b4fefe96d7c30bffc95dd1370d120ea21a9e97c5"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"45b78169ae95b941caa55f031d932c41bc9be376","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(IdentityProjectV2AdminRbacTest, self).tearDown()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def setup_clients(cls):"},{"line_number":34,"context_line":"        super(IdentityProjectV2AdminRbacTest, cls).setup_clients()"},{"line_number":35,"context_line":"        cls.tenants_client \u003d cls.os.tenants_client"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_73228ea4","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":27},"updated":"2017-02-15 18:16:19.000000000","message":"had to be brought back since now using the setup methods in tempest which refer to the os_adm clients","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        RBAC test for Identity 2.0 create_tenant"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_create_project\u0027)"},{"line_number":44,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":45,"context_line":"        self._create_tenant(name\u003dtenant_name)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_18a62c53","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":65},"updated":"2017-02-22 21:53:26.000000000","message":"Nit: This isn\u0027t needed since _create_tenant automatically creates a name if one isn\u0027t provided.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"60011cb85d7621ac07c03dbb59b899bf9190d76d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        RBAC test for Identity 2.0 create_tenant"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_create_project\u0027)"},{"line_number":44,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":45,"context_line":"        self._create_tenant(name\u003dtenant_name)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_6c3846f0","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":65},"in_reply_to":"da36d5c6_18a62c53","updated":"2017-02-23 00:41:08.000000000","message":"Done","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        RBAC test for Identity 2.0 update_tenant"},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_update_project\u0027)"},{"line_number":58,"context_line":"        tenant \u003d self._create_tenant(name\u003dtenant_name)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_3865b01d","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":65},"updated":"2017-02-22 21:53:26.000000000","message":"See above.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        RBAC test for Identity 2.0 delete_tenant"},{"line_number":72,"context_line":"        \"\"\""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_delete_project\u0027)"},{"line_number":75,"context_line":"        tenant \u003d self._create_tenant(name\u003dtenant_name)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_786ba8f1","line":74,"range":{"start_line":74,"start_character":7,"end_line":74,"end_character":65},"updated":"2017-02-22 21:53:26.000000000","message":"See above.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        RBAC test for Identity 2.0 show_tenant"},{"line_number":88,"context_line":"        \"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_get_project\u0027)"},{"line_number":91,"context_line":"        tenant \u003d self._create_tenant(name\u003dtenant_name)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_d87654d6","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":62},"updated":"2017-02-22 21:53:26.000000000","message":"See above.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        RBAC test for Identity 2.0 list_tenant_users"},{"line_number":117,"context_line":"        \"\"\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        tenant_name \u003d data_utils.rand_name(\u0027test_list_users_for_tenant\u0027)"},{"line_number":120,"context_line":"        tenant \u003d self._create_tenant(name\u003dtenant_name)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_f87f98a8","line":119,"range":{"start_line":119,"start_character":8,"end_line":119,"end_character":72},"updated":"2017-02-22 21:53:26.000000000","message":"See above.","commit_id":"9e4f0f79159574298175395077aea090585eabac"}],"patrole_tempest_plugin/tests/api/identity/v2/test_roles_rbac.py":[{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"f8889fb26e78d46ae1a400e08823fd92a311c7b5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":38,"context_line":"                        self.non_admin_roles_client.delete_role,"},{"line_number":39,"context_line":"                        self.role[\u0027role\u0027][\u0027id\u0027])"},{"line_number":40,"context_line":"        return self.role"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _create_user(self, name, tenant):"},{"line_number":43,"context_line":"        user_name \u003d data_utils.rand_name(name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_0b2f64a1","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":24},"updated":"2017-02-15 14:47:57.000000000","message":"It looks like you\u0027re only really interested in the role id, so it might be better to return that rather than the full body. Also, self.role creates a class-level role, but you\u0027re only using these at the function level.","commit_id":"87ec9ef7267baf15a0d300d916e148b9a74cd7a4"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"f8889fb26e78d46ae1a400e08823fd92a311c7b5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":48,"context_line":"                        self.non_admin_users_client.delete_user,"},{"line_number":49,"context_line":"                        self.user[\u0027user\u0027][\u0027id\u0027])"},{"line_number":50,"context_line":"        return self.user"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _create_user_role_on_project(self, tenant, user, role):"},{"line_number":53,"context_line":"        self.u_role \u003d self.non_admin_roles_client.create_user_role_on_project("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_2b2a6890","line":50,"updated":"2017-02-15 14:47:57.000000000","message":"See L40","commit_id":"87ec9ef7267baf15a0d300d916e148b9a74cd7a4"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"45b78169ae95b941caa55f031d932c41bc9be376","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def setup_clients(cls):"},{"line_number":36,"context_line":"        super(IdentityRoleV2AdminRbacTest, cls).setup_clients()"},{"line_number":37,"context_line":"        cls.roles_client \u003d cls.os.roles_client"},{"line_number":38,"context_line":"        cls.users_client \u003d cls.os.users_client"},{"line_number":39,"context_line":"        cls.tenants_client \u003d cls.os.tenants_client"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _create_user_role_on_project(self, tenant, user, role):"},{"line_number":42,"context_line":"        self.u_role \u003d self.non_admin_roles_client.create_user_role_on_project("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_1350720a","line":39,"range":{"start_line":37,"start_character":8,"end_line":39,"end_character":50},"updated":"2017-02-15 18:16:19.000000000","message":"same for these too refer to projects_rbac L33","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c81a0b73f2adde1948f518c6a9c52cb5d9385ac3","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":61,"context_line":"        role \u003d self.non_admin_roles_client.create_role(name\u003drole_name)"},{"line_number":62,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":63,"context_line":"                        self.non_admin_roles_client.delete_endpoint,"},{"line_number":64,"context_line":"                        role[\u0027id\u0027])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":67,"context_line":"                                 rule\u003d\"identity:delete_role\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_5b9920c3","line":64,"range":{"start_line":62,"start_character":8,"end_line":64,"end_character":35},"updated":"2017-02-15 19:31:39.000000000","message":"what are you doing here?","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"b426f59e26b0e6c83077d689a6c9fb32c316bcdf","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":61,"context_line":"        role \u003d self.non_admin_roles_client.create_role(name\u003drole_name)"},{"line_number":62,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":63,"context_line":"                        self.non_admin_roles_client.delete_endpoint,"},{"line_number":64,"context_line":"                        role[\u0027id\u0027])"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":67,"context_line":"                                 rule\u003d\"identity:delete_role\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_7b7a6425","line":64,"range":{"start_line":62,"start_character":8,"end_line":64,"end_character":35},"in_reply_to":"fa31d9ce_5b9920c3","updated":"2017-02-15 19:34:42.000000000","message":"copy \u0026 paste mistake. will fix.","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c81a0b73f2adde1948f518c6a9c52cb5d9385ac3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        RBAC test for Identity Admin 2.0 delete_role_from_user_on_project"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        role \u003d self.setup_test_role()"},{"line_number":132,"context_line":"        tenant \u003d self.setup_test_tenant()"},{"line_number":133,"context_line":"        user \u003d self._create_test_user(name\u003d\u0027test_remove_user_role\u0027,"},{"line_number":134,"context_line":"                                      tenantid\u003dtenant[\u0027id\u0027], password\u003dNone)"},{"line_number":135,"context_line":"        self._create_user_role_on_project(tenant, user, role)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_9b19d824","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":14},"updated":"2017-02-15 19:31:39.000000000","message":"tenant is depricated, should be project","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"b426f59e26b0e6c83077d689a6c9fb32c316bcdf","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        RBAC test for Identity Admin 2.0 delete_role_from_user_on_project"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        role \u003d self.setup_test_role()"},{"line_number":132,"context_line":"        tenant \u003d self.setup_test_tenant()"},{"line_number":133,"context_line":"        user \u003d self._create_test_user(name\u003d\u0027test_remove_user_role\u0027,"},{"line_number":134,"context_line":"                                      tenantid\u003dtenant[\u0027id\u0027], password\u003dNone)"},{"line_number":135,"context_line":"        self._create_user_role_on_project(tenant, user, role)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_3b9b8c67","line":132,"range":{"start_line":132,"start_character":8,"end_line":132,"end_character":14},"in_reply_to":"fa31d9ce_9b19d824","updated":"2017-02-15 19:34:42.000000000","message":"? its a valid v2 endpoint\nhttps://developer.openstack.org/api-ref/identity/v2-admin/?expanded\u003dshow-tenant-details-by-id-detail","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":23625,"name":"Nicolas Helgeson","email":"nh202b@att.com","username":"nhelgeson"},"change_message_id":"c81a0b73f2adde1948f518c6a9c52cb5d9385ac3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        RBAC test for Identity Admin 2.0 list_user_roles_on_project"},{"line_number":149,"context_line":"        \"\"\""},{"line_number":150,"context_line":"        tenant \u003d self.setup_test_tenant()"},{"line_number":151,"context_line":"        user \u003d self._create_test_user(name\u003d\u0027test_list_user_roles\u0027,"},{"line_number":152,"context_line":"                                      tenantid\u003dtenant[\u0027id\u0027], password\u003dNone)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_1bdc0845","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":14},"updated":"2017-02-15 19:31:39.000000000","message":"ditto","commit_id":"c4b858f1c4ff2b329eb8f6e2adf1a176fa250a57"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"c7205eaa2de3ed3b1ee5c2620355db3f0c0fcec9","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        RBAC test for Identity Admin 2.0 create_user_role_on_project"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        role \u003d self.setup_test_role()"},{"line_number":114,"context_line":"        tenant \u003d self.setup_test_tenant()"},{"line_number":115,"context_line":"        user \u003d self._create_test_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":116,"context_line":"                                      tenantid\u003dtenant[\u0027id\u0027], password\u003dNone)"},{"line_number":117,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":118,"context_line":"        self._create_user_role_on_project(tenant, user, role)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":121,"context_line":"                                 rule\u003d\"identity:remove_role_from_user\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"da36d5c6_d65cc027","line":118,"range":{"start_line":113,"start_character":8,"end_line":118,"end_character":61},"updated":"2017-02-20 19:50:10.000000000","message":"perhaps create a helper function as this code is used more than once.","commit_id":"2d432cabe8a3d3698020bd8c8689afd30e91e222"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"c7205eaa2de3ed3b1ee5c2620355db3f0c0fcec9","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        RBAC test for Identity Admin 2.0 delete_role_from_user_on_project"},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        role \u003d self.setup_test_role()"},{"line_number":130,"context_line":"        tenant \u003d self.setup_test_tenant()"},{"line_number":131,"context_line":"        user \u003d self._create_test_user(name\u003d\u0027test_remove_user_role\u0027,"},{"line_number":132,"context_line":"                                      tenantid\u003dtenant[\u0027id\u0027], password\u003dNone)"},{"line_number":133,"context_line":"        self._create_user_role_on_project(tenant, user, role)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":136,"context_line":"        self.roles_client.delete_role_from_user_on_project("}],"source_content_type":"text/x-python","patch_set":6,"id":"da36d5c6_96796896","line":133,"range":{"start_line":129,"start_character":8,"end_line":133,"end_character":61},"updated":"2017-02-20 19:50:10.000000000","message":"see note above","commit_id":"2d432cabe8a3d3698020bd8c8689afd30e91e222"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        if rbac_flag_user_role:"},{"line_number":53,"context_line":"            rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":54,"context_line":"        self.roles_client.create_user_role_on_project("},{"line_number":55,"context_line":"            tenant[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":56,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_5b541efe","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":63},"updated":"2017-02-22 21:53:26.000000000","message":"Personally, I don\u0027t think this is necessary. You\u0027re not really saving any lines of code in the long run by doing this; you\u0027re just breaking with convention by putting this here and making the code a bit more difficult to read.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"60011cb85d7621ac07c03dbb59b899bf9190d76d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        if rbac_flag_user_role:"},{"line_number":53,"context_line":"            rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":54,"context_line":"        self.roles_client.create_user_role_on_project("},{"line_number":55,"context_line":"            tenant[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":56,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_cc605204","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":63},"in_reply_to":"da36d5c6_5b541efe","updated":"2017-02-23 00:41:08.000000000","message":"so the point of this was for create_user_role_on_project. If I took this out, effectively I would be doing all the setup for the setup after the role conversion. So technically would be testing multiple points... \nSo it would convert right before creating user role on project for one test case and would just consider the whole internal method as a setup on another test case.\nI mean I could just get rid of the internal method altogether and just put redundant code, or if you think setup after role conversion makes sense I can remove it.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4206cbea33a7cd2e0bd13354bd9534f8c62486ca","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        if rbac_flag_user_role:"},{"line_number":53,"context_line":"            rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":54,"context_line":"        self.roles_client.create_user_role_on_project("},{"line_number":55,"context_line":"            tenant[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":56,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_69af412a","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":63},"in_reply_to":"da36d5c6_cc605204","updated":"2017-02-23 15:33:04.000000000","message":"You would just repeat this code:\n\nrole \u003d self._create_user_role()\ntenant \u003d self._create_tenant()\nuser \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,\n                         tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,\n                                 password\u003dNone)\nif rbac_flag_user_role:\n    rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)\n\nThen you would call self._create_user_role_on_project() without the flag True/False.\n\nLike I said, the approach you\u0027ve taken doesn\u0027t really save you that many lines of repeated code (a small positive), but renders the code harder to read (a medium negative) and breaks with convention (a high negative), so overall I think this current approach is negative.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        RBAC test for Identity Admin 2.0 create_user_role_on_project"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        self._create_user_role_on_project(True)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":127,"context_line":"                                 rule\u003d\"identity:remove_role_from_user\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_9b5a1629","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":47},"updated":"2017-02-22 21:53:26.000000000","message":"See above. Why not just do switchToRbacRole here and then get rid of the flag?","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"b84436515a8b88b9ea36401a4a5f63ec46fd87e8","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        RBAC test for Identity Admin 2.0 delete_role_from_user_on_project"},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":"        role, tenant, user \u003d self._create_user_role_on_project(False)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":138,"context_line":"        self.roles_client.delete_role_from_user_on_project("}],"source_content_type":"text/x-python","patch_set":9,"id":"da36d5c6_bb435a41","line":135,"range":{"start_line":135,"start_character":63,"end_line":135,"end_character":68},"updated":"2017-02-22 21:53:26.000000000","message":"See above.","commit_id":"9e4f0f79159574298175395077aea090585eabac"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"dd4096f8c024f05cf384cf253c8ee22734cf6a13","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        if rbac_flag_user_role:"},{"line_number":53,"context_line":"            rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":54,"context_line":"        self.roles_client.create_user_role_on_project("},{"line_number":55,"context_line":"            tenant[\u0027id\u0027], user[\u0027id\u0027], role[\u0027id\u0027])"},{"line_number":56,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_10db5ced","line":53,"updated":"2017-02-23 04:01:11.000000000","message":"See L124","commit_id":"4d2b528d7795088930d9f6c6b1e02406301a5d26"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"dd4096f8c024f05cf384cf253c8ee22734cf6a13","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        RBAC test for Identity Admin 2.0 create_user_role_on_project"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        self._create_user_role_on_project(True)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @rbac_rule_validation.action(service\u003d\"keystone\","},{"line_number":127,"context_line":"                                 rule\u003d\"identity:remove_role_from_user\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_f056c85a","line":124,"updated":"2017-02-23 04:01:11.000000000","message":"I\u0027m not a fan of hiding the role switch inside a helper function if we\u0027re only going to do it once and not anywhere else","commit_id":"4d2b528d7795088930d9f6c6b1e02406301a5d26"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"feb38c4832bcad0f03997c598752d4c9185ea704","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                        self.roles_client.delete_role, role[\u0027id\u0027])"},{"line_number":44,"context_line":"        return role"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_tenant_user_role(self):"},{"line_number":47,"context_line":"        role \u003d self._create_user_role()"},{"line_number":48,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_373e7f28","line":46,"updated":"2017-02-23 17:49:29.000000000","message":"to move switch role out of the internal methods, i split the previous function into two. lmk if you guys think its more consistent to do it in some different approach....","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4e2a8e83dcb12ee24fcb9e1a1abc7f82653786","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        role \u003d self._create_user_role()"},{"line_number":48,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        return tenant, user, role"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_user_role_on_project(self, tenant, user, role):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_0d5b28f7","line":51,"range":{"start_line":50,"start_character":56,"end_line":51,"end_character":46},"updated":"2017-02-23 18:42:00.000000000","message":"See comments in rbac_base. You can get rid of these kwargs if you redesign the function for which I provided I comment.","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"d87f82e202bdd52979d10136e84245c99a4a37c8","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        role \u003d self._create_user_role()"},{"line_number":48,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], email\u003dNone,"},{"line_number":51,"context_line":"                                 password\u003dNone)"},{"line_number":52,"context_line":"        return tenant, user, role"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_user_role_on_project(self, tenant, user, role):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4d7600d8","line":51,"range":{"start_line":50,"start_character":56,"end_line":51,"end_character":46},"in_reply_to":"da36d5c6_0d5b28f7","updated":"2017-02-23 18:56:47.000000000","message":"Done","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"7d4e2a8e83dcb12ee24fcb9e1a1abc7f82653786","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":154,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_list_user_roles\u0027,"},{"line_number":155,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], password\u003dNone,"},{"line_number":156,"context_line":"                                 email\u003dNone)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":159,"context_line":"        self.roles_client.list_user_roles_on_project("}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_2d4d4c3e","line":156,"range":{"start_line":155,"start_character":56,"end_line":156,"end_character":43},"updated":"2017-02-23 18:42:00.000000000","message":"Ditto.","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23659,"name":"Jaewoo Park","email":"jaewoopark91@gmail.com","username":"aselius"},"change_message_id":"d87f82e202bdd52979d10136e84245c99a4a37c8","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":154,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_list_user_roles\u0027,"},{"line_number":155,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027], password\u003dNone,"},{"line_number":156,"context_line":"                                 email\u003dNone)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"},{"line_number":159,"context_line":"        self.roles_client.list_user_roles_on_project("}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_8d7c78b6","line":156,"range":{"start_line":155,"start_character":56,"end_line":156,"end_character":43},"in_reply_to":"da36d5c6_2d4d4c3e","updated":"2017-02-23 18:56:47.000000000","message":"Done","commit_id":"8bde783ac3c67983c1f749c00711b763b7a25131"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"ebdaf6abb702a80fe0b24ff4af17746b1e5b56f4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def _create_tenant_user_role(self):"},{"line_number":47,"context_line":"        role \u003d self._create_user_role()"},{"line_number":48,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":49,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_assign_user_role\u0027,"},{"line_number":50,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027])"},{"line_number":51,"context_line":"        return tenant, user, role"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_5ef1f194","line":49,"range":{"start_line":49,"start_character":33,"end_line":49,"end_character":61},"updated":"2017-02-27 16:18:28.000000000","message":"I don\u0027t think we should have hardcoded names","commit_id":"2eaa28814ca531cb5db8685af31d03048b34ccb8"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"ebdaf6abb702a80fe0b24ff4af17746b1e5b56f4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        RBAC test for Identity Admin 2.0 list_user_roles_on_project"},{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        tenant \u003d self._create_tenant()"},{"line_number":153,"context_line":"        user \u003d self._create_user(name\u003d\u0027test_list_user_roles\u0027,"},{"line_number":154,"context_line":"                                 tenantid\u003dtenant[\u0027id\u0027])"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        rbac_utils.switch_role(self, switchToRbacRole\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da36d5c6_9e29a9f5","line":153,"range":{"start_line":153,"start_character":33,"end_line":153,"end_character":60},"updated":"2017-02-27 16:18:28.000000000","message":"See L49","commit_id":"2eaa28814ca531cb5db8685af31d03048b34ccb8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1b502f002f34aab8d176a4fd9ef53995bea67e8f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        super(IdentityRoleV2AdminRbacTest, cls).setup_clients()"},{"line_number":37,"context_line":"        cls.roles_client \u003d cls.os.roles_client"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _create_user_role(self):"},{"line_number":40,"context_line":"        role \u003d self.roles_client.create_role("},{"line_number":41,"context_line":"            name\u003ddata_utils.rand_name(\u0027test_role\u0027))[\u0027role\u0027]"},{"line_number":42,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"},{"line_number":43,"context_line":"                        self.roles_client.delete_role, role[\u0027id\u0027])"},{"line_number":44,"context_line":"        return role"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_tenant_user_role(self):"},{"line_number":47,"context_line":"        role \u003d self._create_user_role()"}],"source_content_type":"text/x-python","patch_set":16,"id":"da36d5c6_41f74d8c","line":44,"range":{"start_line":39,"start_character":0,"end_line":44,"end_character":19},"updated":"2017-02-27 18:10:30.000000000","message":"Nit: May we call this _create_role? It\u0027s only creating a role. On the other hand, _create_tenant_user_role below creates a user, tenant, and role. So \"create_user_role\" seems like you\u0027d be creating a user and role by implication.","commit_id":"3910b6b2b6b99ce4eee8e5c0296f14b2a056f2b0"}]}
