diff --git a/gitlab/cli.py b/gitlab/cli.py index c7dacebd0..181cc564e 100644 --- a/gitlab/cli.py +++ b/gitlab/cli.py @@ -41,6 +41,8 @@ 'blob': {'required': ['id', 'project-id', 'filepath']}, 'builds': {'required': ['id', 'project-id']}}, + gitlab.ProjectIssue: {'subscribe': {'required': ['id', 'project-id']}, + 'unsubscribe': {'required': ['id', 'project-id']}}, gitlab.ProjectMergeRequest: { 'closes-issues': {'required': ['id', 'project-id']}, 'cancel': {'required': ['id', 'project-id']}, @@ -248,6 +250,20 @@ def do_project_build_retry(self, cls, gl, what, args): except Exception as e: _die("Impossible to retry project build (%s)" % str(e)) + def do_project_issue_subscribe(self, cls, gl, what, args): + try: + o = self.do_get(cls, gl, what, args) + o.subscribe() + except Exception as e: + _die("Impossible to subscribe to issue (%s)" % str(e)) + + def do_project_issue_unsubscribe(self, cls, gl, what, args): + try: + o = self.do_get(cls, gl, what, args) + o.unsubscribe() + except Exception as e: + _die("Impossible to subscribe to issue (%s)" % str(e)) + def do_project_merge_request_closesissues(self, cls, gl, what, args): try: o = self.do_get(cls, gl, what, args) diff --git a/gitlab/objects.py b/gitlab/objects.py index a865ad4dc..313ed964e 100644 --- a/gitlab/objects.py +++ b/gitlab/objects.py @@ -999,6 +999,12 @@ def Note(self, id=None, **kwargs): **kwargs) def subscribe(self, **kwargs): + """Subscribe to an issue. + + Raises: + GitlabConnectionError: If the server cannot be reached. + GitlabSubscribeError: If the subscription cannot be done + """ url = ('/projects/%(project_id)s/issues/%(issue_id)s/subscription' % {'project_id': self.project_id, 'issue_id': self.id}) @@ -1007,6 +1013,12 @@ def subscribe(self, **kwargs): self._set_from_dict(r.json()) def unsubscribe(self, **kwargs): + """Unsubscribe an issue. + + Raises: + GitlabConnectionError: If the server cannot be reached. + GitlabSubscribeError: If the unsubscription cannot be done + """ url = ('/projects/%(project_id)s/issues/%(issue_id)s/subscription' % {'project_id': self.project_id, 'issue_id': self.id})