Skip to content

Commit 5082879

Browse files
author
Gauvain Pocentek
committed
Add support for wiki pages
1 parent 4744200 commit 5082879

File tree

5 files changed

+95
-0
lines changed

5 files changed

+95
-0
lines changed

docs/api-objects.rst

+1
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ API examples
3030
gl_objects/todos
3131
gl_objects/users
3232
gl_objects/sidekiq
33+
gl_objects/wikis

docs/gl_objects/wikis.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# list
2+
pages = project.wikis.list()
3+
# end list
4+
5+
# get
6+
page = project.wikis.get(page_slug)
7+
# end get
8+
9+
# create
10+
page = project.wikis.create({'title': 'Wiki Page 1',
11+
'content': open(a_file).read()})
12+
# end create
13+
14+
# update
15+
page.content = 'My new content'
16+
page.save()
17+
# end update
18+
19+
# delete
20+
page.delete()
21+
# end delete

docs/gl_objects/wikis.rst

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
##########
2+
Wiki pages
3+
##########
4+
5+
6+
References
7+
==========
8+
9+
* v4 API:
10+
11+
+ :class:`gitlab.v4.objects.ProjectWiki`
12+
+ :class:`gitlab.v4.objects.ProjectWikiManager`
13+
+ :attr:`gitlab.v4.objects.Project.wikis`
14+
15+
Examples
16+
--------
17+
18+
Get the list of wiki pages for a project:
19+
20+
.. literalinclude:: wikis.py
21+
:start-after: # list
22+
:end-before: # end list
23+
24+
Get a single wiki page:
25+
26+
.. literalinclude:: wikis.py
27+
:start-after: # get
28+
:end-before: # end get
29+
30+
Create a wiki page:
31+
32+
.. literalinclude:: wikis.py
33+
:start-after: # create
34+
:end-before: # end create
35+
36+
Update a wiki page:
37+
38+
.. literalinclude:: wikis.py
39+
:start-after: # update
40+
:end-before: # end update
41+
42+
Delete a wiki page:
43+
44+
.. literalinclude:: wikis.py
45+
:start-after: # delete
46+
:end-before: # end delete

gitlab/v4/objects.py

+15
Original file line numberDiff line numberDiff line change
@@ -1947,6 +1947,20 @@ class ProjectRunnerManager(NoUpdateMixin, RESTManager):
19471947
_create_attrs = (('runner_id', ), tuple())
19481948

19491949

1950+
class ProjectWiki(SaveMixin, ObjectDeleteMixin, RESTObject):
1951+
_id_attr = 'slug'
1952+
_short_print_attr = 'slug'
1953+
1954+
1955+
class ProjectWikiManager(CRUDMixin, RESTManager):
1956+
_path = '/projects/%(project_id)s/wikis'
1957+
_obj_cls = ProjectWiki
1958+
_from_parent_attrs = {'project_id': 'id'}
1959+
_create_attrs = (('title', 'content'), ('format', ))
1960+
_update_attrs = (tuple(), ('title', 'content', 'format'))
1961+
_list_filters = ('with_content', )
1962+
1963+
19501964
class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
19511965
_short_print_attr = 'path'
19521966
_managers = (
@@ -1978,6 +1992,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject):
19781992
('users', 'ProjectUserManager'),
19791993
('triggers', 'ProjectTriggerManager'),
19801994
('variables', 'ProjectVariableManager'),
1995+
('wikis', 'ProjectWikiManager'),
19811996
)
19821997

19831998
@cli.register_custom_action('Project', tuple(), ('path', 'ref'))

tools/python_test_v4.py

+12
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,18 @@
496496
#lists = board.lists.list()
497497
#assert(len(lists) == begin_size - 1)
498498

499+
# project wiki
500+
wiki_content = 'Wiki page content'
501+
wp = admin_project.wikis.create({'title': 'wikipage', 'content': wiki_content})
502+
assert(len(admin_project.wikis.list()) == 1)
503+
wp = admin_project.wikis.get(wp.slug)
504+
assert(wp.content == wiki_content)
505+
# update and delete seem broken
506+
# wp.content = 'new content'
507+
# wp.save()
508+
# wp.delete()
509+
# assert(len(admin_project.wikis.list()) == 0)
510+
499511
# namespaces
500512
ns = gl.namespaces.list(all=True)
501513
assert(len(ns) != 0)

0 commit comments

Comments
 (0)