Skip to content

Commit 2bb16fa

Browse files
committed
feat: add personal access token API
See: https://docs.gitlab.com/ee/api/personal_access_tokens.html
1 parent bec2094 commit 2bb16fa

File tree

5 files changed

+94
-0
lines changed

5 files changed

+94
-0
lines changed
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
######################
2+
Personal Access Tokens
3+
######################
4+
5+
Get a list of personal access tokens
6+
7+
References
8+
----------
9+
10+
* v4 API:
11+
12+
+ :class:`gitlab.v4.objects.PersonalAccessToken`
13+
+ :class:`gitlab.v4.objects.PersonalAcessTokenManager`
14+
+ :attr:`gitlab.Gitlab.personal_access_tokens`
15+
16+
* GitLab API: https://docs.gitlab.com/ee/api/personal_access_tokens.html
17+
18+
Examples
19+
--------
20+
21+
List personal access tokens::
22+
23+
access_tokens = gl.personal_access_tokens.list()
24+
print(access_tokens[0].name)
25+
26+
List personal access tokens from other user_id (admin only)::
27+
28+
access_tokens = gl.personal_access_tokens.list(user_id=25)

gitlab/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ def __init__(
143143
self.user_activities = objects.UserActivitiesManager(self)
144144
self.applications = objects.ApplicationManager(self)
145145
self.variables = objects.VariableManager(self)
146+
self.personal_access_tokens = objects.PersonalAccessTokenManager(self)
146147

147148
def __enter__(self):
148149
return self
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
GitLab API: https://docs.gitlab.com/ee/api/personal_access_tokens.html
3+
"""
4+
5+
import pytest
6+
import responses
7+
8+
9+
@pytest.fixture
10+
def resp_list_personal_access_token():
11+
content = [
12+
{
13+
"id": 4,
14+
"name": "Test Token",
15+
"revoked": False,
16+
"created_at": "2020-07-23T14:31:47.729Z",
17+
"scopes": ["api"],
18+
"active": True,
19+
"user_id": 24,
20+
"expires_at": None,
21+
}
22+
]
23+
24+
with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps:
25+
rsps.add(
26+
method=responses.GET,
27+
url="http://localhost/api/v4/personal_access_tokens",
28+
json=content,
29+
content_type="application/json",
30+
status=200,
31+
)
32+
yield rsps
33+
34+
35+
def test_list_personal_access_tokens(gl, resp_list_personal_access_token):
36+
access_tokens = gl.personal_access_tokens.list()
37+
assert len(access_tokens) == 1
38+
assert access_tokens[0].revoked is False
39+
assert access_tokens[0].name == "Test Token"
40+
41+
42+
def test_list_personal_access_tokens_filter(gl, resp_list_personal_access_token):
43+
access_tokens = gl.personal_access_tokens.list(user_id=24)
44+
assert len(access_tokens) == 1
45+
assert access_tokens[0].revoked is False
46+
assert access_tokens[0].user_id == 24

gitlab/v4/objects/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
from .users import *
7070
from .variables import *
7171
from .wikis import *
72+
from .personal_access_tokens import *
7273

7374

7475
# TODO: deprecate these in favor of gitlab.const.*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from gitlab.base import * # noqa
2+
from gitlab.mixins import * # noqa
3+
4+
5+
__all__ = [
6+
"PersonalAccessToken",
7+
"PersonalAccessTokenManager",
8+
]
9+
10+
11+
class PersonalAccessToken(RESTObject):
12+
pass
13+
14+
15+
class PersonalAccessTokenManager(ListMixin, RESTManager):
16+
_path = "/personal_access_tokens"
17+
_obj_cls = PersonalAccessToken
18+
_list_filters = ("user_id",)

0 commit comments

Comments
 (0)