Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitef2dbf7

Browse files
author
Gauvain Pocentek
committed
Add support for project services API
1 parentded5258 commitef2dbf7

File tree

4 files changed

+137
-1
lines changed

4 files changed

+137
-1
lines changed

‎docs/gl_objects/projects.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,3 +361,24 @@
361361
# notes delete
362362
note.delete()
363363
# end notes delete
364+
365+
# service get
366+
service=gl.project_services.get(service_name='asana',project_id=1)
367+
# or
368+
service=project.services.get(service_name='asana',project_id=1)
369+
# display it's status (enabled/disabled)
370+
print(service.active)
371+
# end service get
372+
373+
# service list
374+
services=gl.project_services.available()
375+
# end service list
376+
377+
# service update
378+
service.api_key='randomkey'
379+
service.save()
380+
# end service update
381+
382+
# service delete
383+
service.delete()
384+
# end service delete

‎docs/gl_objects/projects.rst

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ List the project hooks:
371371
:start-after: # hook list
372372
:end-before: # end hook list
373373

374-
Get a project hook
374+
Get a project hook:
375375

376376
..literalinclude::projects.py
377377
:start-after: # hook get
@@ -394,3 +394,35 @@ Delete a project hook:
394394
..literalinclude::projects.py
395395
:start-after: # hook delete
396396
:end-before: # end hook delete
397+
398+
Services
399+
--------
400+
401+
Use:class:`~gitlab.objects.ProjectService` objects to manipulate projects
402+
services. The:attr:`gitlab.Gitlab.project_services` and
403+
:attr:`Project.services <gitlab.objects.Projects.services>` manager objects
404+
provide helper functions.
405+
406+
Get a service:
407+
408+
..literalinclude::projects.py
409+
:start-after: # service get
410+
:end-before: # end service get
411+
412+
List the code names of available services (doesn't return objects):
413+
414+
..literalinclude::projects.py
415+
:start-after: # service list
416+
:end-before: # end service list
417+
418+
Configure and enable a service:
419+
420+
..literalinclude::projects.py
421+
:start-after: # service update
422+
:end-before: # end service update
423+
424+
Disable a service:
425+
426+
..literalinclude::projects.py
427+
:start-after: # service delete
428+
:end-before: # end service delete

‎gitlab/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ class Gitlab(object):
112112
project_labels (ProjectLabelManager): Manager for GitLab projects
113113
labels
114114
project_files (ProjectFileManager): Manager for GitLab projects files
115+
project_services (ProjectServiceManager): Manager for the GitLab
116+
projects services
115117
project_snippet_notes (ProjectSnippetNoteManager): Manager for GitLab
116118
note on snippets
117119
project_snippets (ProjectSnippetManager): Manager for GitLab projects
@@ -183,6 +185,7 @@ def __init__(self, url, private_token=None, email=None, password=None,
183185
self.project_milestones=ProjectMilestoneManager(self)
184186
self.project_labels=ProjectLabelManager(self)
185187
self.project_files=ProjectFileManager(self)
188+
self.project_services=ProjectServiceManager(self)
186189
self.project_snippet_notes=ProjectSnippetNoteManager(self)
187190
self.project_snippets=ProjectSnippetManager(self)
188191
self.project_triggers=ProjectTriggerManager(self)

‎gitlab/objects.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,9 @@ def _get_object(self, k, v):
287287
returnv
288288

289289
def_set_from_dict(self,data):
290+
ifnothasattr(data,'items'):
291+
return
292+
290293
fork,vindata.items():
291294
ifisinstance(v,list):
292295
self.__dict__[k]= []
@@ -1687,6 +1690,82 @@ class ProjectVariableManager(BaseManager):
16871690
obj_cls=ProjectVariable
16881691

16891692

1693+
classProjectService(GitlabObject):
1694+
_url='/projects/%(project_id)s/services/%(service_name)s'
1695+
canList=False
1696+
canCreate=False
1697+
_id_in_update_url=False
1698+
_id_in_delete_url=False
1699+
requiredUrlAttrs= ['project_id','service_name']
1700+
1701+
_service_attrs= {
1702+
'asana': (('api_key', ), ('restrict_to_branch', )),
1703+
'assembla': (('token', ), ('subdomain', )),
1704+
'bamboo': (('bamboo_url','build_key','username','password'),
1705+
tuple()),
1706+
'buildkite': (('token','project_url'), ('enable_ssl_verification', )),
1707+
'campfire': (('token', ), ('subdomain','room')),
1708+
'custom-issue-tracker': (('new_issue_url','issues_url',
1709+
'project_url'),
1710+
('description','title')),
1711+
'drone-ci': (('token','drone_url'), ('enable_ssl_verification', )),
1712+
'emails-on-push': (('recipients', ), ('disable_diffs',
1713+
'send_from_committer_email')),
1714+
'external-wiki': (('external_wiki_url', ),tuple()),
1715+
'flowdock': (('token', ),tuple()),
1716+
'gemnasium': (('api_key','token', ),tuple()),
1717+
'hipchat': (('token', ), ('color','notify','room','api_version',
1718+
'server')),
1719+
'irker': (('recipients', ), ('default_irc_uri','server_port',
1720+
'server_host','colorize_messages')),
1721+
'jira': (('new_issue_url','project_url','issues_url'),
1722+
('description','username','password')),
1723+
'pivotaltracker': (('token', ),tuple()),
1724+
'pushover': (('api_key','user_key','priority'), ('device','sound')),
1725+
'redmine': (('new_issue_url','project_url','issues_url'),
1726+
('description', )),
1727+
'slack': (('webhook', ), ('username','channel')),
1728+
'teamcity': (('teamcity_url','build_type','username','password'),
1729+
tuple())
1730+
}
1731+
1732+
def_data_for_gitlab(self,extra_parameters={},update=False,
1733+
as_json=True):
1734+
data= (super(ProjectService,self)
1735+
._data_for_gitlab(extra_parameters,update=update,
1736+
as_json=False))
1737+
missing= []
1738+
# Mandatory args
1739+
forattrinself._service_attrs[self.service_name][0]:
1740+
ifnothasattr(self,attr):
1741+
missing.append(attr)
1742+
else:
1743+
data[attr]=getattr(self,attr)
1744+
1745+
ifmissing:
1746+
raiseGitlabUpdateError('Missing attribute(s): %s'%
1747+
", ".join(missing))
1748+
1749+
# Optional args
1750+
forattrinself._service_attrs[self.service_name][1]:
1751+
ifhasattr(self,attr):
1752+
data[attr]=getattr(self,attr)
1753+
1754+
returnjson.dumps(data)
1755+
1756+
1757+
classProjectServiceManager(BaseManager):
1758+
obj_cls=ProjectService
1759+
1760+
defavailable(self,**kwargs):
1761+
"""List the services known by python-gitlab.
1762+
1763+
Returns:
1764+
list (str): The list of service code names.
1765+
"""
1766+
returnjson.dumps(ProjectService._service_attrs.keys())
1767+
1768+
16901769
classProject(GitlabObject):
16911770
_url='/projects'
16921771
_constructorTypes= {'owner':'User','namespace':'Group'}
@@ -1725,6 +1804,7 @@ class Project(GitlabObject):
17251804
('mergerequests',ProjectMergeRequestManager, [('project_id','id')]),
17261805
('milestones',ProjectMilestoneManager, [('project_id','id')]),
17271806
('notes',ProjectNoteManager, [('project_id','id')]),
1807+
('services',ProjectServiceManager, [('project_id','id')]),
17281808
('snippets',ProjectSnippetManager, [('project_id','id')]),
17291809
('tags',ProjectTagManager, [('project_id','id')]),
17301810
('triggers',ProjectTriggerManager, [('project_id','id')]),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp