Skip to content

Commit 5b08d2a

Browse files
author
Gauvain Pocentek
committed
Add support for project environments
1 parent ea089e0 commit 5b08d2a

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

docs/api-objects.rst

+2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ API objects manipulation
33
########################
44

55
.. toctree::
6+
:maxdepth: 1
67

78
gl_objects/branches
89
gl_objects/builds
910
gl_objects/commits
1011
gl_objects/deploy_keys
12+
gl_objects/environments
1113
gl_objects/groups
1214
gl_objects/issues
1315
gl_objects/namespaces

docs/gl_objects/environments.py

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# list
2+
environments = gl.project_environments.list(project_id=1)
3+
# or
4+
environments = project.environments.list()
5+
# end list
6+
7+
# get
8+
environment = gl.project_environments.get(environment_id, project_id=1)
9+
# or
10+
environment = project.environments.get(environment_id)
11+
# end get
12+
13+
# create
14+
environment = gl.project_environments.create({'name': 'production'},
15+
project_id=1)
16+
# or
17+
environment = project.environments.create({'name': 'production'})
18+
# end create
19+
20+
# update
21+
environment.external_url = 'http://foo.bar.com'
22+
environment.save()
23+
# end update
24+
25+
# delete
26+
environment = gl.project_environments.delete(environment_id, project_id=1)
27+
# or
28+
environment = project.environments.list(environment_id)
29+
# or
30+
environment.delete()
31+
# end delete

docs/gl_objects/environments.rst

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
############
2+
Environments
3+
############
4+
5+
Use :class:`~gitlab.objects.ProjectEnvironment` objects to manipulate
6+
environments for projects. The :attr:`gitlab.Gitlab.project_environments` and
7+
:attr:`Project.environments <gitlab.objects.Project.environments>` manager
8+
objects provide helper functions.
9+
10+
Examples
11+
--------
12+
13+
List environments for a project:
14+
15+
.. literalinclude:: environments.py
16+
:start-after: # list
17+
:end-before: # end list
18+
19+
Get a single environment:
20+
21+
.. literalinclude:: environments.py
22+
:start-after: # get
23+
:end-before: # end get
24+
25+
Create an environment for a project:
26+
27+
.. literalinclude:: environments.py
28+
:start-after: # create
29+
:end-before: # end create
30+
31+
Update an environment for a project:
32+
33+
.. literalinclude:: environments.py
34+
:start-after: # update
35+
:end-before: # end update
36+
37+
Delete an environment for a project:
38+
39+
.. literalinclude:: environments.py
40+
:start-after: # delete
41+
:end-before: # end delete

gitlab/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ class Gitlab(object):
8888
project_commit_statuses (ProjectCommitStatusManager): Manager for
8989
GitLab projects commits statuses
9090
project_keys (ProjectKeyManager): Manager for GitLab projects keys
91+
project_environments (ProjectEnvironmentManager): Manager for GitLab
92+
projects environments
9193
project_events (ProjectEventManager): Manager for GitLab projects
9294
events
9395
project_forks (ProjectForkManager): Manager for GitLab projects forks
@@ -165,6 +167,7 @@ def __init__(self, url, private_token=None, email=None, password=None,
165167
self.project_commit_comments = ProjectCommitCommentManager(self)
166168
self.project_commit_statuses = ProjectCommitStatusManager(self)
167169
self.project_keys = ProjectKeyManager(self)
170+
self.project_environments = ProjectEnvironmentManager(self)
168171
self.project_events = ProjectEventManager(self)
169172
self.project_forks = ProjectForkManager(self)
170173
self.project_hooks = ProjectHookManager(self)
@@ -417,6 +420,7 @@ def list(self, obj_class, **kwargs):
417420
", ".join(missing))
418421

419422
url = self._construct_url(id_=None, obj=obj_class, parameters=kwargs)
423+
print(url)
420424
headers = self._create_headers()
421425

422426
# Remove attributes that are used in url so that there is only

gitlab/objects.py

+14
Original file line numberDiff line numberDiff line change
@@ -1075,6 +1075,19 @@ class ProjectCommitManager(BaseManager):
10751075
obj_cls = ProjectCommit
10761076

10771077

1078+
class ProjectEnvironment(GitlabObject):
1079+
_url = '/projects/%(project_id)s/environments'
1080+
canGet = 'from_list'
1081+
requiredUrlAttrs = ['project_id']
1082+
requiredCreateAttrs = ['name']
1083+
optionalCreateAttrs = ['external_url']
1084+
optionalUpdateAttrs = ['name', 'external_url']
1085+
1086+
1087+
class ProjectEnvironmentManager(BaseManager):
1088+
obj_cls = ProjectEnvironment
1089+
1090+
10781091
class ProjectKey(GitlabObject):
10791092
_url = '/projects/%(project_id)s/keys'
10801093
canUpdate = False
@@ -1659,6 +1672,7 @@ class Project(GitlabObject):
16591672
[('project_id', 'id')]),
16601673
('commit_statuses', ProjectCommitStatusManager,
16611674
[('project_id', 'id')]),
1675+
('environments', ProjectEnvironmentManager, [('project_id', 'id')]),
16621676
('events', ProjectEventManager, [('project_id', 'id')]),
16631677
('files', ProjectFileManager, [('project_id', 'id')]),
16641678
('forks', ProjectForkManager, [('project_id', 'id')]),

0 commit comments

Comments
 (0)