summaryrefslogtreecommitdiff
path: root/gitlab/v4/objects/integrations.py
diff options
context:
space:
mode:
authorNejc Habjan <nejc.habjan@siemens.com>2022-07-23 14:27:02 +0200
committerJohn Villalovos <john@sodarock.com>2022-07-23 07:55:59 -0700
commita4280514546cc6e39da91d1671921b74b56c3283 (patch)
tree9cbe914e0d3f814698bd8a26da4b95b0c423f325 /gitlab/v4/objects/integrations.py
parentc6dd57c56e92abb6184badf4708f5f5e65c6d582 (diff)
downloadgitlab-a4280514546cc6e39da91d1671921b74b56c3283.tar.gz
refactor: migrate services to integrations
Diffstat (limited to 'gitlab/v4/objects/integrations.py')
-rw-r--r--gitlab/v4/objects/integrations.py293
1 files changed, 293 insertions, 0 deletions
diff --git a/gitlab/v4/objects/integrations.py b/gitlab/v4/objects/integrations.py
new file mode 100644
index 0000000..10123a0
--- /dev/null
+++ b/gitlab/v4/objects/integrations.py
@@ -0,0 +1,293 @@
+"""
+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(("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))