diff options
author | Nejc Habjan <nejc.habjan@siemens.com> | 2022-07-23 14:27:02 +0200 |
---|---|---|
committer | John Villalovos <john@sodarock.com> | 2022-07-23 07:55:59 -0700 |
commit | a4280514546cc6e39da91d1671921b74b56c3283 (patch) | |
tree | 9cbe914e0d3f814698bd8a26da4b95b0c423f325 /gitlab/v4/objects/integrations.py | |
parent | c6dd57c56e92abb6184badf4708f5f5e65c6d582 (diff) | |
download | gitlab-a4280514546cc6e39da91d1671921b74b56c3283.tar.gz |
refactor: migrate services to integrations
Diffstat (limited to 'gitlab/v4/objects/integrations.py')
-rw-r--r-- | gitlab/v4/objects/integrations.py | 293 |
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)) |