8000 remove rest.resources.request in favor of putting those functions in … · skyl/twilio-python@7b70242 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 7b70242

Browse files
committed
remove rest.resources.request in favor of putting those functions in rest.resources.base
1 parent 57ffa9d commit 7b70242

File tree

5 files changed

+76
-85
lines changed

5 files changed

+76
-85
lines changed

tests/test_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_authorized_apps(self):
2828
self.assertIsInstance(self.client.authorized_connect_apps,
2929
resources.AuthorizedConnectApps)
3030

31-
@patch("twilio.rest.resources.request.make_request")
31+
@patch("twilio.rest.resources.base.make_request")
3232
def test_conferences(self, mock):
3333
mock.return_value = Mock()
3434
mock.return_value.ok = True

tests/test_make_request.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from nose.tools import raises
1313
from mock import patch, Mock
1414
from twilio import TwilioRestException
15-
from twilio.rest.resources.request import make_request, make_twilio_request
15+
from twilio.rest.resources.base import make_request, make_twilio_request
1616

1717
get_headers = {
1818
"User-Agent": "twilio-python/%s" % (twilio.__version__),
@@ -56,7 +56,7 @@ def test_resp_uri(http_mock, response_mock):
5656
body=None, headers=None)
5757

5858

59-
@patch('twilio.rest.resources.request.make_request')
59+
@patch('twilio.rest.resources.base.make_request')
6060
def test_make_twilio_request_headers(mock):
6161
url = "http://random/url"
6262
make_twilio_request("POST", url)
@@ -65,7 +65,7 @@ def test_make_twilio_request_headers(mock):
6565

6666

6767
@raises(TwilioRestException)
68-
@patch('twilio.rest.resources.request.make_request')
68+
@patch('twilio.rest.resources.base.make_request')
6969
def test_make_twilio_request_bad_data(mock):
7070
resp = Mock()
7171
resp.ok = False

twilio/rest/resources/__init__.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
convert_keys, normalize_dates
1616
)
1717
from twilio.rest.resources.base import (
18-
Response, Resource, InstanceResource, ListResource
19-
)
20-
from twilio.rest.resources.request import (
21-
make_twilio_request, make_request
18+
Response, Resource, InstanceResource, ListResource,
19+
make_request, make_twilio_request
2220
)
2321
from twilio.rest.resources.phone_numbers import (
2422
AvailablePhoneNumber, AvailablePhoneNumbers, PhoneNumber, PhoneNumbers

twilio/rest/resources/base.py

Lines changed: 70 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import json
22
import logging
33
from urlparse import urlparse
4+
from urllib import urlencode
45

6+
import twilio
57
from twilio import TwilioException, TwilioRestException
6-
from twilio.rest.resources.imports import parse_qs
8+
from twilio.rest.resources.imports import parse_qs, httplib2
79
from twilio.rest.resources.util import transform_params
8-
from twilio.rest.resources.request import make_twilio_request
910

1011

1112
class Response(object):
@@ -20,6 +21,73 @@ def __init__(self, httplib_resp, content, url):
2021
self.url = url
2122

2223

24+
def make_request(method, url,
25+
params=None, data=None, headers=None, cookies=None, files=None,
26+
auth=None, timeout=None, allow_redirects=False, proxies=None):
27+
"""Sends an HTTP request Returns :class:`Response <models.Response>`
28+
29+
See the requests documentation for explanation of all these parameters
30+
31+
Currently proxies, files, and cookies are all ignored
32+
"""
33+
http = httplib2.Http(timeout=timeout)
34+
http.follow_redirects = allow_redirects
35+
36+
if auth is not None:
37+
http.add_credentials(auth[0], auth[1])
38+
39+
if data is not None:
40+
udata = {}
41+
for k, v in data.iteritems():
42+
try:
43+
udata[k.encode('utf-8')] = unicode(v).encode('utf-8')
< 57AE code>44+
except UnicodeDecodeError:
45+
udata[k.encode('utf-8')] = unicode(v, 'utf-8').encode('utf-8')
46+
data = urlencode(udata)
47+
48+
if params is not None:
49+
enc_params = urlencode(params, doseq=True)
50+
if urlparse(url).query:
51+
url = '%s&%s' % (url, enc_params)
52+
else:
53+
url = '%s?%s' % (url, enc_params)
54+
55+
resp, content = http.request(url, method, headers=headers, body=data)
56+
57+
# Format httplib2 request as requests object
58+
return Response(resp, content, url)
59+
60+
61+
def make_twilio_request(method, uri, **kwargs):
62+
"""
63+
Make a request to Twilio. Throws an error
64+
"""
65+
headers = kwargs.get("headers", {})
66+
headers["User-Agent"] = "twilio-python/%s" % twilio.__version__
67+
68+
if method == "POST" and "Content-Type" not in headers:
69+
headers["Content-Type"] = "application/x-www-form-urlencoded"
70+
71+
kwargs["headers"] = headers
72+
73+
if "Accept" not in headers:
74+
headers["Accept"] = "application/json"
75+
uri = uri + ".json"
76+
77+
resp = make_request(method, uri, **kwargs)
78+
79+
if not resp.ok:
80+
try:
81+
error = json.loads(resp.content)
82+
message = "%s: %s" % (error["code"], error["message"])
83+
except:
84+
message = resp.content
85+
86+
raise TwilioRestException(resp.status_code, resp.url, message)
87+
88+
return resp
89+
90+
2391
class Resource(object):
2492
"""A REST Resource"""
2593

twilio/rest/resources/request.py

Lines changed: 0 additions & 75 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0