Skip to content

Commit ef8fcf7

Browse files
authored
Merge pull request #1304 from python-gitlab/feat/personal-access-token-api
feat: add personal access token API
2 parents bec2094 + 2bb16fa commit ef8fcf7

File tree

5 files changed

+94
-0
lines changed

5 files changed

+94
-0
lines changed
Lines changed: 28 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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
Lines changed: 46 additions & 0 deletions
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

Lines changed: 1 addition & 0 deletions
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.*
Lines changed: 18 additions & 0 deletions
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)
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