Files
netsec/env/lib/python3.12/site-packages/gitlab/v4/objects/integrations.py
2024-12-09 18:22:38 +09:00

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))