diff --git a/docs/gl_objects/deploy_tokens.rst b/docs/gl_objects/deploy_tokens.rst index 302cb9c9a..c7c138975 100644 --- a/docs/gl_objects/deploy_tokens.rst +++ b/docs/gl_objects/deploy_tokens.rst @@ -54,6 +54,10 @@ List the deploy tokens for a project:: deploy_tokens = project.deploytokens.list() +Get a deploy token for a project by id:: + + deploy_token = project.deploytokens.get(deploy_token_id) + Create a new deploy token to access registry images of a project: In addition to required parameters ``name`` and ``scopes``, this method accepts @@ -107,6 +111,10 @@ List the deploy tokens for a group:: deploy_tokens = group.deploytokens.list() +Get a deploy token for a group by id:: + + deploy_token = group.deploytokens.get(deploy_token_id) + Create a new deploy token to access all repositories of all projects in a group: In addition to required parameters ``name`` and ``scopes``, this method accepts diff --git a/gitlab/v4/objects/deploy_tokens.py b/gitlab/v4/objects/deploy_tokens.py index 563c1d63a..9fcfc2314 100644 --- a/gitlab/v4/objects/deploy_tokens.py +++ b/gitlab/v4/objects/deploy_tokens.py @@ -1,6 +1,14 @@ +from typing import Any, cast, Union + from gitlab import types from gitlab.base import RequiredOptional, RESTManager, RESTObject -from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin +from gitlab.mixins import ( + CreateMixin, + DeleteMixin, + ListMixin, + ObjectDeleteMixin, + RetrieveMixin, +) __all__ = [ "DeployToken", @@ -25,7 +33,7 @@ class GroupDeployToken(ObjectDeleteMixin, RESTObject): pass -class GroupDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager): +class GroupDeployTokenManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager): _path = "/groups/{group_id}/deploy_tokens" _from_parent_attrs = {"group_id": "id"} _obj_cls = GroupDeployToken @@ -41,12 +49,17 @@ class GroupDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager): ) _types = {"scopes": types.CommaSeparatedListAttribute} + def get( + self, id: Union[str, int], lazy: bool = False, **kwargs: Any + ) -> GroupDeployToken: + return cast(GroupDeployToken, super().get(id=id, lazy=lazy, **kwargs)) + class ProjectDeployToken(ObjectDeleteMixin, RESTObject): pass -class ProjectDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager): +class ProjectDeployTokenManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager): _path = "/projects/{project_id}/deploy_tokens" _from_parent_attrs = {"project_id": "id"} _obj_cls = ProjectDeployToken @@ -61,3 +74,8 @@ class ProjectDeployTokenManager(ListMixin, CreateMixin, DeleteMixin, RESTManager ), ) _types = {"scopes": types.CommaSeparatedListAttribute} + + def get( + self, id: Union[str, int], lazy: bool = False, **kwargs: Any + ) -> ProjectDeployToken: + return cast(ProjectDeployToken, super().get(id=id, lazy=lazy, **kwargs)) diff --git a/tests/functional/api/test_deploy_tokens.py b/tests/functional/api/test_deploy_tokens.py index efcf8b1b3..9824af5d2 100644 --- a/tests/functional/api/test_deploy_tokens.py +++ b/tests/functional/api/test_deploy_tokens.py @@ -10,10 +10,11 @@ def test_project_deploy_tokens(gl, project): assert len(project.deploytokens.list()) == 1 assert gl.deploytokens.list() == project.deploytokens.list() - assert project.deploytokens.list()[0].name == "foo" - assert project.deploytokens.list()[0].expires_at == "2022-01-01T00:00:00.000Z" - assert project.deploytokens.list()[0].scopes == ["read_registry"] - assert project.deploytokens.list()[0].username == "bar" + deploy_token = project.deploytokens.get(deploy_token.id) + assert deploy_token.name == "foo" + assert deploy_token.expires_at == "2022-01-01T00:00:00.000Z" + assert deploy_token.scopes == ["read_registry"] + assert deploy_token.username == "bar" deploy_token.delete() assert len(project.deploytokens.list()) == 0 @@ -31,6 +32,10 @@ def test_group_deploy_tokens(gl, group): assert len(group.deploytokens.list()) == 1 assert gl.deploytokens.list() == group.deploytokens.list() + deploy_token = group.deploytokens.get(deploy_token.id) + assert deploy_token.name == "foo" + assert deploy_token.scopes == ["read_registry"] + deploy_token.delete() assert len(group.deploytokens.list()) == 0 assert len(gl.deploytokens.list()) == 0