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

Commit5f8b8f5

Browse files
nejchJohnVillalovos
authored andcommitted
feat(api): add support for resource groups
1 parent1816107 commit5f8b8f5

File tree

6 files changed

+166
-0
lines changed

6 files changed

+166
-0
lines changed

‎docs/api-objects.rst‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ API examples
5151
gl_objects/remote_mirrors
5252
gl_objects/repositories
5353
gl_objects/repository_tags
54+
gl_objects/resource_groups
5455
gl_objects/search
5556
gl_objects/secure_files
5657
gl_objects/settings
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
###############
2+
Resource Groups
3+
###############
4+
5+
Reference
6+
---------
7+
8+
* v4 API:
9+
10+
+:class:`gitlab.v4.objects.ProjectResourceGroup`
11+
+:class:`gitlab.v4.objects.ProjectResourceGroupManager`
12+
+:attr:`gitlab.v4.objects.Project.resource_groups`
13+
+:class:`gitlab.v4.objects.ProjectResourceGroupUpcomingJob`
14+
+:class:`gitlab.v4.objects.ProjectResourceGroupUpcomingJobManager`
15+
+:attr:`gitlab.v4.objects.ProjectResourceGroup.upcoming_jobs`
16+
17+
* Gitlab API: https://docs.gitlab.com/ee/api/resource_groups.html
18+
19+
Examples
20+
--------
21+
22+
List resource groups for a project::
23+
24+
project = gl.projects.get(project_id, lazy=True)
25+
resource_group = project.resource_groups.list()
26+
27+
Get a single resource group::
28+
29+
resource_group = project.resource_groups.get("production")
30+
31+
Edit a resource group::
32+
33+
resource_group.process_mode = "oldest_first"
34+
resource_group.save()
35+
36+
List upcoming jobs for a resource group::
37+
38+
upcoming_jobs = resource_group.upcoming_jobs.list()

‎gitlab/v4/objects/__init__.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
from .push_rulesimport*
5353
from .releasesimport*
5454
from .repositoriesimport*
55+
from .resource_groupsimport*
5556
from .runnersimport*
5657
from .secure_filesimport*
5758
from .settingsimport*

‎gitlab/v4/objects/projects.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
from .push_rulesimportProjectPushRulesManager# noqa: F401
8282
from .releasesimportProjectReleaseManager# noqa: F401
8383
from .repositoriesimportRepositoryMixin
84+
from .resource_groupsimportProjectResourceGroupManager
8485
from .runnersimportProjectRunnerManager# noqa: F401
8586
from .secure_filesimportProjectSecureFileManager# noqa: F401
8687
from .snippetsimportProjectSnippetManager# noqa: F401
@@ -207,6 +208,7 @@ class Project(RefreshMixin, SaveMixin, ObjectDeleteMixin, RepositoryMixin, RESTO
207208
protectedtags:ProjectProtectedTagManager
208209
pushrules:ProjectPushRulesManager
209210
releases:ProjectReleaseManager
211+
resource_groups:ProjectResourceGroupManager
210212
remote_mirrors:"ProjectRemoteMirrorManager"
211213
repositories:ProjectRegistryRepositoryManager
212214
runners:ProjectRunnerManager
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
fromtypingimportAny,cast,Union
2+
3+
fromgitlab.baseimportRESTManager,RESTObject
4+
fromgitlab.mixinsimportListMixin,RetrieveMixin,SaveMixin,UpdateMixin
5+
fromgitlab.typesimportRequiredOptional
6+
7+
__all__= [
8+
"ProjectResourceGroup",
9+
"ProjectResourceGroupManager",
10+
"ProjectResourceGroupUpcomingJob",
11+
"ProjectResourceGroupUpcomingJobManager",
12+
]
13+
14+
15+
classProjectResourceGroup(SaveMixin,RESTObject):
16+
_id_attr="key"
17+
18+
upcoming_jobs:"ProjectResourceGroupUpcomingJobManager"
19+
20+
21+
classProjectResourceGroupManager(RetrieveMixin,UpdateMixin,RESTManager):
22+
_path="/projects/{project_id}/resource_groups"
23+
_obj_cls=ProjectResourceGroup
24+
_from_parent_attrs= {"project_id":"id"}
25+
_list_filters= (
26+
"order_by",
27+
"sort",
28+
"include_html_description",
29+
)
30+
_update_attrs=RequiredOptional(optional=("process_mode",))
31+
32+
defget(
33+
self,id:Union[str,int],lazy:bool=False,**kwargs:Any
34+
)->ProjectResourceGroup:
35+
returncast(ProjectResourceGroup,super().get(id=id,lazy=lazy,**kwargs))
36+
37+
38+
classProjectResourceGroupUpcomingJob(RESTObject):
39+
pass
40+
41+
42+
classProjectResourceGroupUpcomingJobManager(ListMixin,RESTManager):
43+
_path="/projects/{project_id}/resource_groups/{resource_group_key}/upcoming_jobs"
44+
_obj_cls=ProjectResourceGroupUpcomingJob
45+
_from_parent_attrs= {"project_id":"project_id","resource_group_key":"key"}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
"""
2+
GitLab API:
3+
https://docs.gitlab.com/ee/api/resource_groups.html
4+
"""
5+
importpytest
6+
importresponses
7+
8+
fromgitlab.v4.objectsimportProjectResourceGroup,ProjectResourceGroupUpcomingJob
9+
10+
from .test_jobsimportjob_content
11+
12+
resource_group_content= {
13+
"id":3,
14+
"key":"production",
15+
"process_mode":"unordered",
16+
"created_at":"2021-09-01T08:04:59.650Z",
17+
"updated_at":"2021-09-01T08:04:59.650Z",
18+
}
19+
20+
21+
@pytest.fixture
22+
defresp_list_resource_groups():
23+
withresponses.RequestsMock()asrsps:
24+
rsps.add(
25+
method=responses.GET,
26+
url="http://localhost/api/v4/projects/1/resource_groups",
27+
json=[resource_group_content],
28+
content_type="application/json",
29+
status=200,
30+
)
31+
yieldrsps
32+
33+
34+
@pytest.fixture
35+
defresp_get_resource_group():
36+
withresponses.RequestsMock()asrsps:
37+
rsps.add(
38+
method=responses.GET,
39+
url="http://localhost/api/v4/projects/1/resource_groups/production",
40+
json=resource_group_content,
41+
content_type="application/json",
42+
status=200,
43+
)
44+
yieldrsps
45+
46+
47+
@pytest.fixture
48+
defresp_list_upcoming_jobs():
49+
withresponses.RequestsMock()asrsps:
50+
rsps.add(
51+
method=responses.GET,
52+
url="http://localhost/api/v4/projects/1/resource_groups/production/upcoming_jobs",
53+
json=[job_content],
54+
content_type="application/json",
55+
status=200,
56+
)
57+
yieldrsps
58+
59+
60+
deftest_list_project_resource_groups(project,resp_list_resource_groups):
61+
resource_groups=project.resource_groups.list()
62+
assertisinstance(resource_groups,list)
63+
assertisinstance(resource_groups[0],ProjectResourceGroup)
64+
assertresource_groups[0].process_mode=="unordered"
65+
66+
67+
deftest_get_project_resource_group(project,resp_get_resource_group):
68+
resource_group=project.resource_groups.get("production")
69+
assertisinstance(resource_group,ProjectResourceGroup)
70+
assertresource_group.process_mode=="unordered"
71+
72+
73+
deftest_list_resource_group_upcoming_jobs(project,resp_list_upcoming_jobs):
74+
resource_group=project.resource_groups.get("production",lazy=True)
75+
upcoming_jobs=resource_group.upcoming_jobs.list()
76+
77+
assertisinstance(upcoming_jobs,list)
78+
assertisinstance(upcoming_jobs[0],ProjectResourceGroupUpcomingJob)
79+
assertupcoming_jobs[0].ref=="main"

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp