Skip to content

Commit bcb9b03

Browse files
authored
Merge pull request #53 from Faultless/feat-add-list-voice-message-functionality
Add list voice messages functionality
2 parents f0bdf0e + 39c81a7 commit bcb9b03

File tree

4 files changed

+124
-3
lines changed

4 files changed

+124
-3
lines changed

examples/voice_messages_list.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/usr/bin/env python
2+
3+
import argparse
4+
import messagebird
5+
import sys
6+
import os
7+
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
8+
9+
10+
parser = argparse.ArgumentParser()
11+
parser.add_argument(
12+
'--accessKey', help='access key for MessageBird API', type=str, required=True)
13+
14+
args = vars(parser.parse_args())
15+
16+
try:
17+
client = messagebird.Client(args['accessKey'])
18+
19+
# Fetch Voice Messages List from a specific offset, and within a defined limit.
20+
voiceMessageList = client.voice_message_list(limit=10, offset=0)
21+
22+
# Print the object information.
23+
print('The following information was returned as a Voice Messages List object:')
24+
print(' Containing the following items:')
25+
print(voiceMessageList)
26+
for item in voiceMessageList.items:
27+
print(' {')
28+
print(' id : %s' % item.id)
29+
print(' href : %s' % item.href)
30+
print(' originator : %s' % item.originator)
31+
print(' body : %s' % item.body)
32+
print(' reference : %s' % item.reference)
33+
print(' language : %s' % item.language)
34+
print(' voice : %s' % item.voice)
35+
print(' repeat : %s' % item.repeat)
36+
print(' ifMachine : %s' % item.ifMachine)
37+
print(' scheduledDatetime : %s' % item.scheduledDatetime)
38+
print(' createdDatetime : %s' % item.createdDatetime)
39+
print(' recipients : %s\n' % item.recipients)
40+
print(' },')
41+
42+
43+
except messagebird.client.ErrorException as e:
44+
print('An error occured while requesting a Voice messages object list object:')
45+
46+
for error in e.errors:
47+
print(' code : %d' % error.code)
48+
print(' description : %s' % error.description)
49+
print(' parameter : %s\n' % error.parameter)

messagebird/client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from messagebird.message import Message, MessageList
1414
from messagebird.mms import MMS
1515
from messagebird.voice_webhook import VoiceWebhook, VoiceWebhookList
16-
from messagebird.voicemessage import VoiceMessage
16+
from messagebird.voicemessage import VoiceMessagesList, VoiceMessage
1717
from messagebird.lookup import Lookup
1818
from messagebird.verify import Verify
1919
from messagebird.http_client import HttpClient, ResponseFormat
@@ -250,6 +250,11 @@ def voice_message(self, id):
250250
"Retrieve the information of a specific voice message."
251251
return VoiceMessage().load(self.request('voicemessages/' + str(id)))
252252

253+
def voice_message_list(self, limit=10, offset=0):
254+
"Retrieve the information of a list of voice messages."
255+
query = self._format_query(limit, offset)
256+
return VoiceMessagesList().load(self.request('voicemessages?' + query, 'GET', None))
257+
253258
def voice_message_create(self, recipients, body, params=None):
254259
"""Create a new voice message."""
255260
if params is None:

messagebird/voicemessage.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,46 @@
11
from messagebird.base import Base
2+
from messagebird.base_list import BaseList
23
from messagebird.recipient import Recipient
34

45

6+
class VoiceMessagesList(BaseList):
7+
def __init__(self):
8+
super(VoiceMessagesList, self).__init__(VoiceMessage)
9+
self.perPage = None
10+
self.currentPage = None
11+
self.pageCount = None
12+
self._pagination = None
13+
14+
@property
15+
def data(self):
16+
return self.items
17+
18+
@property
19+
def pagination(self):
20+
return {
21+
"totalCount": self.totalCount,
22+
"pageCount": self.pageCount,
23+
"currentPage": self.currentPage,
24+
"perPage": self.perPage
25+
}
26+
27+
@pagination.setter
28+
def pagination(self, value):
29+
if isinstance(value, dict):
30+
self.totalCount = value['totalCount']
31+
self.pageCount = value['pageCount']
32+
self.currentPage = value['currentPage']
33+
self.perPage = value['perPage']
34+
self.limit = self.perPage * self.currentPage
35+
self.offset = self.perPage * (self.currentPage - 1)
36+
37+
@data.setter
38+
def data(self, value):
39+
if isinstance(value, list):
40+
self.count = len(value)
41+
self.items = value
42+
43+
544
class VoiceMessage(Base):
645
def __init__(self):
746
self.id = None

tests/test_voicemessage.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,40 @@ def test_voicemessage(self):
1515
http_client = Mock()
1616
http_client.request.return_value = '{"body": "Hello World","createdDatetime": "2015-01-05T16:11:24+00:00","href": "https://rest.messagebird.com/voicemessages/voicemessage-id","id": "voicemessage-id","ifMachine": "continue","language": "en-gb","originator": "MessageBird","recipients": {"items": [{"recipient": 31612345678,"status": "calling","statusDatetime": "2015-01-05T16:11:24+00:00"}],"totalCount": 1,"totalDeliveredCount": 0,"totalDeliveryFailedCount": 0,"totalSentCount": 1},"reference": null,"repeat": 1,"scheduledDatetime": null,"voice": "female"}'
1717

18-
voice_message = Client('', http_client).voice_message('voicemessage-id')
18+
voice_message = Client(
19+
'', http_client).voice_message('voicemessage-id')
1920

20-
http_client.request.assert_called_once_with('voicemessages/voicemessage-id', 'GET', None)
21+
http_client.request.assert_called_once_with(
22+
'voicemessages/voicemessage-id', 'GET', None)
2123

2224
self.assertEqual('voicemessage-id', voice_message.id)
2325

26+
def test_voicemessages_list(self):
27+
http_client = Mock()
28+
http_client.request.return_value = '{ "offset": 0, "limit": 10, "count": 2, "totalCount": 2, "links": { "first": "https://rest.messagebird.com/voicemessages/?offset=0&limit=30", "previous": null, "next": null, "last": "https://rest.messagebird.com/voicemessages/?offset=0&limit=30" }, "items": [ { "id": "12345678-9012-3456-7890-123456789012", "href": "https://rest.messagebird.com/voicemessages/12345678-9012-3456-7890-123456789012", "originator": null, "body": "This is a test message.", "reference": null, "language": "en-gb", "voice": "male", "repeat": 1, "ifMachine": "continue", "machineTimeout": 7000, "scheduledDatetime": null, "createdDatetime": "2020-02-04T15:15:30+00:00", "recipients": { "totalCount": 1, "totalSentCount": 1, "totalDeliveredCount": 1, "totalDeliveryFailedCount": 0, "items": [ { "recipient": 31612345678, "originator": null, "status": "answered", "statusDatetime": "2020-02-04T15:15:57+00:00" } ] } }, { "id": "12345678-9012-3456-7890-123456789013", "href": "https://rest.messagebird.com/voicemessages/12345678-9012-3456-7890-123456789013", "originator": null, "body": "The voice message to be sent", "reference": null, "language": "en-gb", "voice": "female", "repeat": 1, "ifMachine": "delay", "machineTimeout": 7000, "scheduledDatetime": null, "createdDatetime": "2020-02-04T12:26:44+00:00", "recipients": { "totalCount": 1, "totalSentCount": 1, "totalDeliveredCount": 1, "totalDeliveryFailedCount": 0, "items": [ { "recipient": 31612345678, "originator": null, "status": "answered", "statusDatetime": "2020-02-04T12:27:32+00:00" } ] } } ] }'
29+
30+
voice_messages = Client('', http_client).voice_message_list()
31+
32+
http_client.request.assert_called_once_with(
33+
'voicemessages?limit=10&offset=0', 'GET', None)
34+
35+
voice_messages_check = {
36+
'12345678-9012-3456-7890-123456789012': {
37+
"id": '12345678-9012-3456-7890-123456789012',
38+
"href": "https://rest.messagebird.com/voicemessages/12345678-9012-3456-7890-123456789012"
39+
},
40+
'12345678-9012-3456-7890-123456789013': {
41+
"id": '12345678-9012-3456-7890-123456789013',
42+
"href": "https://rest.messagebird.com/voicemessages/12345678-9012-3456-7890-123456789013"
43+
}
44+
}
45+
46+
for item in voice_messages.items:
47+
message_specific = voice_messages_check.get(item.id)
48+
self.assertEqual(message_specific['id'], item.id)
49+
self.assertEqual(message_specific['href'], item.href)
50+
self.assertIsInstance(str(voice_messages), str)
51+
2452
def test_voicemessage_create(self):
2553
http_client = Mock()
2654
http_client.request.return_value = '{}'

0 commit comments

Comments
 (0)