summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2017-11-01 12:13:46 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2017-11-01 12:13:46 +0100
commit5082879dcfbe322bb16e4c2387c25ec4f4407cb1 (patch)
treebcb261cefc6b4c5708a07989e16bfe4275027da3
parent4744200d982f7fc556d1202330b218850bd232d6 (diff)
downloadgitlab-5082879dcfbe322bb16e4c2387c25ec4f4407cb1.tar.gz
Add support for wiki pages
-rw-r--r--docs/api-objects.rst1
-rw-r--r--docs/gl_objects/wikis.py21
-rw-r--r--docs/gl_objects/wikis.rst46
-rw-r--r--gitlab/v4/objects.py15
-rw-r--r--tools/python_test_v4.py12
5 files changed, 95 insertions, 0 deletions
diff --git a/docs/api-objects.rst b/docs/api-objects.rst
index 4b40ce1..e549924 100644
--- a/docs/api-objects.rst
+++ b/docs/api-objects.rst
@@ -30,3 +30,4 @@ API examples
gl_objects/todos
gl_objects/users
gl_objects/sidekiq
+ gl_objects/wikis
diff --git a/docs/gl_objects/wikis.py b/docs/gl_objects/wikis.py
new file mode 100644
index 0000000..0c92fe6
--- /dev/null
+++ b/docs/gl_objects/wikis.py
@@ -0,0 +1,21 @@
+# list
+pages = project.wikis.list()
+# end list
+
+# get
+page = project.wikis.get(page_slug)
+# end get
+
+# create
+page = project.wikis.create({'title': 'Wiki Page 1',
+ 'content': open(a_file).read()})
+# end create
+
+# update
+page.content = 'My new content'
+page.save()
+# end update
+
+# delete
+page.delete()
+# end delete
diff --git a/docs/gl_objects/wikis.rst b/docs/gl_objects/wikis.rst
new file mode 100644
index 0000000..0934654
--- /dev/null
+++ b/docs/gl_objects/wikis.rst
@@ -0,0 +1,46 @@
+##########
+Wiki pages
+##########
+
+
+References
+==========
+
+* v4 API:
+
+ + :class:`gitlab.v4.objects.ProjectWiki`
+ + :class:`gitlab.v4.objects.ProjectWikiManager`
+ + :attr:`gitlab.v4.objects.Project.wikis`
+
+Examples
+--------
+
+Get the list of wiki pages for a project:
+
+.. literalinclude:: wikis.py
+ :start-after: # list
+ :end-before: # end list
+
+Get a single wiki page:
+
+.. literalinclude:: wikis.py
+ :start-after: # get
+ :end-before: # end get
+
+Create a wiki page:
+
+.. literalinclude:: wikis.py
+ :start-after: # create
+ :end-before: # end create
+
+Update a wiki page:
+
+.. literalinclude:: wikis.py
+ :start-after: # update
+ :end-before: # end update
+
+Delete a wiki page:
+
+.. literalinclude:: wikis.py
+ :start-after: # delete
+ :end-before: # end delete
diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py
index 992259d..a57adff 100644
--- a/gitlab/v4/objects.py
+++ b/gitlab/v4/objects.py
@@ -1947,6 +1947,20 @@ class ProjectRunnerManager(NoUpdateMixin, RESTManager):
_create_attrs = (('runner_id', ), tuple())
+class ProjectWiki(SaveMixin, ObjectDeleteMixin, RESTObject):
+ _id_attr = 'slug'
+ _short_print_attr = 'slug'
+
+
+class ProjectWikiManager(CRUDMixin, RESTManager):
+ _path = '/projects/%(project_id)s/wikis'
+ _obj_cls = ProjectWiki
+ _from_parent_attrs = {'project_id': 'id'}
+ _create_attrs = (('title', 'content'), ('format', ))
+ _update_attrs = (tuple(), ('title', 'content', 'format'))
+ _list_filters = ('with_content', )
+
+
class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
_short_print_attr = 'path'
_managers = (
@@ -1978,6 +1992,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
('users', 'ProjectUserManager'),
('triggers', 'ProjectTriggerManager'),
('variables', 'ProjectVariableManager'),
+ ('wikis', 'ProjectWikiManager'),
)
@cli.register_custom_action('Project', tuple(), ('path', 'ref'))
diff --git a/tools/python_test_v4.py b/tools/python_test_v4.py
index 8a8be68..0b1793a 100644
--- a/tools/python_test_v4.py
+++ b/tools/python_test_v4.py
@@ -496,6 +496,18 @@ assert(admin_project.star_count == 0)
#lists = board.lists.list()
#assert(len(lists) == begin_size - 1)
+# project wiki
+wiki_content = 'Wiki page content'
+wp = admin_project.wikis.create({'title': 'wikipage', 'content': wiki_content})
+assert(len(admin_project.wikis.list()) == 1)
+wp = admin_project.wikis.get(wp.slug)
+assert(wp.content == wiki_content)
+# update and delete seem broken
+# wp.content = 'new content'
+# wp.save()
+# wp.delete()
+# assert(len(admin_project.wikis.list()) == 0)
+
# namespaces
ns = gl.namespaces.list(all=True)
assert(len(ns) != 0)