Skip to content

Commit 31c3c5e

Browse files
nejchJohnVillalovos
authored andcommitted
fix(snippets): allow passing list of files
1 parent b4951cd commit 31c3c5e

File tree

4 files changed

+43
-12
lines changed

4 files changed

+43
-12
lines changed

docs/gl_objects/projects.rst

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -566,8 +566,10 @@ Get the content of a snippet::
566566
Create a snippet::
567567

568568
snippet = project.snippets.create({'title': 'sample 1',
569-
'file_name': 'foo.py',
570-
'code': 'import gitlab',
569+
'files': [{
570+
'file_path': 'foo.py',
571+
'content': 'import gitlab'
572+
}],
571573
'visibility_level':
572574
gitlab.const.Visibility.PRIVATE})
573575

docs/gl_objects/snippets.rst

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ Get a snippet::
3939
Create a snippet::
4040

4141
snippet = gl.snippets.create({'title': 'snippet1',
42-
'file_name': 'snippet1.py',
43-
'content': open('snippet1.py').read()})
42+
'files': [{
43+
'file_path': 'foo.py',
44+
'content': 'import gitlab'
45+
}],
46+
})
4447

4548
Update the snippet attributes::
4649

gitlab/v4/objects/snippets.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,23 @@ class SnippetManager(CRUDMixin, RESTManager):
7070
_path = "/snippets"
7171
_obj_cls = Snippet
7272
_create_attrs = RequiredOptional(
73-
required=("title", "file_name", "content"), optional=("lifetime", "visibility")
73+
required=("title",),
74+
exclusive=("files", "file_name"),
75+
optional=(
76+
"description",
77+
"content",
78+
"visibility",
79+
),
7480
)
7581
_update_attrs = RequiredOptional(
76-
optional=("title", "file_name", "content", "visibility")
82+
optional=(
83+
"title",
84+
"files",
85+
"file_name",
86+
"content",
87+
"visibility",
88+
"description",
89+
),
7790
)
7891

7992
@cli.register_custom_action("SnippetManager")
@@ -151,11 +164,22 @@ class ProjectSnippetManager(CRUDMixin, RESTManager):
151164
_obj_cls = ProjectSnippet
152165
_from_parent_attrs = {"project_id": "id"}
153166
_create_attrs = RequiredOptional(
154-
required=("title", "file_name", "content", "visibility"),
155-
optional=("description",),
167+
required=("title", "visibility"),
168+
exclusive=("files", "file_name"),
169+
optional=(
170+
"description",
171+
"content",
172+
),
156173
)
157174
_update_attrs = RequiredOptional(
158-
optional=("title", "file_name", "content", "visibility", "description"),
175+
optional=(
176+
"title",
177+
"files",
178+
"file_name",
179+
"content",
180+
"visibility",
181+
"description",
182+
),
159183
)
160184

161185
def get(

tests/functional/api/test_snippets.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ def test_snippets(gl):
66
assert not snippets
77

88
snippet = gl.snippets.create(
9-
{"title": "snippet1", "file_name": "snippet1.py", "content": "import gitlab"}
9+
{
10+
"title": "snippet1",
11+
"files": [{"file_path": "snippet1.py", "content": "import gitlab"}],
12+
}
1013
)
1114
snippet = gl.snippets.get(snippet.id)
1215
snippet.title = "updated_title"
@@ -30,8 +33,7 @@ def test_project_snippets(project):
3033
snippet = project.snippets.create(
3134
{
3235
"title": "snip1",
33-
"file_name": "foo.py",
34-
"content": "initial content",
36+
"files": [{"file_path": "foo.py", "content": "initial content"}],
3537
"visibility": gitlab.const.VISIBILITY_PRIVATE,
3638
}
3739
)

0 commit comments

Comments
 (0)