From 2fbf683c4c9562df92b2a016b770ffb005e17407 Mon Sep 17 00:00:00 2001 From: Martyn Bristow Date: Tue, 25 Oct 2022 23:01:12 +0100 Subject: [PATCH 1/5] Jira: Add functionality to get comments on an issue Implement: - issue_get_comments(issue_id) - issue_get_comment(issue_id, comment_id) - issues_get_comments_by_id(comment_id, [comment_id ...]) --- atlassian/jira.py | 41 ++++++++- docs/jira.rst | 8 ++ examples/jira/jira_get_comment.py | 25 ++++++ .../jira/rest/api/2/comment/list/POST | 84 +++++++++++++++++++ .../api/2/issue/FOO-123/comment/10000/GET | 38 +++++++++ .../jira/rest/api/2/issue/FOO-123/comment/GET | 83 ++++++++++++++++++ tests/test_jira.py | 17 ++++ 7 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 examples/jira/jira_get_comment.py create mode 100644 tests/responses/jira/rest/api/2/comment/list/POST create mode 100644 tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET create mode 100644 tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET diff --git a/atlassian/jira.py b/atlassian/jira.py index c2a9ef003..a0b04c9fb 100644 --- a/atlassian/jira.py +++ b/atlassian/jira.py @@ -353,11 +353,50 @@ def get_cluster_zdu_state(self): url = self.resource_url("cluster/zdu/state") return self.get(url) + # Issue Comments + def issue_get_comments(self, issue_id): + """ + Get Comments on an Issue + :param issue_id: Issue ID + :raises: requests.exceptions.HTTPError + :return: + """ + base_url = self.resource_url("issue") + url = "{base_url}/{issue_id}/comment".format(base_url=base_url, issue_id=issue_id) + return self.get(url) + + def issues_get_comments_by_id(self, *args): + """ + Get Comments on Multiple Issues + :param *args: int Issue ID's + :raises: requests.exceptions.HTTPError + :return: + """ + if not all([isinstance(i, int) for i in args]): + raise TypeError('Arguments to `issues_get_comments_by_id` must be int') + data = {'ids': list(args)} + base_url = self.resource_url("comment") + url = "{base_url}/list".format(base_url=base_url) + return self.post(url, data=data) + + def issue_get_comment(self, issue_id, comment_id): + """ + Get a single comment + :param issue_id: int or str + :param comment_id: int + :raises: requests.exceptions.HTTPError + :return: + """ + base_url = self.resource_url("issue") + url = "{base_url}/{issue_id}/comment/{comment_id}".format(base_url=base_url, + issue_id=issue_id, + comment_id=comment_id) + return self.get(url) + """ Comments properties Reference: https://docs.atlassian.com/software/jira/docs/api/REST/8.5.0/#api/2/comment/{commentId}/properties """ - def get_comment_properties_keys(self, comment_id): """ Returns the keys of all properties for the comment identified by the key or by the id. diff --git a/docs/jira.rst b/docs/jira.rst index a0431b92b..2c0a893bf 100644 --- a/docs/jira.rst +++ b/docs/jira.rst @@ -261,6 +261,14 @@ Manage issues # Restore an issue issue_restore(issue_id_or_key) + # Issue Comments + jira.issue_get_comments(issue_id_or_key) + + jira.issue_get_comment(issue_id_or_key, comment_id) + + jira.issues_get_comments_by_id(comment_id, [comment_id...]) + + Epic Issues ------------- diff --git a/examples/jira/jira_get_comment.py b/examples/jira/jira_get_comment.py new file mode 100644 index 000000000..15c91ff48 --- /dev/null +++ b/examples/jira/jira_get_comment.py @@ -0,0 +1,25 @@ +# coding=utf-8 +from atlassian import Jira + +""" Get Comments on an Issue +""" + + +def main(): + jira = Jira(url="https://atlassian-python.atlassian.net/", username="martyn.bristow@gmail.com", password="...") + + print("\n*Get Comments on INT-1*") + comments = jira.issue_get_comments("INT-1") + print(comments) + + print("\n*Get a single comment on INT-1*") + comments = jira.issue_get_comment(10000, 10001) + print(comments) + + print("\n*Get a set of comments*") + comments = jira.issues_get_comments_by_id(10000, 10002) + print(comments) + + +if __name__ == "__main__": + main() diff --git a/tests/responses/jira/rest/api/2/comment/list/POST b/tests/responses/jira/rest/api/2/comment/list/POST new file mode 100644 index 000000000..48bca256a --- /dev/null +++ b/tests/responses/jira/rest/api/2/comment/list/POST @@ -0,0 +1,84 @@ +responses["fields=*all"] = { + "maxResults": 1048576, + "startAt": 0, + "total": 2, + "isLast": true, + "values": [ + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true + }, + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", + "id": "10001", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "body": "Second Comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "created": "2022-10-25T20:21:40.840+0100", + "updated": "2022-10-25T20:21:40.840+0100", + "jsdPublic": true + } + ] +} \ No newline at end of file diff --git a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET new file mode 100644 index 000000000..2abbc17d1 --- /dev/null +++ b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET @@ -0,0 +1,38 @@ +responses[None] = { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true +} \ No newline at end of file diff --git a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET new file mode 100644 index 000000000..d55ba4136 --- /dev/null +++ b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET @@ -0,0 +1,83 @@ +responses[None] = { +"startAt": 0, + "maxResults": 1048576, + "total": 2, + "comments": [ + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true + }, + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", + "id": "10001", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "body": "Second Comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian" + }, + "created": "2022-10-25T20:21:40.840+0100", + "updated": "2022-10-25T20:21:40.840+0100", + "jsdPublic": true + } + ] +} \ No newline at end of file diff --git a/tests/test_jira.py b/tests/test_jira.py index d174f1f25..c6a336bee 100644 --- a/tests/test_jira.py +++ b/tests/test_jira.py @@ -27,3 +27,20 @@ def test_get_epic_issues(self): def test_get_epic_issues_not_found(self): with self.assertRaises(HTTPError): self.jira.epic_issues("BAR-11") + + def test_get_issue_comments(self): + """Can retrieve issue comments""" + resp = self.jira.issue_get_comments("FOO-123") + self.assertEqual(len(resp['comments']), 2) + self.assertEqual(resp['total'], 2) + + def test_get_issue_comment(self): + """Can retrieve issue comments""" + resp = self.jira.issue_get_comment("FOO-123", 10000) + self.assertEqual(resp["body"], "Some Text comment") + self.assertEqual(resp["id"], '10000') + + def test_get_issue_comment_not_found(self): + """Get comment on issue by id, but not found""" + with self.assertRaises(HTTPError): + self.jira.epic_issues("BAR-11") From 031b93aa35a6aff086b5aaebad83cb6cc85f3797 Mon Sep 17 00:00:00 2001 From: Martyn Bristow Date: Tue, 25 Oct 2022 23:14:28 +0100 Subject: [PATCH 2/5] Update quotes --- tests/test_jira.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_jira.py b/tests/test_jira.py index c6a336bee..fda90b59c 100644 --- a/tests/test_jira.py +++ b/tests/test_jira.py @@ -32,13 +32,13 @@ def test_get_issue_comments(self): """Can retrieve issue comments""" resp = self.jira.issue_get_comments("FOO-123") self.assertEqual(len(resp['comments']), 2) - self.assertEqual(resp['total'], 2) + self.assertEqual(resp["total"], 2) def test_get_issue_comment(self): """Can retrieve issue comments""" resp = self.jira.issue_get_comment("FOO-123", 10000) self.assertEqual(resp["body"], "Some Text comment") - self.assertEqual(resp["id"], '10000') + self.assertEqual(resp["id"], "10000") def test_get_issue_comment_not_found(self): """Get comment on issue by id, but not found""" From 687a28dca7187b343b487409309d86846278a5c4 Mon Sep 17 00:00:00 2001 From: Martyn Bristow Date: Tue, 25 Oct 2022 23:18:27 +0100 Subject: [PATCH 3/5] PR Comments --- examples/jira/jira_get_comment.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/jira/jira_get_comment.py b/examples/jira/jira_get_comment.py index 15c91ff48..5d9995968 100644 --- a/examples/jira/jira_get_comment.py +++ b/examples/jira/jira_get_comment.py @@ -1,8 +1,7 @@ # coding=utf-8 from atlassian import Jira -""" Get Comments on an Issue -""" +"""Example: Get Comments on a Jira Issue""" def main(): From 17a85c6c7cbb3087e55b2a9f0aaf15fafbe7a324 Mon Sep 17 00:00:00 2001 From: Martyn Bristow Date: Wed, 26 Oct 2022 00:15:29 +0100 Subject: [PATCH 4/5] Jira: Add functionality to get comments on an issue Implement: - issue_get_comments(issue_id) - issue_get_comment(issue_id, comment_id) - issues_get_comments_by_id(comment_id, [comment_id ...]) Signed-off-by: Martyn Bristow --- atlassian/jira.py | 11 +- .../jira/rest/api/2/comment/list/POST | 162 +++++++++--------- .../api/2/issue/FOO-123/comment/10000/GET | 70 ++++---- .../jira/rest/api/2/issue/FOO-123/comment/GET | 160 ++++++++--------- tests/test_jira.py | 2 +- 5 files changed, 203 insertions(+), 202 deletions(-) diff --git a/atlassian/jira.py b/atlassian/jira.py index a0b04c9fb..535068b1a 100644 --- a/atlassian/jira.py +++ b/atlassian/jira.py @@ -373,8 +373,8 @@ def issues_get_comments_by_id(self, *args): :return: """ if not all([isinstance(i, int) for i in args]): - raise TypeError('Arguments to `issues_get_comments_by_id` must be int') - data = {'ids': list(args)} + raise TypeError("Arguments to `issues_get_comments_by_id` must be int") + data = {"ids": list(args)} base_url = self.resource_url("comment") url = "{base_url}/list".format(base_url=base_url) return self.post(url, data=data) @@ -388,15 +388,16 @@ def issue_get_comment(self, issue_id, comment_id): :return: """ base_url = self.resource_url("issue") - url = "{base_url}/{issue_id}/comment/{comment_id}".format(base_url=base_url, - issue_id=issue_id, - comment_id=comment_id) + url = "{base_url}/{issue_id}/comment/{comment_id}".format( + base_url=base_url, issue_id=issue_id, comment_id=comment_id + ) return self.get(url) """ Comments properties Reference: https://docs.atlassian.com/software/jira/docs/api/REST/8.5.0/#api/2/comment/{commentId}/properties """ + def get_comment_properties_keys(self, comment_id): """ Returns the keys of all properties for the comment identified by the key or by the id. diff --git a/tests/responses/jira/rest/api/2/comment/list/POST b/tests/responses/jira/rest/api/2/comment/list/POST index 48bca256a..6c2cd6b65 100644 --- a/tests/responses/jira/rest/api/2/comment/list/POST +++ b/tests/responses/jira/rest/api/2/comment/list/POST @@ -1,84 +1,84 @@ responses["fields=*all"] = { - "maxResults": 1048576, - "startAt": 0, - "total": 2, - "isLast": true, - "values": [ - { - "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", - "id": "10000", - "author": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + "maxResults": 1048576, + "startAt": 0, + "total": 2, + "isLast": true, + "values": [ + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true, }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "body": "Some Text comment", - "updateAuthor": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", + "id": "10001", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "body": "Second Comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "created": "2022-10-25T20:21:40.840+0100", + "updated": "2022-10-25T20:21:40.840+0100", + "jsdPublic": true, }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "created": "2022-10-25T20:21:33.277+0100", - "updated": "2022-10-25T20:21:33.277+0100", - "jsdPublic": true - }, - { - "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", - "id": "10001", - "author": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" - }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "body": "Second Comment", - "updateAuthor": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" - }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "created": "2022-10-25T20:21:40.840+0100", - "updated": "2022-10-25T20:21:40.840+0100", - "jsdPublic": true - } - ] -} \ No newline at end of file + ], +} diff --git a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET index 2abbc17d1..8de3f9a29 100644 --- a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET +++ b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/10000/GET @@ -1,38 +1,38 @@ responses[None] = { - "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", - "id": "10000", - "author": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "body": "Some Text comment", - "updateAuthor": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "created": "2022-10-25T20:21:33.277+0100", - "updated": "2022-10-25T20:21:33.277+0100", - "jsdPublic": true -} \ No newline at end of file + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true, +} diff --git a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET index d55ba4136..7264161ac 100644 --- a/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET +++ b/tests/responses/jira/rest/api/2/issue/FOO-123/comment/GET @@ -1,83 +1,83 @@ responses[None] = { -"startAt": 0, - "maxResults": 1048576, - "total": 2, - "comments": [ - { - "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", - "id": "10000", - "author": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + "startAt": 0, + "maxResults": 1048576, + "total": 2, + "comments": [ + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10000", + "id": "10000", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "body": "Some Text comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "created": "2022-10-25T20:21:33.277+0100", + "updated": "2022-10-25T20:21:33.277+0100", + "jsdPublic": true, }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "body": "Some Text comment", - "updateAuthor": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" + { + "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", + "id": "10001", + "author": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "body": "Second Comment", + "updateAuthor": { + "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", + "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", + "emailAddress": "martyn.bristow@gmail.com", + "avatarUrls": { + "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", + }, + "displayName": "Martyn Bristow", + "active": true, + "timeZone": "Europe/London", + "accountType": "atlassian", + }, + "created": "2022-10-25T20:21:40.840+0100", + "updated": "2022-10-25T20:21:40.840+0100", + "jsdPublic": true, }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "created": "2022-10-25T20:21:33.277+0100", - "updated": "2022-10-25T20:21:33.277+0100", - "jsdPublic": true - }, - { - "self": "https://atlassian-python.atlassian.net/rest/api/2/issue/10000/comment/10001", - "id": "10001", - "author": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" - }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "body": "Second Comment", - "updateAuthor": { - "self": "https://atlassian-python.atlassian.net/rest/api/2/user?accountId=557058%3Adc675182-d776-46f5-90fb-fe5637b71397", - "accountId": "557058:dc675182-d776-46f5-90fb-fe5637b71397", - "emailAddress": "martyn.bristow@gmail.com", - "avatarUrls": { - "48x48": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "24x24": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "16x16": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png", - "32x32": "https://secure.gravatar.com/avatar/6f1cc3b97033de549f9d156d0eea4a34?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FMB-4.png" - }, - "displayName": "Martyn Bristow", - "active": true, - "timeZone": "Europe/London", - "accountType": "atlassian" - }, - "created": "2022-10-25T20:21:40.840+0100", - "updated": "2022-10-25T20:21:40.840+0100", - "jsdPublic": true - } - ] -} \ No newline at end of file + ], +} diff --git a/tests/test_jira.py b/tests/test_jira.py index fda90b59c..f5dae966a 100644 --- a/tests/test_jira.py +++ b/tests/test_jira.py @@ -31,7 +31,7 @@ def test_get_epic_issues_not_found(self): def test_get_issue_comments(self): """Can retrieve issue comments""" resp = self.jira.issue_get_comments("FOO-123") - self.assertEqual(len(resp['comments']), 2) + self.assertEqual(len(resp["comments"]), 2) self.assertEqual(resp["total"], 2) def test_get_issue_comment(self): From 66e0ad31675e661f5ef84ca66ab4cf700ee234c7 Mon Sep 17 00:00:00 2001 From: Martyn Bristow Date: Wed, 26 Oct 2022 00:17:55 +0100 Subject: [PATCH 5/5] Jira: Add functionality to get comments on an issue Implement: - issue_get_comments(issue_id) - issue_get_comment(issue_id, comment_id) - issues_get_comments_by_id(comment_id, [comment_id ...]) Signed-off-by: Martyn Bristow --- examples/jira/jira_get_comment.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/jira/jira_get_comment.py b/examples/jira/jira_get_comment.py index 5d9995968..077ad6beb 100644 --- a/examples/jira/jira_get_comment.py +++ b/examples/jira/jira_get_comment.py @@ -1,8 +1,8 @@ +""" Example: Get Comments on a Jira Issue +""" # coding=utf-8 from atlassian import Jira -"""Example: Get Comments on a Jira Issue""" - def main(): jira = Jira(url="https://atlassian-python.atlassian.net/", username="martyn.bristow@gmail.com", password="...")