diff --git a/docs/gl_objects/personal_access_tokens.rst b/docs/gl_objects/personal_access_tokens.rst new file mode 100644 index 000000000..3cbc74435 --- /dev/null +++ b/docs/gl_objects/personal_access_tokens.rst @@ -0,0 +1,28 @@ +###################### +Personal Access Tokens +###################### + +Get a list of personal access tokens + +References +---------- + +* v4 API: + + + :class:`gitlab.v4.objects.PersonalAccessToken` + + :class:`gitlab.v4.objects.PersonalAcessTokenManager` + + :attr:`gitlab.Gitlab.personal_access_tokens` + +* GitLab API: https://docs.gitlab.com/ee/api/personal_access_tokens.html + +Examples +-------- + +List personal access tokens:: + + access_tokens = gl.personal_access_tokens.list() + print(access_tokens[0].name) + +List personal access tokens from other user_id (admin only):: + + access_tokens = gl.personal_access_tokens.list(user_id=25) diff --git a/gitlab/__init__.py b/gitlab/__init__.py index 000fe7f40..71a473ad5 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -143,6 +143,7 @@ def __init__( self.user_activities = objects.UserActivitiesManager(self) self.applications = objects.ApplicationManager(self) self.variables = objects.VariableManager(self) + self.personal_access_tokens = objects.PersonalAccessTokenManager(self) def __enter__(self): return self diff --git a/gitlab/tests/objects/test_personal_access_tokens.py b/gitlab/tests/objects/test_personal_access_tokens.py new file mode 100644 index 000000000..920cb1dfd --- /dev/null +++ b/gitlab/tests/objects/test_personal_access_tokens.py @@ -0,0 +1,46 @@ +""" +GitLab API: https://docs.gitlab.com/ee/api/personal_access_tokens.html +""" + +import pytest +import responses + + +@pytest.fixture +def resp_list_personal_access_token(): + content = [ + { + "id": 4, + "name": "Test Token", + "revoked": False, + "created_at": "2020-07-23T14:31:47.729Z", + "scopes": ["api"], + "active": True, + "user_id": 24, + "expires_at": None, + } + ] + + with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/personal_access_tokens", + json=content, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_personal_access_tokens(gl, resp_list_personal_access_token): + access_tokens = gl.personal_access_tokens.list() + assert len(access_tokens) == 1 + assert access_tokens[0].revoked is False + assert access_tokens[0].name == "Test Token" + + +def test_list_personal_access_tokens_filter(gl, resp_list_personal_access_token): + access_tokens = gl.personal_access_tokens.list(user_id=24) + assert len(access_tokens) == 1 + assert access_tokens[0].revoked is False + assert access_tokens[0].user_id == 24 diff --git a/gitlab/v4/objects/__init__.py b/gitlab/v4/objects/__init__.py index 47080129b..9f91f5348 100644 --- a/gitlab/v4/objects/__init__.py +++ b/gitlab/v4/objects/__init__.py @@ -69,6 +69,7 @@ from .users import * from .variables import * from .wikis import * +from .personal_access_tokens import * # TODO: deprecate these in favor of gitlab.const.* diff --git a/gitlab/v4/objects/personal_access_tokens.py b/gitlab/v4/objects/personal_access_tokens.py new file mode 100644 index 000000000..211bd92cd --- /dev/null +++ b/gitlab/v4/objects/personal_access_tokens.py @@ -0,0 +1,18 @@ +from gitlab.base import * # noqa +from gitlab.mixins import * # noqa + + +__all__ = [ + "PersonalAccessToken", + "PersonalAccessTokenManager", +] + + +class PersonalAccessToken(RESTObject): + pass + + +class PersonalAccessTokenManager(ListMixin, RESTManager): + _path = "/personal_access_tokens" + _obj_cls = PersonalAccessToken + _list_filters = ("user_id",) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy