From 2bb16fac18a6a91847201c174f3bf1208338f6aa Mon Sep 17 00:00:00 2001 From: Max Wittig Date: Wed, 17 Feb 2021 15:54:09 +0100 Subject: [PATCH] feat: add personal access token API See: https://docs.gitlab.com/ee/api/personal_access_tokens.html --- docs/gl_objects/personal_access_tokens.rst | 28 +++++++++++ gitlab/__init__.py | 1 + .../objects/test_personal_access_tokens.py | 46 +++++++++++++++++++ gitlab/v4/objects/__init__.py | 1 + gitlab/v4/objects/personal_access_tokens.py | 18 ++++++++ 5 files changed, 94 insertions(+) create mode 100644 docs/gl_objects/personal_access_tokens.rst create mode 100644 gitlab/tests/objects/test_personal_access_tokens.py create mode 100644 gitlab/v4/objects/personal_access_tokens.py 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