summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2017-12-31 17:52:57 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2017-12-31 17:52:57 +0100
commitc281d95c2f978d8d2eb1d77352babf5217d32062 (patch)
treeb25838f9379fb73abc01996c9221f99c4b262e32
parent6923f117bc20fffcb0256e7cda35534ee48b058f (diff)
downloadgitlab-c281d95c2f978d8d2eb1d77352babf5217d32062.tar.gz
Add support for pagesdomains
Closes #362
-rw-r--r--docs/api-objects.rst1
-rw-r--r--docs/gl_objects/pagesdomains.rst65
-rw-r--r--gitlab/__init__.py1
-rw-r--r--gitlab/v4/objects.py22
-rw-r--r--tools/python_test_v4.py9
5 files changed, 98 insertions, 0 deletions
diff --git a/docs/api-objects.rst b/docs/api-objects.rst
index adfe5ff..b18c4ce 100644
--- a/docs/api-objects.rst
+++ b/docs/api-objects.rst
@@ -22,6 +22,7 @@ API examples
gl_objects/mrs
gl_objects/namespaces
gl_objects/milestones
+ gl_objects/pagesdomains
gl_objects/projects
gl_objects/runners
gl_objects/settings
diff --git a/docs/gl_objects/pagesdomains.rst b/docs/gl_objects/pagesdomains.rst
new file mode 100644
index 0000000..d6b39c7
--- /dev/null
+++ b/docs/gl_objects/pagesdomains.rst
@@ -0,0 +1,65 @@
+#############
+Pages domains
+#############
+
+Admin
+=====
+
+References
+----------
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.PagesDomain`
+ + :class:`gitlab.v4.objects.PagesDomainManager`
+ + :attr:`gitlab.Gitlab.pagesdomains`
+
+* GitLab API: https://docs.gitlab.com/ce/api/pages_domains.html#list-all-pages-domains
+
+Examples
+--------
+
+List all the existing domains (admin only)::
+
+ domains = gl.pagesdomains.list()
+
+Project pages domain
+====================
+
+References
+----------
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.ProjectPagesDomain`
+ + :class:`gitlab.v4.objects.ProjectPagesDomainManager`
+ + :attr:`gitlab.v4.objects.Project.pagesdomains`
+
+* GitLab API: https://docs.gitlab.com/ce/api/pages_domains.html#list-pages-domains
+
+Examples
+--------
+
+List domains for a project::
+
+ domains = project.pagesdomains.list()
+
+Get a single domain::
+
+ domain = project.pagesdomains.get('d1.example.com')
+
+Create a new domain::
+
+ domain = project.pagesdomains.create({'domain': 'd2.example.com})
+
+Update an existing domain::
+
+ domain.certificate = open('d2.crt').read()
+ domain.key = open('d2.key').read()
+ domain.save()
+
+Delete an existing domain::
+
+ domain.delete
+ # or
+ project.pagesdomains.delete('d2.example.com')
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index e7b09a4..950db86 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -125,6 +125,7 @@ class Gitlab(object):
self.teams = objects.TeamManager(self)
else:
self.dockerfiles = objects.DockerfileManager(self)
+ self.pagesdomains = objects.PagesDomainManager(self)
self.user_activities = objects.UserActivitiesManager(self)
if self._api_version == '3':
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 4bf6776..397bfb5 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -723,6 +723,15 @@ class NamespaceManager(GetFromListMixin, RESTManager):
_list_filters = ('search', )
+class PagesDomain(RESTObject):
+ _id_attr = 'domain'
+
+
+class PagesDomainManager(ListMixin, RESTManager):
+ _path = '/pages/domains'
+ _obj_cls = PagesDomain
+
+
class ProjectBoardList(SaveMixin, ObjectDeleteMixin, RESTObject):
pass
@@ -1249,6 +1258,18 @@ class ProjectNotificationSettingsManager(NotificationSettingsManager):
_from_parent_attrs = {'project_id': 'id'}
+class ProjectPagesDomain(SaveMixin, ObjectDeleteMixin, RESTObject):
+ _id_attr = 'domain'
+
+
+class ProjectPagesDomainManager(CRUDMixin, RESTManager):
+ _path = '/projects/%(project_id)s/pages/domains'
+ _obj_cls = ProjectPagesDomain
+ _from_parent_attrs = {'project_id': 'id'}
+ _create_attrs = (('domain', ), ('certificate', 'key'))
+ _update_attrs = (tuple(), ('certificate', 'key'))
+
+
class ProjectTag(ObjectDeleteMixin, RESTObject):
_id_attr = 'name'
_short_print_attr = 'name'
@@ -2161,6 +2182,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
('milestones', 'ProjectMilestoneManager'),
('notes', 'ProjectNoteManager'),
('notificationsettings', 'ProjectNotificationSettingsManager'),
+ ('pagesdomains', 'ProjectPagesDomainManager'),
('pipelines', 'ProjectPipelineManager'),
('protectedbranches', 'ProjectProtectedBranchManager'),
('runners', 'ProjectRunnerManager'),
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index 66493cb..1b86913 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -285,6 +285,15 @@ assert(len(l1) == 1)
assert(len(l2) == 1)
assert(l1[0].id != l2[0].id)
+# project pages domains
+domain = admin_project.pagesdomains.create({'domain': 'foo.domain.com'})
+assert(len(admin_project.pagesdomains.list()) == 1)
+assert(len(gl.pagesdomains.list()) == 1)
+domain = admin_project.pagesdomains.get('foo.domain.com')
+assert(domain.domain == 'foo.domain.com')
+domain.delete()
+assert(len(admin_project.pagesdomains.list()) == 0)
+
# project content (files)
admin_project.files.create({'file_path': 'README',
'branch': 'master',