From 87a3aa89cce7cc03bf989e086f2292821cd7f3bf Mon Sep 17 00:00:00 2001 From: Cheng-Lung Sung Date: Sat, 16 Oct 2021 09:07:18 +0800 Subject: [PATCH] Add ImageSet. Closes #339 --- linebot/models/messages.py | 26 +++++++++++++++++++++++++- tests/test_webhook.py | 19 ++++++++++++++++++- tests/text/webhook.json | 22 ++++++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/linebot/models/messages.py b/linebot/models/messages.py index 3bb13228e..9f14dfada 100644 --- a/linebot/models/messages.py +++ b/linebot/models/messages.py @@ -98,13 +98,16 @@ class ImageMessage(Message): The binary image data can be retrieved with the Content API. """ - def __init__(self, id=None, content_provider=None, **kwargs): + def __init__(self, id=None, content_provider=None, image_set=None, **kwargs): """__init__ method. :param str id: Message ID :param content_provider: ContentProvider object :type content_provider: :py:class:`linebot.models.messages.ContentProvider` + :param image_set: ImageSet object + :type image_set: + :py:class:`linebot.models.messages.ImageSet` :param kwargs: """ super(ImageMessage, self).__init__(id=id, **kwargs) @@ -113,6 +116,9 @@ def __init__(self, id=None, content_provider=None, **kwargs): self.content_provider = self.get_or_new_from_json_dict( content_provider, ContentProvider ) + self.image_set = self.get_or_new_from_json_dict( + image_set, ImageSet + ) class VideoMessage(Message): @@ -266,3 +272,21 @@ def __init__(self, type=None, original_content_url=None, preview_image_url=None, self.type = type self.original_content_url = original_content_url self.preview_image_url = preview_image_url + + +class ImageSet(Base): + """Image Set.""" + + def __init__(self, id=None, index=None, total=0, **kwargs): + """__init__ method. + + :param str id: Image set ID. + :param int index: Image number in a set of images sent simultaneously. + :param int total: Total number of images sent simultaneously. + :param kwargs: + """ + super(ImageSet, self).__init__(**kwargs) + + self.id = id + self.index = index + self.total = total diff --git a/tests/test_webhook.py b/tests/test_webhook.py index e9845ed0d..536bffcf4 100644 --- a/tests/test_webhook.py +++ b/tests/test_webhook.py @@ -81,7 +81,7 @@ def test_parse(self): self.assertEqual(events[0].message.type, 'text') self.assertEqual(events[0].message.text, 'Hello, world') - # MessageEvent, SourceRoom, TextMessage + # MessageEvent, SourceRoom, ImageMessage self.assertIsInstance(events[1], MessageEvent) self.assertEqual(events[1].reply_token, 'nHuyWiB7yP5Zw52FIkcQobQuGDXCTA') self.assertEqual(events[1].type, 'message') @@ -444,6 +444,23 @@ def test_parse(self): self.assertIsInstance(events[26].video_play_complete, VideoPlayComplete) self.assertEqual(events[26].video_play_complete.tracking_id, 'track_id') + # MessageEvent, SourceUser, ImageMessage with ImageSet + self.assertIsInstance(events[1], MessageEvent) + self.assertEqual(events[27].reply_token, 'fbf94e269485410da6b7e3a5e33283e8') + self.assertEqual(events[27].type, 'message') + self.assertEqual(events[27].mode, 'active') + self.assertEqual(events[27].timestamp, 1627356924722) + self.assertIsInstance(events[27].source, SourceUser) + self.assertEqual(events[27].source.type, 'user') + self.assertEqual(events[27].source.user_id, 'U206d25c2ea6bd87c17655609a1c37cb8') + self.assertIsInstance(events[27].message, ImageMessage) + self.assertEqual(events[27].message.id, '354718705033693861') + self.assertEqual(events[27].message.type, 'image') + self.assertEqual(events[27].message.content_provider.type, 'line') + self.assertEqual(events[27].message.image_set.id, 'E005D41A7288F41B655') + self.assertEqual(events[27].message.image_set.index, 2) + self.assertEqual(events[27].message.image_set.total, 2) + def test_parse_webhook_req_without_destination(self): body = """ { diff --git a/tests/text/webhook.json b/tests/text/webhook.json index ba60141d2..a793d01f0 100644 --- a/tests/text/webhook.json +++ b/tests/text/webhook.json @@ -427,6 +427,28 @@ "videoPlayComplete": { "trackingId": "track_id" } + }, + { + "type": "message", + "message": { + "type": "image", + "id": "354718705033693861", + "contentProvider": { + "type": "line" + }, + "imageSet": { + "id": "E005D41A7288F41B655", + "index": 2, + "total": 2 + } + }, + "timestamp": 1627356924722, + "source": { + "type": "user", + "userId": "U206d25c2ea6bd87c17655609a1c37cb8" + }, + "replyToken": "fbf94e269485410da6b7e3a5e33283e8", + "mode": "active" } ] }