Skip to content

Commit 9d040c6

Browse files
authored
Merge pull request #42 from JornEngelbart/fix-date-parsing
Fix date parsing
2 parents bb22fe3 + dc4650a commit 9d040c6

6 files changed

+29
-22
lines changed

messagebird/base.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
from datetime import datetime
22

3+
import dateutil.parser
4+
5+
36
class Base(object):
47
def load(self, data):
58
for name, value in list(data.items()):
69
if hasattr(self, name) and not callable(getattr(self,name)):
710
setattr(self, name, value)
811

912
return self
10-
11-
@staticmethod
12-
def strip_nanoseconds_from_date(value):
13-
if str(value).find(".") != -1:
14-
return value[:-11] + value[-1:]
15-
16-
return value
1713

1814
@staticmethod
1915
def value_to_time(value, format='%Y-%m-%dT%H:%M:%S+00:00'):
2016
if value is not None:
21-
value = Base.strip_nanoseconds_from_date(value)
22-
return datetime.strptime(value, format)
17+
return dateutil.parser.parse(value).replace(microsecond=0)

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_description():
2222
url = 'https://github.com/messagebird/python-rest-api',
2323
download_url = 'https://github.com/messagebird/python-rest-api/tarball/1.4.1',
2424
keywords = ['messagebird', 'sms'],
25-
install_requires = ['requests>=2.4.1'],
25+
install_requires = ['requests>=2.4.1', 'python-dateutil>=2.6.0'],
2626
license = 'BSD-2-Clause',
2727
classifiers = [
2828
'Programming Language :: Python',

tests/test_conversation.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import unittest
22
from datetime import datetime
3+
4+
from dateutil.tz import tzutc
5+
36
from messagebird import Client
47

58
try:
@@ -31,8 +34,8 @@ def test_conversation_start(self):
3134

3235
self.assertEqual('1234', msg.id)
3336
self.assertEqual(99999999999, msg.contact.msisdn)
34-
self.assertEqual(datetime(2019, 4, 2, 8, 19, 37), msg.contact.createdDatetime)
35-
self.assertEqual(datetime(2019, 4, 2, 8, 19, 38), msg.contact.updatedDatetime)
37+
self.assertEqual(datetime(2019, 4, 2, 8, 19, 37, tzinfo=tzutc()), msg.contact.createdDatetime)
38+
self.assertEqual(datetime(2019, 4, 2, 8, 19, 38, tzinfo=tzutc()), msg.contact.updatedDatetime)
3639
self.assertEqual('channel-name', msg.channels[0].name)
3740

3841
def test_conversation_list(self):
@@ -52,9 +55,9 @@ def test_conversation_read(self):
5255
http_client.request.assert_called_once_with('conversations/conversation-id', 'GET', None)
5356

5457
self.assertEqual('57b96dbe0fda40f0a814f5e3268c30a9', conversation.id)
55-
self.assertEqual(datetime(2019, 4, 2, 8, 54, 38), conversation.createdDatetime)
56-
self.assertEqual(datetime(2019, 4, 2, 14, 24, 9), conversation.updatedDatetime)
57-
self.assertEqual(datetime(2019, 4, 2, 14, 24), conversation.lastReceivedDatetime)
58+
self.assertEqual(datetime(2019, 4, 2, 8, 54, 38, tzinfo=tzutc()), conversation.createdDatetime)
59+
self.assertEqual(datetime(2019, 4, 2, 14, 24, 9, tzinfo=tzutc()), conversation.updatedDatetime)
60+
self.assertEqual(datetime(2019, 4, 2, 14, 24, 9, tzinfo=tzutc()), conversation.lastReceivedDatetime)
5861
self.assertEqual('8846d44229094c20813cf9eea596e680', conversation.contact.id)
5962
self.assertEqual('c0dae31e440145e094c4708b7d908842', conversation.channels[0].id)
6063
self.assertEqual(2, conversation.messages.totalCount)

tests/test_conversation_message.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import unittest
22
from datetime import datetime
3+
4+
from dateutil.tz import tzutc
5+
36
from messagebird import Client
47

58
try:
@@ -45,7 +48,7 @@ def test_create_message(self):
4548

4649
msg = Client('', http_client).conversation_create_message('conversation-id', data)
4750

48-
self.assertEqual(datetime(2019, 4, 2, 11, 57, 53), msg.updatedDatetime)
49-
self.assertEqual(datetime(2019, 4, 2, 11, 57, 52), msg.createdDatetime)
51+
self.assertEqual(datetime(2019, 4, 2, 11, 57, 53, tzinfo=tzutc()), msg.updatedDatetime)
52+
self.assertEqual(datetime(2019, 4, 2, 11, 57, 52, tzinfo=tzutc()), msg.createdDatetime)
5053

5154
http_client.request.assert_called_once_with('conversations/conversation-id/messages', 'POST', data)

tests/test_conversation_webhook.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import unittest
22
import json
33
from datetime import datetime
4+
5+
from dateutil.tz import tzutc
6+
47
from messagebird import Client
58
from messagebird.conversation_webhook import \
69
CONVERSATION_WEBHOOK_EVENT_CONVERSATION_CREATED, \
@@ -60,7 +63,7 @@ def test_conversation_webhook_read(self):
6063
web_hook = Client('', http_client).conversation_read_webhook('webhook-id')
6164

6265
http_client.request.assert_called_once_with('webhooks/webhook-id', 'GET', None)
63-
self.assertEqual(datetime(2019, 4, 3, 8, 41, 37), web_hook.createdDatetime)
66+
self.assertEqual(datetime(2019, 4, 3, 8, 41, 37, tzinfo=tzutc()), web_hook.createdDatetime)
6467
self.assertEqual(None, web_hook.updatedDatetime)
6568
self.assertEqual(['conversation.created', 'conversation.updated'], web_hook.events)
6669

tests/test_voice_recording.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
import unittest
2+
3+
from dateutil.tz import tzutc
4+
25
from messagebird import Client, ErrorException
36
from datetime import datetime
47

@@ -23,8 +26,8 @@ def test_voice_recording_view(self):
2326
self.assertEqual('12345678-9012-3456-7890-123456789012', voice_recording.id)
2427
self.assertEqual('done', voice_recording.status)
2528
self.assertEqual('wav', voice_recording.format)
26-
self.assertEqual(datetime(2018, 1, 1, 0, 0, 1), voice_recording.createdAt)
27-
self.assertEqual(datetime(2018, 1, 1, 0, 0, 5), voice_recording.updatedAt)
29+
self.assertEqual(datetime(2018, 1, 1, 0, 0, 1, tzinfo=tzutc()), voice_recording.createdAt)
30+
self.assertEqual(datetime(2018, 1, 1, 0, 0, 5, tzinfo=tzutc()), voice_recording.updatedAt)
2831
self.assertEqual(2, len(voice_recording._links))
2932
self.assertIsInstance(str(voice_recording), str)
3033

@@ -47,8 +50,8 @@ def test_voice_recording_list(self):
4750
self.assertEqual(recording_specific['duration'], item.duration)
4851
self.assertEqual('done', item.status)
4952
self.assertEqual('wav', item.format)
50-
self.assertEqual(datetime(recording_specific['year'], 1, 1, 0, 0, 1), item.createdAt)
51-
self.assertEqual(datetime(recording_specific['year'], 1, 1, 0, 0, 5), item.updatedAt)
53+
self.assertEqual(datetime(recording_specific['year'], 1, 1, 0, 0, 1, tzinfo=tzutc()), item.createdAt)
54+
self.assertEqual(datetime(recording_specific['year'], 1, 1, 0, 0, 5, tzinfo=tzutc()), item.updatedAt)
5255
self.assertEqual(2, len(item._links))
5356
self.assertIsInstance(str(voice_recordings), str)
5457

0 commit comments

Comments
 (0)