diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-02-07 00:29:59 +0100 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2021-02-07 16:05:05 +0100 |
commit | a5a48ad08577be70c6ca511d3b4803624e5c2043 (patch) | |
tree | c1b80daad6dbb6ea3b1a3498d70016ef77abf6b3 /gitlab/v4/objects/services.py | |
parent | 9d6c1882d567116e16484f3e0a1036da4967c537 (diff) | |
download | gitlab-a5a48ad08577be70c6ca511d3b4803624e5c2043.tar.gz |
refactor(v4): split objects and managers per API resource
Diffstat (limited to 'gitlab/v4/objects/services.py')
-rw-r--r-- | gitlab/v4/objects/services.py | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/gitlab/v4/objects/services.py b/gitlab/v4/objects/services.py new file mode 100644 index 0000000..7667d2a --- /dev/null +++ b/gitlab/v4/objects/services.py @@ -0,0 +1,291 @@ +from gitlab import exceptions as exc +from gitlab.base import * # noqa +from gitlab.mixins import * # noqa + + +class ProjectService(SaveMixin, ObjectDeleteMixin, RESTObject): + pass + + +class ProjectServiceManager(GetMixin, UpdateMixin, DeleteMixin, ListMixin, RESTManager): + _path = "/projects/%(project_id)s/services" + _from_parent_attrs = {"project_id": "id"} + _obj_cls = ProjectService + + _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",), tuple()), + "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",), tuple()), + "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",), tuple()), + "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",), tuple()), + "youtrack": (("issues_url", "project_url"), ("description", "push_events")), + } + + def get(self, id, **kwargs): + """Retrieve a single object. + + Args: + id (int or str): ID of the object to retrieve + lazy (bool): If True, don't request the server, but create a + shallow object giving access to the managers. This is + useful if you want to avoid useless calls to the API. + **kwargs: Extra options to send to the server (e.g. sudo) + + Returns: + object: The generated RESTObject. + + Raises: + GitlabAuthenticationError: If authentication is not correct + GitlabGetError: If the server cannot perform the request + """ + obj = super(ProjectServiceManager, self).get(id, **kwargs) + obj.id = id + return obj + + def update(self, id=None, new_data=None, **kwargs): + """Update an object on the server. + + Args: + id: ID of the object to update (can be None if not required) + new_data: the update data for the object + **kwargs: Extra options to send to the server (e.g. sudo) + + Returns: + dict: The new object data (*not* a RESTObject) + + Raises: + GitlabAuthenticationError: If authentication is not correct + GitlabUpdateError: If the server cannot perform the request + """ + new_data = new_data or {} + super(ProjectServiceManager, self).update(id, new_data, **kwargs) + self.id = id + + @cli.register_custom_action("ProjectServiceManager") + def available(self, **kwargs): + """List the services known by python-gitlab. + + Returns: + list (str): The list of service code names. + """ + return list(self._service_attrs.keys()) |