8000 fix: Respect HTTPS_PROXY and other settings from env vars (#592) · Skotha/twilio-python@cca1a9b · GitHub
[go: up one dir, main page]

Skip to content
< 8000 script crossorigin="anonymous" type="application/javascript" src="https://github.githubassets.com/assets/sessions-eed3aa0554dd.js" defer="defer">

Commit cca1a9b

Browse files
authored
fix: Respect HTTPS_PROXY and other settings from env vars (twilio#592)
1 parent a1b72d1 commit cca1a9b

File tree

2 files changed

+37
-15
lines changed

2 files changed

+37
-15
lines changed

tests/unit/http/test_http_client.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# -*- coding: utf-8 -*-
22
import unittest
3+
import os
4+
from collections import OrderedDict
35

46
from mock import patch, Mock
57
from requests import Session
@@ -137,17 +139,37 @@ def test_last_response_empty_on_error(self):
137139
self.assertIsNone(self.client.last_response)
138140

139141
def test_request_behind_proxy(self):
140-
proxies = {
141-
'http': 'http://proxy.twilio.com',
142-
'https': 'https://proxy.twilio.com',
143-
}
142+
self.request_mock.url = 'https://api.twilio.com/'
143+
proxies = OrderedDict([
144+
('http', 'http://proxy.twilio.com'),
145+
('https', 'https://proxy.twilio.com'),
146+
])
144147
self.client = TwilioHttpClient(proxy=proxies)
145148
self.client.request('doesnt matter', 'doesnt matter')
146-
self.assertEqual(proxies, self.session_mock.proxies)
149+
self.session_mock.send.assert_called_once_with(
150+
self.request_mock, verify=True, proxies=proxies, stream=False,
151+
cert=None, allow_redirects=False, timeout=None
152+
)
153+
154+
@patch.dict(os.environ, {
155+
"HTTP_PROXY": "http://proxy.twilio.com",
156+
"HTTPS_PROXY": "https://proxy.twilio.com"
157+
})
158+
def test_request_behind_proxy_from_environment(self):
159+
self.request_mock.url = 'https://api.twilio.com/'
160+
self.client = TwilioHttpClient()
161+
self.client.request('doesnt matter', 'doesnt matter')
162+
self.session_mock.send.assert_called_once_with(
163+
self.request_mock, verify=True, proxies=OrderedDict([
164+
('http', 'http://proxy.twilio.com'),
165+
('https', 'https://proxy.twilio.com'),
166+
]), stream=False, cert=None, allow_redirects=False, timeout=None
167+
)
147168

148169
def test_exception_with_details(self):
170+
self.request_mock.url = 'https://api.twilio.com/'
149171
v1 = MyVersion(self.client)
150-
error_text = """{
172+
error_text = """{
151173
"code": 20001,
152174
"message": "Bad request",
153175
"more_info": "https://www.twilio.com/docs/errors/20001",
@@ -179,7 +201,7 @@ def tearDown(self):
179201

180202
def _setup_session_response(self, value):
181203
session_mock = Mock(wraps=Session())
182-
request_mock = Mock()
204+
request_mock = Mock(url='https://api.twilio.com/')
183205

184206
session_mock.prepare_request.return_value = request_mock
185207
session_mock.send.return_value = Response(200, value)

twilio/http/http_client.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __init__(self, pool_connections=True, request_hooks=None, timeout=None, logg
3939
if timeout is not None and timeout <= 0:
4040
raise ValueError(timeout)
4141
self.timeout = timeout
42-
self.proxy = proxy
42+
self.proxy = proxy if proxy else {}
4343

4444
def request(self, method, url, params=None, data=None, headers=None, auth=None, timeout=None,
4545
allow_redirects=False):
@@ -76,17 +76,17 @@ def request(self, method, url, params=None, data=None, headers=None, auth=None,
7676

7777
self.last_response = None
7878
session = self.session or Session()
79-
if self.proxy:
80-
session.proxies = self.proxy
8179
request = Request(**kwargs)
8280
self.last_request = TwilioRequest(**kwargs)
8381

8482
prepped_request = session.prepare_request(request)
85-
response = session.send(
86-
prepped_request,
87-
allow_redirects=allow_redirects,
88-
timeout=timeout if timeout is not None else self.timeout,
89-
)
83+
84+
settings = session.merge_environment_settings(prepped_request.url, self.proxy, None, None, None)
85+
86+
settings['allow_redirects'] = allow_redirects
87+
settings['timeout'] = timeout if timeout is not None else self.timeout
88+
89+
response = session.send(prepped_request, **settings)
9090

9191
self._log_response(response)
9292

0 commit comments

Comments
 (0)
0