From 932b3b80e43beaef4d63764dbe4070fe3e21259b Mon Sep 17 00:00:00 2001 From: arturfelipe Date: Mon, 14 Nov 2016 14:54:20 -0200 Subject: [PATCH 1/2] Fix non ascii chars --- sparkpost/transmissions.py | 3 ++- test/test_transmissions.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/sparkpost/transmissions.py b/sparkpost/transmissions.py index 3586e2f..d80d013 100644 --- a/sparkpost/transmissions.py +++ b/sparkpost/transmissions.py @@ -245,7 +245,8 @@ def send(self, **kwargs): """ payload = self._translate_keys(**kwargs) - results = self.request('POST', self.uri, data=json.dumps(payload)) + data = json.dumps(payload, ensure_ascii=False).encode('utf-8') + results = self.request('POST', self.uri, data=data) return results def _fetch_get(self, transmission_id): diff --git a/test/test_transmissions.py b/test/test_transmissions.py index c2d4e32..c44bcda 100644 --- a/test/test_transmissions.py +++ b/test/test_transmissions.py @@ -1,3 +1,4 @@ +# coding: utf-8 import base64 import json import os @@ -339,3 +340,31 @@ def test_fail_delete(): with pytest.raises(SparkPostAPIException): sp = SparkPost('fake-key') sp.transmission.delete('foobar') + + +@responses.activate +def test_json_serialize_with_a_non_ascii_unicode(): + responses.add( + responses.POST, + 'https://api.sparkpost.com/api/v1/transmissions', + status=200, + content_type='application/json', + body='{"results": "yay"}' + ) + sp = SparkPost('fake-key') + results = sp.transmission.send(recipients=[{ + 'address': {'email': 'unicode_email@example.com'}, + 'substitution_data': {'name': u'João'} + }]) + assert results == 'yay' + + results = sp.transmission.send(recipients=[{ + 'address': {'email': 'unicode_email@example.com'}, + 'substitution_data': {'name': u'😄'} + }]) + + results = sp.transmission.send(recipients=[{ + 'address': {'email': 'unicode_email@example.com'}, + 'substitution_data': {'name': u'漢字'} + }]) + assert results == 'yay' From 92e13f19c019003d5206e3cee2c4557febb06953 Mon Sep 17 00:00:00 2001 From: arturfelipe Date: Mon, 14 Nov 2016 15:03:52 -0200 Subject: [PATCH 2/2] Test non ascii chars from the body text --- test/test_transmissions.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/test/test_transmissions.py b/test/test_transmissions.py index c44bcda..9e917c0 100644 --- a/test/test_transmissions.py +++ b/test/test_transmissions.py @@ -343,7 +343,7 @@ def test_fail_delete(): @responses.activate -def test_json_serialize_with_a_non_ascii_unicode(): +def test_json_serialize_with_a_non_ascii_unicode_from_substitution_data(): responses.add( responses.POST, 'https://api.sparkpost.com/api/v1/transmissions', @@ -362,9 +362,28 @@ def test_json_serialize_with_a_non_ascii_unicode(): 'address': {'email': 'unicode_email@example.com'}, 'substitution_data': {'name': u'😄'} }]) + assert results == 'yay' results = sp.transmission.send(recipients=[{ 'address': {'email': 'unicode_email@example.com'}, 'substitution_data': {'name': u'漢字'} }]) assert results == 'yay' + + +@responses.activate +def test_json_serialize_with_a_non_ascii_unicode_from_body(): + responses.add( + responses.POST, + 'https://api.sparkpost.com/api/v1/transmissions', + status=200, + content_type='application/json', + body='{"results": "yay"}' + ) + sp = SparkPost('fake-key') + results = sp.transmission.send(recipients=[{ + 'address': {'email': 'unicode_email@example.com'}, + 'substitution_data': {'name': u'João 漢字'}, + 'text': u'Hello!!! 😄 my name is {{ name }}' + }]) + assert results == 'yay'