Skip to content

Commit df2c93f

Browse files
committed
* Fixes encoding issue when JSON is serialized.
* Simplifies travis flow, adds requirements file.
1 parent b9642c3 commit df2c93f

File tree

6 files changed

+44
-11
lines changed

6 files changed

+44
-11
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,4 @@ target/
6161
.idea/
6262

6363
# pyvenv
64-
venv/
64+
venv*/

.travis.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@ python:
77
- '3.6'
88
- 'nightly'
99
install:
10-
- pip install mock==2.0
11-
- pip install requests
12-
- pip install codecov
13-
- pip install pytest pytest-cov
14-
- pip install pycodestyle
10+
- pip install -r requirements.txt
1511
- pip install .
1612
script:
1713
- coverage run --source=messagebird -m unittest discover -s tests/

messagebird/http_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def request(self, path, method='GET', params=None, format=ResponseFormat.text):
3333
'Accept': 'application/json',
3434
'Authorization': 'AccessKey ' + self.access_key,
3535
'User-Agent': self.user_agent,
36-
'Content-Type': 'application/json'
36+
'Content-Type': 'application/json; charset=UTF-8'
3737
}
3838

3939
method_switcher = {

messagebird/serde.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import json
2+
import sys
23

34

45
def json_serialize(obj):
5-
try:
6-
return json.dumps(obj)
7-
except TypeError:
8-
return json.dumps(obj, default=lambda o: o.__dict__)
6+
if sys.version_info > (3, 0):
7+
try:
8+
return json.dumps(obj, ensure_ascii=False).encode('utf-8')
9+
except TypeError:
10+
return json.dumps(obj, default=lambda o: o.__dict__, ensure_ascii=False).encode('utf-8')
11+
else:
12+
try:
13+
return json.dumps(obj, ensure_ascii=False, encoding='utf-8')
14+
except TypeError:
15+
return json.dumps(obj, default=lambda o: o.__dict__, ensure_ascii=False, encoding='utf-8')

requirements.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
mock==2.0.0
2+
requests==2.24.0
3+
coverage==5.2.1
4+
pytest==4.6.11
5+
pytest-cov==2.10.1
6+
pycodestyle==2.6.0
7+
enum==0.4.7

tests/test_serde.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# coding=utf-8
2+
import sys
3+
import unittest
4+
5+
from messagebird.serde import json_serialize
6+
7+
8+
class TestJSONSerDe(unittest.TestCase):
9+
10+
@staticmethod
11+
def encode_if_py3(s):
12+
if sys.version_info > (3, 0):
13+
return s.encode('utf-8')
14+
else:
15+
return s
16+
17+
def test_tr_check(self):
18+
self.assertEqual(json_serialize({'body': 'Pijamalı hasta, yağız şoföre çabucak güvendi.'}),
19+
self.encode_if_py3("""{"body": "Pijamalı hasta, yağız şoföre çabucak güvendi."}"""))
20+
21+
def test_jp_check(self):
22+
self.assertEqual(json_serialize({'body': 'いろはにほへとちりぬるを'}),
23+
self.encode_if_py3("""{"body": "いろはにほへとちりぬるを"}"""))

0 commit comments

Comments
 (0)