summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Wittig <max.wittig@siemens.com>2021-02-17 15:54:09 +0100
committerMax Wittig <max.wittig@siemens.com>2021-02-17 15:54:09 +0100
commit2bb16fac18a6a91847201c174f3bf1208338f6aa (patch)
treebfbcc11c1499ae2c03f77d71b4f361e8a4b0b3cc
parentbec2094180268effabd24e71ca74708c0e7832a9 (diff)
downloadgitlab-feat/personal-access-token-api.tar.gz
feat: add personal access token APIfeat/personal-access-token-api
See: https://docs.gitlab.com/ee/api/personal_access_tokens.html
-rw-r--r--docs/gl_objects/personal_access_tokens.rst28
-rw-r--r--gitlab/__init__.py1
-rw-r--r--gitlab/tests/objects/test_personal_access_tokens.py46
-rw-r--r--gitlab/v4/objects/__init__.py1
-rw-r--r--gitlab/v4/objects/personal_access_tokens.py18
5 files changed, 94 insertions, 0 deletions
diff --git a/docs/gl_objects/personal_access_tokens.rst b/docs/gl_objects/personal_access_tokens.rst
new file mode 100644
index 0000000..3cbc744
--- /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 000fe7f..71a473a 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -143,6 +143,7 @@ class Gitlab(object):
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 0000000..920cb1d
--- /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 4708012..9f91f53 100644
--- a/gitlab/v4/objects/__init__.py
+++ b/gitlab/v4/objects/__init__.py
@@ -69,6 +69,7 @@ from .triggers import *
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 0000000..211bd92
--- /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",)