296 lines
9.0 KiB
Python
296 lines
9.0 KiB
Python
"""
|
|
GitLab API:
|
|
https://docs.gitlab.com/ee/api/integrations.html
|
|
"""
|
|
|
|
from typing import Any, cast, List, Union
|
|
|
|
from gitlab import cli
|
|
from gitlab.base import RESTManager, RESTObject
|
|
from gitlab.mixins import (
|
|
DeleteMixin,
|
|
GetMixin,
|
|
ListMixin,
|
|
ObjectDeleteMixin,
|
|
SaveMixin,
|
|
UpdateMixin,
|
|
)
|
|
|
|
__all__ = [
|
|
"ProjectIntegration",
|
|
"ProjectIntegrationManager",
|
|
"ProjectService",
|
|
"ProjectServiceManager",
|
|
]
|
|
|
|
|
|
class ProjectIntegration(SaveMixin, ObjectDeleteMixin, RESTObject):
|
|
_id_attr = "slug"
|
|
|
|
|
|
class ProjectIntegrationManager(
|
|
GetMixin, UpdateMixin, DeleteMixin, ListMixin, RESTManager
|
|
):
|
|
_path = "/projects/{project_id}/integrations"
|
|
_from_parent_attrs = {"project_id": "id"}
|
|
_obj_cls = ProjectIntegration
|
|
|
|
_service_attrs = {
|
|
"asana": (("api_key",), ("restrict_to_branch", "push_events")),
|
|
"assembla": (("token",), ("subdomain", "push_events")),
|
|
"bamboo": (
|
|
("bamboo_url", "build_key", "username", "password"),
|
|
("push_events",),
|
|
),
|
|
"bugzilla": (
|
|
("new_issue_url", "issues_url", "project_url"),
|
|
("description", "title", "push_events"),
|
|
),
|
|
"buildkite": (
|
|
("token", "project_url"),
|
|
("enable_ssl_verification", "push_events"),
|
|
),
|
|
"campfire": (("token",), ("subdomain", "room", "push_events")),
|
|
"circuit": (
|
|
("webhook",),
|
|
(
|
|
"notify_only_broken_pipelines",
|
|
"branches_to_be_notified",
|
|
"push_events",
|
|
"issues_events",
|
|
"confidential_issues_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
"note_events",
|
|
"confidential_note_events",
|
|
"pipeline_events",
|
|
"wiki_page_events",
|
|
),
|
|
),
|
|
"custom-issue-tracker": (
|
|
("new_issue_url", "issues_url", "project_url"),
|
|
("description", "title", "push_events"),
|
|
),
|
|
"drone-ci": (
|
|
("token", "drone_url"),
|
|
(
|
|
"enable_ssl_verification",
|
|
"push_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
),
|
|
),
|
|
"emails-on-push": (
|
|
("recipients",),
|
|
(
|
|
"disable_diffs",
|
|
"send_from_committer_email",
|
|
"push_events",
|
|
"tag_push_events",
|
|
"branches_to_be_notified",
|
|
),
|
|
),
|
|
"pipelines-email": (
|
|
("recipients",),
|
|
(
|
|
"add_pusher",
|
|
"notify_only_broken_builds",
|
|
"branches_to_be_notified",
|
|
"notify_only_default_branch",
|
|
"pipeline_events",
|
|
),
|
|
),
|
|
"external-wiki": (("external_wiki_url",), ()),
|
|
"flowdock": (("token",), ("push_events",)),
|
|
"github": (("token", "repository_url"), ("static_context",)),
|
|
"hangouts-chat": (
|
|
("webhook",),
|
|
(
|
|
"notify_only_broken_pipelines",
|
|
"notify_only_default_branch",
|
|
"branches_to_be_notified",
|
|
"push_events",
|
|
"issues_events",
|
|
"confidential_issues_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
"note_events",
|
|
"confidential_note_events",
|
|
"pipeline_events",
|
|
"wiki_page_events",
|
|
),
|
|
),
|
|
"hipchat": (
|
|
("token",),
|
|
(
|
|
"color",
|
|
"notify",
|
|
"room",
|
|
"api_version",
|
|
"server",
|
|
"push_events",
|
|
"issues_events",
|
|
"confidential_issues_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
"note_events",
|
|
"confidential_note_events",
|
|
"pipeline_events",
|
|
),
|
|
),
|
|
"irker": (
|
|
("recipients",),
|
|
(
|
|
"default_irc_uri",
|
|
"server_port",
|
|
"server_host",
|
|
"colorize_messages",
|
|
"push_events",
|
|
),
|
|
),
|
|
"jira": (
|
|
(
|
|
"url",
|
|
"username",
|
|
"password",
|
|
),
|
|
(
|
|
"api_url",
|
|
"active",
|
|
"jira_issue_transition_id",
|
|
"commit_events",
|
|
"merge_requests_events",
|
|
"comment_on_event_enabled",
|
|
),
|
|
),
|
|
"slack-slash-commands": (("token",), ()),
|
|
"mattermost-slash-commands": (("token",), ("username",)),
|
|
"packagist": (
|
|
("username", "token"),
|
|
("server", "push_events", "merge_requests_events", "tag_push_events"),
|
|
),
|
|
"mattermost": (
|
|
("webhook",),
|
|
(
|
|
"username",
|
|
"channel",
|
|
"notify_only_broken_pipelines",
|
|
"notify_only_default_branch",
|
|
"branches_to_be_notified",
|
|
"push_events",
|
|
"issues_events",
|
|
"confidential_issues_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
"note_events",
|
|
"confidential_note_events",
|
|
"pipeline_events",
|
|
"wiki_page_events",
|
|
"push_channel",
|
|
"issue_channel",
|
|
"confidential_issue_channel",
|
|
"merge_request_channel",
|
|
"note_channel",
|
|
"confidential_note_channel",
|
|
"tag_push_channel",
|
|
"pipeline_channel",
|
|
"wiki_page_channel",
|
|
),
|
|
),
|
|
"pivotaltracker": (("token",), ("restrict_to_branch", "push_events")),
|
|
"prometheus": (("api_url",), ()),
|
|
"pushover": (
|
|
("api_key", "user_key", "priority"),
|
|
("device", "sound", "push_events"),
|
|
),
|
|
"redmine": (
|
|
("new_issue_url", "project_url", "issues_url"),
|
|
("description", "push_events"),
|
|
),
|
|
"slack": (
|
|
("webhook",),
|
|
(
|
|
"username",
|
|
"channel",
|
|
"notify_only_broken_pipelines",
|
|
"notify_only_default_branch",
|
|
"branches_to_be_notified",
|
|
"commit_events",
|
|
"confidential_issue_channel",
|
|
"confidential_issues_events",
|
|
"confidential_note_channel",
|
|
"confidential_note_events",
|
|
"deployment_channel",
|
|
"deployment_events",
|
|
"issue_channel",
|
|
"issues_events",
|
|
"job_events",
|
|
"merge_request_channel",
|
|
"merge_requests_events",
|
|
"note_channel",
|
|
"note_events",
|
|
"pipeline_channel",
|
|
"pipeline_events",
|
|
"push_channel",
|
|
"push_events",
|
|
"tag_push_channel",
|
|
"tag_push_events",
|
|
"wiki_page_channel",
|
|
"wiki_page_events",
|
|
),
|
|
),
|
|
"microsoft-teams": (
|
|
("webhook",),
|
|
(
|
|
"notify_only_broken_pipelines",
|
|
"notify_only_default_branch",
|
|
"branches_to_be_notified",
|
|
"push_events",
|
|
"issues_events",
|
|
"confidential_issues_events",
|
|
"merge_requests_events",
|
|
"tag_push_events",
|
|
"note_events",
|
|
"confidential_note_events",
|
|
"pipeline_events",
|
|
"wiki_page_events",
|
|
),
|
|
),
|
|
"teamcity": (
|
|
("teamcity_url", "build_type", "username", "password"),
|
|
("push_events",),
|
|
),
|
|
"jenkins": (("jenkins_url", "project_name"), ("username", "password")),
|
|
"mock-ci": (("mock_service_url",), ()),
|
|
"youtrack": (("issues_url", "project_url"), ("description", "push_events")),
|
|
}
|
|
|
|
def get(
|
|
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
|
|
) -> ProjectIntegration:
|
|
return cast(ProjectIntegration, super().get(id=id, lazy=lazy, **kwargs))
|
|
|
|
@cli.register_custom_action(
|
|
cls_names=("ProjectIntegrationManager", "ProjectServiceManager")
|
|
)
|
|
def available(self) -> List[str]:
|
|
"""List the services known by python-gitlab.
|
|
|
|
Returns:
|
|
The list of service code names.
|
|
"""
|
|
return list(self._service_attrs.keys())
|
|
|
|
|
|
class ProjectService(ProjectIntegration):
|
|
pass
|
|
|
|
|
|
class ProjectServiceManager(ProjectIntegrationManager):
|
|
_obj_cls = ProjectService
|
|
|
|
def get(
|
|
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
|
|
) -> ProjectService:
|
|
return cast(ProjectService, super().get(id=id, lazy=lazy, **kwargs))
|