Skip to content

Commit

Permalink
Add support for pagesdomains
Browse files Browse the repository at this point in the history
Closes #362
  • Loading branch information
Gauvain Pocentek committed Dec 31, 2017
1 parent 6923f11 commit c281d95
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/api-objects.rst
Expand Up @@ -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
Expand Down
65 changes: 65 additions & 0 deletions 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')
1 change: 1 addition & 0 deletions gitlab/__init__.py
Expand Up @@ -125,6 +125,7 @@ def __init__(self, url, private_token=None, oauth_token=None, email=None,
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':
Expand Down
22 changes: 22 additions & 0 deletions gitlab/v4/objects.py
Expand Up @@ -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

Expand Down Expand Up @@ -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'
Expand Down Expand Up @@ -2161,6 +2182,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
('milestones', 'ProjectMilestoneManager'),
('notes', 'ProjectNoteManager'),
('notificationsettings', 'ProjectNotificationSettingsManager'),
('pagesdomains', 'ProjectPagesDomainManager'),
('pipelines', 'ProjectPipelineManager'),
('protectedbranches', 'ProjectProtectedBranchManager'),
('runners', 'ProjectRunnerManager'),
Expand Down
9 changes: 9 additions & 0 deletions tools/python_test_v4.py
Expand Up @@ -285,6 +285,15 @@
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',
Expand Down

0 comments on commit c281d95

Please sign in to comment.