Skip to content

Commit c281d95

Browse files
author
Gauvain Pocentek
committed
Add support for pagesdomains
Closes #362
1 parent 6923f11 commit c281d95

File tree

5 files changed

+98
-0
lines changed

5 files changed

+98
-0
lines changed

docs/api-objects.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ API examples
2222
gl_objects/mrs
2323
gl_objects/namespaces
2424
gl_objects/milestones
25+
gl_objects/pagesdomains
2526
gl_objects/projects
2627
gl_objects/runners
2728
gl_objects/settings

docs/gl_objects/pagesdomains.rst

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#############
2+
Pages domains
3+
#############
4+
5+
Admin
6+
=====
7+
8+
References
9+
----------
10+
11+
* v4 API:
12+
13+
+ :class:`gitlab.v4.objects.PagesDomain`
14+
+ :class:`gitlab.v4.objects.PagesDomainManager`
15+
+ :attr:`gitlab.Gitlab.pagesdomains`
16+
17+
* GitLab API: https://docs.gitlab.com/ce/api/pages_domains.html#list-all-pages-domains
18+
19+
Examples
20+
--------
21+
22+
List all the existing domains (admin only)::
23+
24+
domains = gl.pagesdomains.list()
25+
26+
Project pages domain
27+
====================
28+
29+
References
30+
----------
31+
32+
* v4 API:
33+
34+
+ :class:`gitlab.v4.objects.ProjectPagesDomain`
35+
+ :class:`gitlab.v4.objects.ProjectPagesDomainManager`
36+
+ :attr:`gitlab.v4.objects.Project.pagesdomains`
37+
38+
* GitLab API: https://docs.gitlab.com/ce/api/pages_domains.html#list-pages-domains
39+
40+
Examples
41+
--------
42+
43+
List domains for a project::
44+
45+
domains = project.pagesdomains.list()
46+
47+
Get a single domain::
48+
49+
domain = project.pagesdomains.get('d1.example.com')
50+
51+
Create a new domain::
52+
53+
domain = project.pagesdomains.create({'domain': 'd2.example.com})
54+
55+
Update an existing domain::
56+
57+
domain.certificate = open('d2.crt').read()
58+
domain.key = open('d2.key').read()
59+
domain.save()
60+
61+
Delete an existing domain::
62+
63+
domain.delete
64+
# or
65+
project.pagesdomains.delete('d2.example.com')

gitlab/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def __init__(self, url, private_token=None, oauth_token=None, email=None,
125125
self.teams = objects.TeamManager(self)
126126
else:
127127
self.dockerfiles = objects.DockerfileManager(self)
128+
self.pagesdomains = objects.PagesDomainManager(self)
128129
self.user_activities = objects.UserActivitiesManager(self)
129130

130131
if self._api_version == '3':

gitlab/v4/objects.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -723,6 +723,15 @@ class NamespaceManager(GetFromListMixin, RESTManager):
723723
_list_filters = ('search', )
724724

725725

726+
class PagesDomain(RESTObject):
727+
_id_attr = 'domain'
728+
729+
730+
class PagesDomainManager(ListMixin, RESTManager):
731+
_path = '/pages/domains'
732+
_obj_cls = PagesDomain
733+
734+
726735
class ProjectBoardList(SaveMixin, ObjectDeleteMixin, RESTObject):
727736
pass
728737

@@ -1249,6 +1258,18 @@ class ProjectNotificationSettingsManager(NotificationSettingsManager):
12491258
_from_parent_attrs = {'project_id': 'id'}
12501259

12511260

1261+
class ProjectPagesDomain(SaveMixin, ObjectDeleteMixin, RESTObject):
1262+
_id_attr = 'domain'
1263+
1264+
1265+
class ProjectPagesDomainManager(CRUDMixin, RESTManager):
1266+
_path = '/projects/%(project_id)s/pages/domains'
1267+
_obj_cls = ProjectPagesDomain
1268+
_from_parent_attrs = {'project_id': 'id'}
1269+
_create_attrs = (('domain', ), ('certificate', 'key'))
1270+
_update_attrs = (tuple(), ('certificate', 'key'))
1271+
1272+
12521273
class ProjectTag(ObjectDeleteMixin, RESTObject):
12531274
_id_attr = 'name'
12541275
_short_print_attr = 'name'
@@ -2161,6 +2182,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
21612182
('milestones', 'ProjectMilestoneManager'),
21622183
('notes', 'ProjectNoteManager'),
21632184
('notificationsettings', 'ProjectNotificationSettingsManager'),
2185+
('pagesdomains', 'ProjectPagesDomainManager'),
21642186
('pipelines', 'ProjectPipelineManager'),
21652187
('protectedbranches', 'ProjectProtectedBranchManager'),
21662188
('runners', 'ProjectRunnerManager'),

tools/python_test_v4.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,15 @@
285285
assert(len(l2) == 1)
286286
assert(l1[0].id != l2[0].id)
287287

288+
# project pages domains
289+
domain = admin_project.pagesdomains.create({'domain': 'foo.domain.com'})
290+
assert(len(admin_project.pagesdomains.list()) == 1)
291+
assert(len(gl.pagesdomains.list()) == 1)
292+
domain = admin_project.pagesdomains.get('foo.domain.com')
293+
assert(domain.domain == 'foo.domain.com')
294+
domain.delete()
295+
assert(len(admin_project.pagesdomains.list()) == 0)
296+
288297
# project content (files)
289298
admin_project.files.create({'file_path': 'README',
290299
'branch': 'master',

0 commit comments

Comments
 (0)