)]}'
{"tempest/api/identity/admin/v3/test_application_credentials.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"14ca8d833ee6c390558019dc8f87d3b0ebd5c882","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":33,"context_line":"                                    \" in this environment\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(ApplicationCredentialsV3AdminTest, self).setUp()"},{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_75f2c208","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":64},"updated":"2018-04-09 03:04:02.000000000","message":"I still think this should not be in setUp, if user_id and project_id won\u0027t be changed during the tests.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":33,"context_line":"                                    \" in this environment\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(ApplicationCredentialsV3AdminTest, self).setUp()"},{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_6ad53ab9","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":64},"in_reply_to":"bf659307_20d4c01f","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":33,"context_line":"                                    \" in this environment\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(ApplicationCredentialsV3AdminTest, self).setUp()"},{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_e0160fa8","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":64},"in_reply_to":"bf659307_75f2c208","updated":"2018-04-09 08:33:49.000000000","message":"This is not an expensive operation. Neither it is not a potentially failing operation. Therefore there are no strong reasons to me not to do it here even if these values are not used in some tests.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2b978990a040c66b62a4d252df917a48fc2f094c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":33,"context_line":"                                    \" in this environment\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def setUp(self):"},{"line_number":36,"context_line":"        super(ApplicationCredentialsV3AdminTest, self).setUp()"},{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_20d4c01f","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":64},"in_reply_to":"bf659307_e0160fa8","updated":"2018-04-11 12:22:07.000000000","message":"zhufl is right: the Tempest \"convention\" is to include this kind of setup in setup_resources though this is more of a nit. Examples:\n\n* http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/identity/v2/test_users.py#n33\n* http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/volume/admin/test_volume_quotas.py#n39\n* http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/identity/v3/test_users.py#n35\n* http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/volume/admin/test_volume_quotas_negative.py#n29","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_bb24c8b0","line":40,"range":{"start_line":40,"start_character":42,"end_line":40,"end_character":69},"updated":"2018-04-09 08:33:49.000000000","message":"Can you replace expires_at and roles with *args and **kwargs and then pass them as they are to wrapped function as below?\n\n def create_application_credential(name\u003dNone, *args, **kwargs):\n      application_credential \u003d (\n           self.non_admin_app_creds_client.\n               create_application_credential(\n                    name\u003dname or  data_utils.rand_name(\u0027application_credential\u0027),\n                    *args, **kwargs))\n     self.addCleanup(\n             self.non_admin_app_creds_client.delete_application_credential,\n             self.user_id,\n             application_credential[\u0027id\u0027])\n     return application_credential[\u0027application_credential\u0027]\n\nThe function should looks to me actually almost as simple as above code as it is doing nothing else than wrapping an existing function.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_80ff1366","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":24},"updated":"2018-04-09 08:33:49.000000000","message":"create_application_credentials would be a better name. It is not too long.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_0ada7ee8","line":40,"range":{"start_line":40,"start_character":42,"end_line":40,"end_character":69},"in_reply_to":"bf659307_bb24c8b0","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_e07b6ff1","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":23},"updated":"2018-04-09 08:33:49.000000000","message":"There is no reason to take a reference to a function. At the end you are going to use it only once in this function. So this add more complexity without any evident advantage to me. Splitting statements in more lines is perfectly safe and normal in python, like you already did more times in this change.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_cafc8640","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":23},"in_reply_to":"bf659307_c092a457","updated":"2018-04-16 11:02:42.000000000","message":"This was an attempt to readably work around pep8 issues. Changed it to omit the alias.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"2b978990a040c66b62a4d252df917a48fc2f094c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_c092a457","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":23},"in_reply_to":"bf659307_e07b6ff1","updated":"2018-04-11 12:22:07.000000000","message":"I disagree. Multi-line statements can make things harder to read as well as make it harder to write code without wrapping various lines in tuples or breaking them with \\. Aliasing long variable names/function names is not unusual.","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"},{"line_number":45,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":46,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":47,"context_line":"        if expires_at:"},{"line_number":48,"context_line":"            kwargs.update(expires_at\u003dexpires_at)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_8082b3c7","line":45,"range":{"start_line":44,"start_character":8,"end_line":45,"end_character":65},"updated":"2018-04-09 08:33:49.000000000","message":"Or also:\n\n  name \u003d name or data_utils.rand_name(\u0027application_credential\u0027)","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"},{"line_number":45,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":46,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":47,"context_line":"        if expires_at:"},{"line_number":48,"context_line":"            kwargs.update(expires_at\u003dexpires_at)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_eaf94a4d","line":45,"range":{"start_line":44,"start_character":8,"end_line":45,"end_character":65},"in_reply_to":"bf659307_8082b3c7","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"14ca8d833ee6c390558019dc8f87d3b0ebd5c882","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"},{"line_number":45,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":46,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":47,"context_line":"        if expires_at:"},{"line_number":48,"context_line":"            kwargs.update(expires_at\u003dexpires_at)"},{"line_number":49,"context_line":"        if roles:"},{"line_number":50,"context_line":"            kwargs.update(roles\u003droles)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        app_cred \u003d create_app_cred(**kwargs)[\u0027application_credential\u0027]"},{"line_number":53,"context_line":"        self.addCleanup("},{"line_number":54,"context_line":"            self.non_admin_app_creds_client.delete_application_credential,"},{"line_number":55,"context_line":"            self.user_id,"},{"line_number":56,"context_line":"            app_cred[\u0027id\u0027])"},{"line_number":57,"context_line":"        return app_cred"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":60,"context_line":"    def test_create_application_credential_with_roles(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_158ca67d","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":23},"updated":"2018-04-09 03:04:02.000000000","message":"maybe you can put this in base.py?","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":38,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":41,"context_line":"        create_app_cred \u003d ("},{"line_number":42,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        if name is None:"},{"line_number":45,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":46,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":47,"context_line":"        if expires_at:"},{"line_number":48,"context_line":"            kwargs.update(expires_at\u003dexpires_at)"},{"line_number":49,"context_line":"        if roles:"},{"line_number":50,"context_line":"            kwargs.update(roles\u003droles)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        app_cred \u003d create_app_cred(**kwargs)[\u0027application_credential\u0027]"},{"line_number":53,"context_line":"        self.addCleanup("},{"line_number":54,"context_line":"            self.non_admin_app_creds_client.delete_application_credential,"},{"line_number":55,"context_line":"            self.user_id,"},{"line_number":56,"context_line":"            app_cred[\u0027id\u0027])"},{"line_number":57,"context_line":"        return app_cred"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":60,"context_line":"    def test_create_application_credential_with_roles(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_4a9e3608","line":57,"range":{"start_line":40,"start_character":0,"end_line":57,"end_character":23},"in_reply_to":"bf659307_158ca67d","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"14ca8d833ee6c390558019dc8f87d3b0ebd5c882","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":60,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":61,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":62,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":63,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":64,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":65,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":66,"context_line":"            self.project_id,"},{"line_number":67,"context_line":"            self.user_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_15e1062b","line":64,"range":{"start_line":61,"start_character":0,"end_line":64,"end_character":78},"updated":"2018-04-09 03:04:02.000000000","message":"can be replaced by setup_test_role?","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":60,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":61,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":62,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":63,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":64,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":65,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":66,"context_line":"            self.project_id,"},{"line_number":67,"context_line":"            self.user_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_a50aa587","line":64,"range":{"start_line":61,"start_character":0,"end_line":64,"end_character":78},"in_reply_to":"bf659307_15e1062b","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"}],"tempest/api/identity/v3/test_application_credentials.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"83eb702fde10f62e5fb97457ae7d884d936d4a0e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                user_id\u003dself.user_id,"},{"line_number":57,"context_line":"                application_credential_id\u003dself.application_credential_id"},{"line_number":58,"context_line":"            )"},{"line_number":59,"context_line":"            self.application_credential_id \u003d None"},{"line_number":60,"context_line":"        super(ApplicationCredentialsV3Test, self).tearDown()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @decorators.idempotent_id(\u00278080c75c-eddc-4786-941a-c2da7039ae61\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_4c7476cf","line":59,"updated":"2018-02-22 16:06:47.000000000","message":"Is there a reason we need to store this in an instance variable? It seems like each application credential will be isolated to individual tests (and only those that create them). I think it would be a bit better to replace this entire teardown with a self.addCleanup() call right after the app_cred creation. That way we track the deletion of the resource with it\u0027s creation.","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb0bb342ea25f4598b6adbb0246623d530bf87bd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                user_id\u003dself.user_id,"},{"line_number":57,"context_line":"                application_credential_id\u003dself.application_credential_id"},{"line_number":58,"context_line":"            )"},{"line_number":59,"context_line":"            self.application_credential_id \u003d None"},{"line_number":60,"context_line":"        super(ApplicationCredentialsV3Test, self).tearDown()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @decorators.idempotent_id(\u00278080c75c-eddc-4786-941a-c2da7039ae61\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f9dbf25_0bcc7b5f","line":59,"in_reply_to":"3fa0c359_4c7476cf","updated":"2018-03-04 13:13:11.000000000","message":"Done","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"83eb702fde10f62e5fb97457ae7d884d936d4a0e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.create_app_cred("},{"line_number":146,"context_line":"            user_id\u003dself.user_id,"},{"line_number":147,"context_line":"            name\u003dapp_cred_two_name"},{"line_number":148,"context_line":"        )[\u0027application_credential\u0027]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        app_creds \u003d self.list_app_creds("},{"line_number":151,"context_line":"            user_id\u003dself.user_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_9f285e86","line":148,"updated":"2018-02-22 16:06:47.000000000","message":"Where do these app creds get deleted?","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb0bb342ea25f4598b6adbb0246623d530bf87bd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        self.create_app_cred("},{"line_number":146,"context_line":"            user_id\u003dself.user_id,"},{"line_number":147,"context_line":"            name\u003dapp_cred_two_name"},{"line_number":148,"context_line":"        )[\u0027application_credential\u0027]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        app_creds \u003d self.list_app_creds("},{"line_number":151,"context_line":"            user_id\u003dself.user_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f9dbf25_4bea83ac","line":148,"in_reply_to":"3fa0c359_9f285e86","updated":"2018-03-04 13:13:11.000000000","message":"Done","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"83eb702fde10f62e5fb97457ae7d884d936d4a0e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.create_app_cred("},{"line_number":164,"context_line":"            user_id\u003dself.user_id,"},{"line_number":165,"context_line":"            name\u003dapp_cred_two_name"},{"line_number":166,"context_line":"        )[\u0027application_credential\u0027]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        app_creds \u003d self.list_app_creds("},{"line_number":169,"context_line":"            user_id\u003dself.user_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_7fa6b211","line":166,"updated":"2018-02-22 16:06:47.000000000","message":"Same question as above, it looks like nothing deletes these 2. There should be an addCleanup call after each create.","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb0bb342ea25f4598b6adbb0246623d530bf87bd","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.create_app_cred("},{"line_number":164,"context_line":"            user_id\u003dself.user_id,"},{"line_number":165,"context_line":"            name\u003dapp_cred_two_name"},{"line_number":166,"context_line":"        )[\u0027application_credential\u0027]"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        app_creds \u003d self.list_app_creds("},{"line_number":169,"context_line":"            user_id\u003dself.user_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f9dbf25_ebd02ffa","line":166,"in_reply_to":"3fa0c359_7fa6b211","updated":"2018-03-04 13:13:11.000000000","message":"Done","commit_id":"7861c7fc8c8d0bf8d22b1b6ec04393f0cc410790"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ApplicationCredentialsV3Test(base.BaseIdentityV3Test):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Admin credentials needed to create and assign roles"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_bcb757f5","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":58},"updated":"2018-04-03 06:56:03.000000000","message":"should inherit from BaseIdentityV3AdminTest, and this test file should be put in /admin/v3 directory","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bc903f3733e8c4afbf37400cadf487aa5622dd0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ApplicationCredentialsV3Test(base.BaseIdentityV3Test):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Admin credentials needed to create and assign roles"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_984e0695","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":58},"in_reply_to":"bf659307_66259e08","updated":"2018-04-04 02:05:37.000000000","message":"Then maybe you have to split this info two files, one in v3 directory and the other in v3/admin directory which contains one\ntestcase \u003ctest_create_application_credential_with_roles\u003e","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cdccf929b1b05a508d4d811e765012310dfb113f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ApplicationCredentialsV3Test(base.BaseIdentityV3Test):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Admin credentials needed to create and assign roles"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_fb1e120a","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":58},"in_reply_to":"bf659307_984e0695","updated":"2018-04-04 10:20:15.000000000","message":"I would rather move the whole thing than split it up. Is it really that important? I see for example some of the volume API tests have both sets of credentials but don\u0027t live under admin/.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ApplicationCredentialsV3Test(base.BaseIdentityV3Test):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Admin credentials needed to create and assign roles"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_66259e08","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":58},"in_reply_to":"bf659307_bcb757f5","updated":"2018-04-03 18:15:40.000000000","message":"I chose to make this a non-admin test because this API is meant to be used by non-admin users. It\u0027s just setting up roles that happens to require admin credentials. I can change it if you really think it\u0027s better, it just seems more correct to me to ensure this works for non-admin users.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aa618afe917167097f4b3782d9a7d06eb9e7105d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"CONF \u003d config.CONF"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class ApplicationCredentialsV3Test(base.BaseIdentityV3Test):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    # Admin credentials needed to create and assign roles"},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_03833458","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":58},"in_reply_to":"bf659307_fb1e120a","updated":"2018-04-06 02:24:00.000000000","message":"Actually we should have all admin tests under admin dir because of 2 reason\n- for interop tests which does not need admin tests\n- cloud does not have admin roles and want to skip the all admin tests which is done via base admin class.\n\nIf we have few admin tests exist in non-admin dir then we should fix those.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":40,"context_line":"                                    \" in this environment\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_bc367750","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":20},"updated":"2018-04-03 06:56:03.000000000","message":"Seems resource_setup can be used here instead?","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cdccf929b1b05a508d4d811e765012310dfb113f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":40,"context_line":"                                    \" in this environment\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_7bd8c251","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":20},"in_reply_to":"bf659307_38afba2a","updated":"2018-04-04 10:20:15.000000000","message":"It\u0027s just setting variables, does it really matter if it\u0027s run every time? Actually I think it\u0027s better, since it ensures if for some reason a test messes with these variables, they are reset correctly before the next test.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":40,"context_line":"                                    \" in this environment\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_c6c90a26","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":20},"in_reply_to":"bf659307_bc367750","updated":"2018-04-03 18:15:40.000000000","message":"From https://docs.openstack.org/tempest/latest/write_tests.html it seems like resource_setup should be used for creating resources, this is only defining shorthand names for long-named methods.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bc903f3733e8c4afbf37400cadf487aa5622dd0","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":40,"context_line":"                                    \" in this environment\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_38afba2a","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":20},"in_reply_to":"bf659307_c6c90a26","updated":"2018-04-04 02:05:37.000000000","message":"resource_setup will be called once for the whole test class, and setUp will be called before every testcase.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("},{"line_number":46,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        self.list_app_creds \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_5cce3b63","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":28},"updated":"2018-04-03 06:56:03.000000000","message":"Since create_app_cred is always followed by _add_app_cred_cleanup, so maybe you can define create_app_cred as a helper which contains the two steps.","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":"        self.create_app_cred \u003d ("},{"line_number":46,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        self.list_app_creds \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_81dbfc4c","line":45,"range":{"start_line":45,"start_character":13,"end_line":45,"end_character":28},"in_reply_to":"bf659307_5cce3b63","updated":"2018-04-03 18:15:40.000000000","message":"Done","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @decorators.idempotent_id(\u00278080c75c-eddc-4786-941a-c2da7039ae61\u0027)"},{"line_number":59,"context_line":"    def test_create_application_credential(self):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        app_cred_name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":62,"context_line":"        app_cred \u003d self.create_app_cred("},{"line_number":63,"context_line":"            user_id\u003dself.user_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_bce8b7b2","line":60,"updated":"2018-04-03 06:56:03.000000000","message":"no need blank line here","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @decorators.idempotent_id(\u00278080c75c-eddc-4786-941a-c2da7039ae61\u0027)"},{"line_number":59,"context_line":"    def test_create_application_credential(self):"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        app_cred_name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":62,"context_line":"        app_cred \u003d self.create_app_cred("},{"line_number":63,"context_line":"            user_id\u003dself.user_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_e6c3eeeb","line":60,"in_reply_to":"bf659307_bce8b7b2","updated":"2018-04-03 18:15:40.000000000","message":"Done","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":103,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":104,"context_line":"        creds \u003d self.os_primary.credentials"},{"line_number":105,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":106,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":107,"context_line":"            name\u003drole_name)[\u0027role\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_3c1b47ca","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":43},"updated":"2018-04-03 06:56:03.000000000","message":"if defining cls.project_id \u003d cls.os_primary.credentials.project_id, this can be removed","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":103,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":104,"context_line":"        creds \u003d self.os_primary.credentials"},{"line_number":105,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":106,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":107,"context_line":"            name\u003drole_name)[\u0027role\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_01536ce3","line":104,"range":{"start_line":104,"start_character":8,"end_line":104,"end_character":43},"in_reply_to":"bf659307_3c1b47ca","updated":"2018-04-03 18:15:40.000000000","message":"Done","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"139f77c6d6c014b2e12cc986b14ae783c7984a3a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":103,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":104,"context_line":"        creds \u003d self.os_primary.credentials"},{"line_number":105,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":106,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":107,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":108,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":109,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":110,"context_line":"            creds.project_id,"},{"line_number":111,"context_line":"            creds.user_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_dcc00be4","line":108,"range":{"start_line":105,"start_character":0,"end_line":108,"end_character":78},"updated":"2018-04-03 06:56:03.000000000","message":"can be replaced by setup_test_role?","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7367d37ecbdc9034a64ed85bbd486facc05b45b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @decorators.idempotent_id(\u00273b3dd48f-3388-406a-a9e6-4d078a552d0e\u0027)"},{"line_number":103,"context_line":"    def test_create_application_credential_with_roles(self):"},{"line_number":104,"context_line":"        creds \u003d self.os_primary.credentials"},{"line_number":105,"context_line":"        role_name \u003d data_utils.rand_name(\u0027role\u0027)"},{"line_number":106,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":107,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":108,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":109,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":110,"context_line":"            creds.project_id,"},{"line_number":111,"context_line":"            creds.user_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_211550e5","line":108,"range":{"start_line":105,"start_character":0,"end_line":108,"end_character":78},"in_reply_to":"bf659307_dcc00be4","updated":"2018-04-03 18:15:40.000000000","message":"Only if this becomes a BaseIdentityV3AdminTest","commit_id":"e42935a514bc4d6a766cba1d92e1ea562cb2838f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bc903f3733e8c4afbf37400cadf487aa5622dd0","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_app_cred(self, name, expires_at\u003dNone, roles\u003dNone):"},{"line_number":47,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_5ef4d7f0","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":58},"updated":"2018-04-04 02:05:37.000000000","message":"maybe self.project_id \u003d self.os_primary.credentials.project_id can also be added here?","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cdccf929b1b05a508d4d811e765012310dfb113f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setUp(self):"},{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_app_cred(self, name, expires_at\u003dNone, roles\u003dNone):"},{"line_number":47,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_fb94d28c","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":58},"in_reply_to":"bf659307_5ef4d7f0","updated":"2018-04-04 10:20:15.000000000","message":"Done","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bc903f3733e8c4afbf37400cadf487aa5622dd0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_app_cred(self, name, expires_at\u003dNone, roles\u003dNone):"},{"line_number":47,"context_line":"        create_app_cred \u003d ("},{"line_number":48,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":49,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_9ea02ff6","line":46,"range":{"start_line":46,"start_character":31,"end_line":46,"end_character":35},"updated":"2018-04-04 02:05:37.000000000","message":"this can also be None, i.e.,\nif name is None:\n    name \u003d data_utils.rand_name(\u0027application_credential\u0027)","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cdccf929b1b05a508d4d811e765012310dfb113f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":44,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_app_cred(self, name, expires_at\u003dNone, roles\u003dNone):"},{"line_number":47,"context_line":"        create_app_cred \u003d ("},{"line_number":48,"context_line":"            self.non_admin_app_creds_client.create_application_credential"},{"line_number":49,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_dbc78e95","line":46,"range":{"start_line":46,"start_character":31,"end_line":46,"end_character":35},"in_reply_to":"bf659307_9ea02ff6","updated":"2018-04-04 10:20:15.000000000","message":"Done","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"8b16ac2fd475ca9fae22c46adda3d927f64c11c8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":53,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":54,"context_line":"        if expires_at:"},{"line_number":55,"context_line":"            kwargs.update({\u0027expires_at\u0027: expires_at})"},{"line_number":56,"context_line":"        if roles:"},{"line_number":57,"context_line":"            kwargs.update({\u0027roles\u0027: roles})"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_6a946a37","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":53},"updated":"2018-04-04 14:55:17.000000000","message":"With update method you can also use this form:\n  kwargs.update(expires_at\u003dexpires_at)","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"775a33eb36ede1e978a8997cc9389322738a564b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":53,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id, name\u003dname)"},{"line_number":54,"context_line":"        if expires_at:"},{"line_number":55,"context_line":"            kwargs.update({\u0027expires_at\u0027: expires_at})"},{"line_number":56,"context_line":"        if roles:"},{"line_number":57,"context_line":"            kwargs.update({\u0027roles\u0027: roles})"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_2ca3eb02","line":55,"range":{"start_line":55,"start_character":26,"end_line":55,"end_character":53},"in_reply_to":"bf659307_6a946a37","updated":"2018-04-04 17:47:55.000000000","message":"Done","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"8b16ac2fd475ca9fae22c46adda3d927f64c11c8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        if expires_at:"},{"line_number":55,"context_line":"            kwargs.update({\u0027expires_at\u0027: expires_at})"},{"line_number":56,"context_line":"        if roles:"},{"line_number":57,"context_line":"            kwargs.update({\u0027roles\u0027: roles})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        app_cred \u003d create_app_cred(**kwargs)[\u0027application_credential\u0027]"},{"line_number":60,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ea9f1a4d","line":57,"range":{"start_line":57,"start_character":26,"end_line":57,"end_character":42},"updated":"2018-04-04 14:55:17.000000000","message":"As above:\n  kwargs.update(roles\u003droles)","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"775a33eb36ede1e978a8997cc9389322738a564b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        if expires_at:"},{"line_number":55,"context_line":"            kwargs.update({\u0027expires_at\u0027: expires_at})"},{"line_number":56,"context_line":"        if roles:"},{"line_number":57,"context_line":"            kwargs.update({\u0027roles\u0027: roles})"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        app_cred \u003d create_app_cred(**kwargs)[\u0027application_credential\u0027]"},{"line_number":60,"context_line":"        self.addCleanup("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_4ca89fda","line":57,"range":{"start_line":57,"start_character":26,"end_line":57,"end_character":42},"in_reply_to":"bf659307_ea9f1a4d","updated":"2018-04-04 17:47:55.000000000","message":"Done","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"8b16ac2fd475ca9fae22c46adda3d927f64c11c8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def _list_app_creds(self, name\u003dNone):"},{"line_number":67,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id)"},{"line_number":68,"context_line":"        if name:"},{"line_number":69,"context_line":"            kwargs.update({\u0027name\u0027: name})"},{"line_number":70,"context_line":"        return self.non_admin_app_creds_client.list_application_credentials("},{"line_number":71,"context_line":"            **kwargs)[\u0027application_credentials\u0027]"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_6ae22ad7","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":41},"updated":"2018-04-04 14:55:17.000000000","message":"as above:\n  kwargs.update(name\u003dname)","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"775a33eb36ede1e978a8997cc9389322738a564b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def _list_app_creds(self, name\u003dNone):"},{"line_number":67,"context_line":"        kwargs \u003d dict(user_id\u003dself.user_id)"},{"line_number":68,"context_line":"        if name:"},{"line_number":69,"context_line":"            kwargs.update({\u0027name\u0027: name})"},{"line_number":70,"context_line":"        return self.non_admin_app_creds_client.list_application_credentials("},{"line_number":71,"context_line":"            **kwargs)[\u0027application_credentials\u0027]"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ecac13f0","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":41},"in_reply_to":"bf659307_6ae22ad7","updated":"2018-04-04 17:47:55.000000000","message":"Done","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"aa618afe917167097f4b3782d9a7d06eb9e7105d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":109,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":110,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":112,"context_line":"            project_id,"},{"line_number":113,"context_line":"            self.user_id,"},{"line_number":114,"context_line":"            role[\u0027id\u0027]"},{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        app_cred_name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":118,"context_line":"        app_cred \u003d self._create_app_cred(app_cred_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_63bb100e","line":115,"range":{"start_line":111,"start_character":0,"end_line":115,"end_character":9},"updated":"2018-04-06 02:24:00.000000000","message":"will creds functionality can be checked with some dummy role if so then we can use a dummy role instead of creating one?\n\nOtherwise we need to move this test only to admin dir as we do for other such test also,","commit_id":"1aae1d7054ffbc24eb3b4216aa6e2a97ab7487ec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"5c118585c2241b52c1c8b0253600fd55298caa8e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        role \u003d self.os_admin.roles_v3_client.create_role("},{"line_number":109,"context_line":"            name\u003drole_name)[\u0027role\u0027]"},{"line_number":110,"context_line":"        self.addCleanup(self.os_admin.roles_v3_client.delete_role, role[\u0027id\u0027])"},{"line_number":111,"context_line":"        self.os_admin.roles_v3_client.create_user_role_on_project("},{"line_number":112,"context_line":"            project_id,"},{"line_number":113,"context_line":"            self.user_id,"},{"line_number":114,"context_line":"            role[\u0027id\u0027]"},{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        app_cred_name \u003d data_utils.rand_name(\u0027application_credential\u0027)"},{"line_number":118,"context_line":"        app_cred \u003d self._create_app_cred(app_cred_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_11e377a6","line":115,"range":{"start_line":111,"start_character":0,"end_line":115,"end_character":9},"in_reply_to":"bf659307_63bb100e","updated":"2018-04-06 09:18:17.000000000","message":"The functionality gets checked with the get_token on line 123. I could change this test to just look up the roles the user already has on the project and use that instead of creating a new role.\n\nThe reason I had it creating a new role is that by default if the user provides no roles then all of the current roles for the project are given to the application credential, so if the user only has one role on the project (which is likely) then whether they specify the role or don\u0027t the result will be the same and it\u0027s not a great test. But with interop concerns in mind I think it\u0027s probably better that way than to require creating a new role.","commit_id":"1aae1d7054ffbc24eb3b4216aa6e2a97ab7487ec"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"d4142ea2239ca69dfe7e491b86a8b7422de6a04b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":37,"context_line":"                                    \" in this environment\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def setUp(self):"},{"line_number":40,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":41,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":42,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":45,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"bf659307_5baecce7","line":42,"range":{"start_line":39,"start_character":4,"end_line":42,"end_character":64},"updated":"2018-04-09 08:33:49.000000000","message":"This is also a good candidate to some base class shared between tests ApplicationCredentialsV3Test and ApplicationCredentialsV3AdminTest","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"a7385682b8c021f8d29be4ac6488f828ee526e5a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            raise cls.skipException(\"Application credentials are not available\""},{"line_number":37,"context_line":"                                    \" in this environment\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def setUp(self):"},{"line_number":40,"context_line":"        super(ApplicationCredentialsV3Test, self).setUp()"},{"line_number":41,"context_line":"        self.user_id \u003d self.os_primary.credentials.user_id"},{"line_number":42,"context_line":"        self.project_id \u003d self.os_primary.credentials.project_id"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def _create_app_cred(self, name\u003dNone, expires_at\u003dNone, roles\u003dNone):"},{"line_number":45,"context_line":"        create_app_cred \u003d ("}],"source_content_type":"text/x-python","patch_set":9,"id":"9f6a8fd7_05f9117f","line":42,"range":{"start_line":39,"start_character":4,"end_line":42,"end_character":64},"in_reply_to":"bf659307_5baecce7","updated":"2018-04-16 11:02:42.000000000","message":"Done","commit_id":"4236064bf61ea852f327db27f518735eddd140a9"}],"tempest/config.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"579877be8210d0cfd29288df30c6febcbdb51766","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    cfg.BoolOpt(\u0027project_tags\u0027,"},{"line_number":242,"context_line":"                default\u003dFalse,"},{"line_number":243,"context_line":"                help\u003d\u0027Is the project tags identity v3 API available?\u0027),"},{"line_number":244,"context_line":"    cfg.BoolOpt(\u0027application_credentials\u0027,"},{"line_number":245,"context_line":"                default\u003dFalse,"},{"line_number":246,"context_line":"                help\u003d\u0027Does the environment have application credentials \u0027"},{"line_number":247,"context_line":"                     \u0027enabled?\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_4347ecbd","line":244,"range":{"start_line":244,"start_character":0,"end_line":244,"end_character":4},"updated":"2018-04-06 02:30:39.000000000","message":"if this is default feature in keystone since queens then, please add comment about remove this config option once Pike is EOL. that will help to cleanup the feature flags.","commit_id":"1aae1d7054ffbc24eb3b4216aa6e2a97ab7487ec"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"eb97ad3676886a24112327741d33859407198f96","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    cfg.BoolOpt(\u0027project_tags\u0027,"},{"line_number":242,"context_line":"                default\u003dFalse,"},{"line_number":243,"context_line":"                help\u003d\u0027Is the project tags identity v3 API available?\u0027),"},{"line_number":244,"context_line":"    cfg.BoolOpt(\u0027application_credentials\u0027,"},{"line_number":245,"context_line":"                default\u003dFalse,"},{"line_number":246,"context_line":"                help\u003d\u0027Does the environment have application credentials \u0027"},{"line_number":247,"context_line":"                     \u0027enabled?\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_2012dcb2","line":244,"range":{"start_line":244,"start_character":0,"end_line":244,"end_character":4},"in_reply_to":"bf659307_4347ecbd","updated":"2018-04-06 19:58:56.000000000","message":"Done","commit_id":"1aae1d7054ffbc24eb3b4216aa6e2a97ab7487ec"}],"tempest/lib/services/identity/v3/application_credentials_client.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7bc903f3733e8c4afbf37400cadf487aa5622dd0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def show_application_credential(self, user_id, application_credential_id):"},{"line_number":46,"context_line":"        \"\"\"To GET Details of an application credential."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":49,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_be48935b","line":46,"range":{"start_line":46,"start_character":11,"end_line":46,"end_character":25},"updated":"2018-04-04 02:05:37.000000000","message":"Get details","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cdccf929b1b05a508d4d811e765012310dfb113f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def show_application_credential(self, user_id, application_credential_id):"},{"line_number":46,"context_line":"        \"\"\"To GET Details of an application credential."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        For a full list of available parameters, please refer to the official"},{"line_number":49,"context_line":"        API reference:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_3b424a10","line":46,"range":{"start_line":46,"start_character":11,"end_line":46,"end_character":25},"in_reply_to":"bf659307_be48935b","updated":"2018-04-04 10:20:15.000000000","message":"Done","commit_id":"23c8b174741f7e2ffcc79b2f0bb52c01bfbd2ba0"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"8b16ac2fd475ca9fae22c46adda3d927f64c11c8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        API reference:"},{"line_number":35,"context_line":"        https://developer.openstack.org/api-ref/identity/v3/index.html#create-application-credential"},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        user_id \u003d kwargs.pop(\u0027user_id\u0027)"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027application_credential\u0027: kwargs})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027users/%s/application_credentials\u0027 % user_id,"},{"line_number":40,"context_line":"                               post_body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_ca57b657","line":37,"updated":"2018-04-04 14:55:17.000000000","message":"Here you are assuming user_id is not optional. Therefore why not to take user id as a named parameter above in a explicit way?\n\n  def create_application_credential(self, user_id, **kwargs):","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"775a33eb36ede1e978a8997cc9389322738a564b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        API reference:"},{"line_number":35,"context_line":"        https://developer.openstack.org/api-ref/identity/v3/index.html#create-application-credential"},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        user_id \u003d kwargs.pop(\u0027user_id\u0027)"},{"line_number":38,"context_line":"        post_body \u003d json.dumps({\u0027application_credential\u0027: kwargs})"},{"line_number":39,"context_line":"        resp, body \u003d self.post(\u0027users/%s/application_credentials\u0027 % user_id,"},{"line_number":40,"context_line":"                               post_body)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf659307_cc5eef11","line":37,"in_reply_to":"bf659307_ca57b657","updated":"2018-04-04 17:47:55.000000000","message":"Done","commit_id":"7821ff1f26da780d78020706debe7a3f6881a11c"}]}
