Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit19b38bd

Browse files
nejchJohnVillalovos
authored andcommitted
feat(objects): support fetching PATs via id orself endpoint
1 parent3abc557 commit19b38bd

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

‎docs/gl_objects/personal_access_tokens.rst‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ List personal access tokens from other user_id (admin only)::
3131

3232
access_tokens = gl.personal_access_tokens.list(user_id=25)
3333

34+
Get a personal access token by id::
35+
36+
gl.personal_access_tokens.get(123)
37+
38+
Get the personal access token currently used::
39+
40+
gl.personal_access_tokens.get("self")
41+
3442
Revoke a personal access token fetched via list::
3543

3644
access_token = access_tokens[0]

‎gitlab/v4/objects/personal_access_tokens.py‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
fromtypingimportAny,cast,Union
2+
13
fromgitlab.baseimportRESTManager,RESTObject
2-
fromgitlab.mixinsimportCreateMixin,DeleteMixin,ListMixin,ObjectDeleteMixin
4+
fromgitlab.mixinsimportCreateMixin,DeleteMixin,ObjectDeleteMixin,RetrieveMixin
35
fromgitlab.typesimportArrayAttribute,RequiredOptional
46

57
__all__= [
@@ -14,11 +16,16 @@ class PersonalAccessToken(ObjectDeleteMixin, RESTObject):
1416
pass
1517

1618

17-
classPersonalAccessTokenManager(DeleteMixin,ListMixin,RESTManager):
19+
classPersonalAccessTokenManager(DeleteMixin,RetrieveMixin,RESTManager):
1820
_path="/personal_access_tokens"
1921
_obj_cls=PersonalAccessToken
2022
_list_filters= ("user_id",)
2123

24+
defget(
25+
self,id:Union[str,int],lazy:bool=False,**kwargs:Any
26+
)->PersonalAccessToken:
27+
returncast(PersonalAccessToken,super().get(id=id,lazy=lazy,**kwargs))
28+
2229

2330
classUserPersonalAccessToken(RESTObject):
2431
pass

‎tests/unit/objects/test_personal_access_tokens.py‎

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
token_url="http://localhost/api/v4/personal_access_tokens"
1515
single_token_url=f"{token_url}/{token_id}"
16+
self_token_url=f"{token_url}/self"
1617
user_token_url=f"http://localhost/api/v4/users/{user_id}/personal_access_tokens"
1718

1819
content= {
@@ -41,15 +42,47 @@ def resp_create_user_personal_access_token():
4142

4243

4344
@pytest.fixture
44-
defresp_personal_access_token(no_content):
45-
withresponses.RequestsMock(assert_all_requests_are_fired=False)asrsps:
45+
defresp_list_personal_access_tokens():
46+
withresponses.RequestsMock()asrsps:
4647
rsps.add(
4748
method=responses.GET,
4849
url=token_url,
4950
json=[content],
5051
content_type="application/json",
5152
status=200,
5253
)
54+
yieldrsps
55+
56+
57+
@pytest.fixture
58+
defresp_get_personal_access_token():
59+
withresponses.RequestsMock()asrsps:
60+
rsps.add(
61+
method=responses.GET,
62+
url=single_token_url,
63+
json=content,
64+
content_type="application/json",
65+
status=200,
66+
)
67+
yieldrsps
68+
69+
70+
@pytest.fixture
71+
defresp_get_personal_access_token_self():
72+
withresponses.RequestsMock()asrsps:
73+
rsps.add(
74+
method=responses.GET,
75+
url=self_token_url,
76+
json=content,
77+
content_type="application/json",
78+
status=200,
79+
)
80+
yieldrsps
81+
82+
83+
@pytest.fixture
84+
defresp_delete_personal_access_token(no_content):
85+
withresponses.RequestsMock()asrsps:
5386
rsps.add(
5487
method=responses.DELETE,
5588
url=single_token_url,
@@ -69,26 +102,38 @@ def test_create_personal_access_token(gl, resp_create_user_personal_access_token
69102
assertaccess_token.name==token_name
70103

71104

72-
deftest_list_personal_access_tokens(gl,resp_personal_access_token):
105+
deftest_list_personal_access_tokens(gl,resp_list_personal_access_tokens):
73106
access_tokens=gl.personal_access_tokens.list()
74107
assertlen(access_tokens)==1
75108
assertaccess_tokens[0].revokedisFalse
76109
assertaccess_tokens[0].name==token_name
77110

78111

79-
deftest_list_personal_access_tokens_filter(gl,resp_personal_access_token):
112+
deftest_list_personal_access_tokens_filter(gl,resp_list_personal_access_tokens):
80113
access_tokens=gl.personal_access_tokens.list(user_id=user_id)
81114
assertlen(access_tokens)==1
82115
assertaccess_tokens[0].revokedisFalse
83116
assertaccess_tokens[0].user_id==user_id
84117

85118

86-
deftest_revoke_personal_access_token(gl,resp_personal_access_token):
87-
access_token=gl.personal_access_tokens.list(user_id=user_id)[0]
119+
deftest_get_personal_access_token(gl,resp_get_personal_access_token):
120+
access_token=gl.personal_access_tokens.get(token_id)
121+
122+
assertaccess_token.revokedisFalse
123+
assertaccess_token.user_id==user_id
124+
125+
126+
deftest_get_personal_access_token_self(gl,resp_get_personal_access_token_self):
127+
access_token=gl.personal_access_tokens.get("self")
128+
129+
assertaccess_token.revokedisFalse
130+
assertaccess_token.user_id==user_id
131+
132+
133+
deftest_delete_personal_access_token(gl,resp_delete_personal_access_token):
134+
access_token=gl.personal_access_tokens.get(token_id,lazy=True)
88135
access_token.delete()
89-
assertresp_personal_access_token.assert_call_count(single_token_url,1)
90136

91137

92-
deftest_revoke_personal_access_token_by_id(gl,resp_personal_access_token):
138+
deftest_revoke_personal_access_token_by_id(gl,resp_delete_personal_access_token):
93139
gl.personal_access_tokens.delete(token_id)
94-
assertresp_personal_access_token.assert_call_count(single_token_url,1)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp