8000 Merge pull request #346 from twilio/voice-response-devx5021 · BioComputing/twilio-python@81ad4b8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 81ad4b8

Browse files
authored
Merge pull request twilio#346 from twilio/voice-response-devx5021
Voice response devx5021 and Python testing, compatibility
2 parents 21fc89a + 3519817 commit 81ad4b8

File tree

11 files changed

+98
-19
lines changed

11 files changed

+98
-19
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
language: python
22
python:
3-
- "2.6"
43
- "2.7"
54
- "3.3"
65
- "3.4"
76
- "3.5"
87
- "3.6"
98
install:
9+
- pip install virtualenv --upgrade
1010
- make install
1111
- make test-install
12-
script:
12+
script:
1313
- make test

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.PHONY: clean install analysis test test-install develop docs docs-install
22

33
venv:
4-
virtualenv venv
4+
virtualenv --python=python venv
55

66
install: venv
77
. venv/bin/activate; pip install .

setup.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
# documentation: http://pypi.python.org/pypi/setuptools
1616
REQUIRES = ["requests >= 2.0.0", "six", "pytz", "PyJWT >= 1.4.2"]
1717

18-
if sys.version_info < (2, 6):
19-
REQUIRES.append('simplejson')
2018
if sys.version_info < (3, 0):
2119
REQUIRES.extend(["cryptography >= 1.3.4", "idna >= 2.0.0", "pyOpenSSL >= 0.14"])
2220
if sys.version_info >= (3, 0):
@@ -46,7 +44,6 @@
4644
"License :: OSI Approved :: MIT License",
4745
"Operating System :: OS Independent",
4846
"Programming Language :: Python",
49-
"Programming Language :: Python :: 2.6",
5047
"Programming Language :: Python :: 2.7",
5148
"Programming Language :: Python :: 3.3",
5249
"Programming Language :: Python :: 3.4",

tests/unit/http/test_http_client.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import six
4+
5+
import unittest
6+
7+
import mock
8+
from mock import patch, Mock
9+
from requests import Request
10+
from requests import Session
11+
12+
from twilio.http.http_client import TwilioHttpClient
13+
14+
15+
class TestHttpClientRequest(unittest.TestCase):
16+
17+
def setUp(self):
18+
self.session_patcher = patch('twilio.http.http_client.Session')
19+
20+
self.session_mock = Mock(wraps=Session())
21+
self.request_mock = Mock()
22+
23+
self.session_mock.prepare_request.return_value = self.request_mock
24+
self.session_mock.send.return_value = Mock(status_code=200, content=six.u('testing-unicodeΩ≈ç√'))
25+
self.request_mock.headers = {}
26+
27+
session_constructor_mock = self.session_patcher.start()
28+
session_constructor_mock.return_value = self.session_mock
29+
30+
self.client = TwilioHttpClient()
31+
32+
def tearDown(self):
33+
self.session_patcher.stop()
34+
35+
def test_request_sets_host_header_if_missing(self):
36+
self.request_mock.url = 'https://api.twilio.com/'
37+
self.request_mock.headers = {'Host': 'other.twilio.com'}
38+
39+
self.client.request('doesnt matter', 'doesnt matter')
40+
41+
self.assertEqual('other.twilio.com', self.request_mock.headers['Host'])
42+
43+
def test_request_with_unicode_response(self):
44+
self.request_mock.url = 'https://api.twilio.com/'
45+
self.request_mock.headers = {'Host': 'other.twilio.com'}
46+
47+
response = self.client.request('doesnt matter', 'doesnt matter')
48+
49+
self.assertEqual('other.twilio.com', self.request_mock.headers['Host'])
50+
self.assertEqual(200, response.status_code)
51+
self.assertEqual(six.u('testing-unicodeΩ≈ç√'), response.content)

tests/unit/http/test_validation_client.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import six
4+
15
import unittest
26

37
import mock
@@ -76,7 +80,7 @@ def setUp(self):
7680
self.request_mock = Mock()
7781

7882
self.session_mock.prepare_request.return_value = self.request_mock
79-
self.session_mock.send.return_value = Mock(status_code=200, content='test')
83+
self.session_mock.send.return_value = Mock(status_code=200, content=six.u('testΩ'))
8084
self.validation_token.return_value.to_jwt.return_value = 'test-token'
8185
self.request_mock.headers = {}
8286

@@ -105,3 +109,14 @@ def test_request_sets_host_header_if_missing(self):
105109

106110
self.assertEqual('other.twilio.com', self.request_mock.headers['Host'])
107111
self.assertEqual('test-token', self.request_mock.headers['Twilio-Client-Validation'])
112+
113+
def test_request_with_unicode_response(self):
114+
self.request_mock.url = 'https://api.twilio.com/'
115+
self.request_mock.headers = {'Host': 'other.twilio.com'}
116+
117+
response = self.client.request('doesnt matter', 'doesnt matter')
118+
119+
self.assertEqual('other.twilio.com', self.request_mock.headers['Host'])
120+
self.assertEqual('test-token', self.request_mock.headers['Twilio-Client-Validation'])
121+
self.assertEqual(200, response.status_code)
122+
self.assertEqual(six.u('testΩ'), response.content)

tests/unit/twiml/test_voice_response.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,25 @@ def test_conference(self):
333333
'<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" startConferenceOnEnter="true" waitUrl="">TestConferenceAttributes</Conference></Dial></Response>'
334334
)
335335

336+
def test_muted_conference(self):
337+
d = Dial()
338+
d.conference(
339+
'TestConferenceMutedAttribute',
340+
beep=False,
341+
muted=True,
342+
wait_url='',
343+
start_conference_on_enter=True,
344+
end_conference_on_exit=True
345+
)
346+
347+
r = VoiceResponse()
348+
r.append(d)
349+
350+
assert_equal(
351+
self.strip(r),
352+
'<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" muted="true" startConferenceOnEnter="true" waitUrl="">TestConferenceMutedAttribute</Conference></Dial></Response>'
353+
)
354+
336355

337356
class TestQueue(TwilioTest):
338357

tox.ini

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
[tox]
2-
envlist = py26, py27, py33, py34, py35, py36, pypy
2+
envlist = py27, py33, py34, py35, py36, pypy
33

44
[testenv]
55
deps= -r{toxinidir}/tests/requirements.txt
66
commands=
77
nosetests \
88
[]
9-

twilio/http/http_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
3838
timeout=timeout,
3939
)
4040

41-
return Response(int(response.status_code), response.content.decode('utf-8'))
41+
return Response(int(response.status_code), response.content)

twilio/http/validation_client.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from urlparse import urlparse
2-
31
from collections import namedtuple
42

53
from requests import Request, Session
64

5+
from twilio.compat import urlparse
76
from twilio.http import HttpClient, get_cert_file
87
from twilio.http.response import Response
98
from twilio.jwt.validation import ClientValidationJwt
@@ -70,7 +69,7 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
7069
timeout=timeout,
7170
)
7271

73-
return Response(int(response.status_code), response.content.decode('utf-8'))
72+
return Response(int(response.status_code), response.content)
7473

7574
def _build_validation_payload(self, request):
7675
"""

twilio/jwt/access_token/grants.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ def deprecated(func):
1010

1111
@functools.wraps(func)
1212
def new_func(*args, **kwargs):
13-
warnings.warn_explicit(
14-
"Call to deprecated function {}.".format(func.__name__),
15-
category=DeprecationWarning,
16-
filename=func.func_code.co_filename,
17-
lineno=func.func_code.co_firstlineno + 1
18-
)
13+
warnings.simplefilter('always', DeprecationWarning)
14+
warnings.warn("Call to deprecated function {}.".format(func.__name__), category=DeprecationWarning, stacklevel=2)
15+
warnings.simplefilter('default', DeprecationWarning)
1916
return func(*args, **kwargs)
17+
2018
return new_func
2119

2220

twilio/twiml/voice_response.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ def conference(self,
392392
"""
393393
return self.append(Conference(
394394
name,
395+
muted=muted,
395396
start_conference_on_enter=start_conference_on_enter,
396397
end_conference_on_exit=end_conference_on_exit,
397398
max_participants=max_participants,

0 commit comments

Comments
 (0)
0