@@ -104,7 +104,7 @@ def _build_versioned_url(self, url):
104
104
:type url: string
105
105
:return: string
106
106
"""
107
- return '{}/v{}{ }' .format (self .host , str (self ._version ), url )
107
+ return '{0 }/v{1}{2 }' .format (self .host , str (self ._version ), url )
108
108
109
109
def _build_url (self , query_params ):
110
110
"""Build the final URL to be passed to urllib
@@ -213,47 +213,51 @@ def get_version(*args, **kwargs):
213
213
if name in self .methods :
214
214
method = name .upper ()
215
215
216
- def http_request (* _ , ** kwargs ):
216
+ def http_request (
217
+ request_body = None ,
218
+ query_params = None ,
219
+ request_headers = None ,
220
+ timeout = None ,
221
+ ** _ ):
217
222
"""Make the API call
218
- :param args: unused
223
+ :param timeout: HTTP request timeout. Will be propagated to
224
+ urllib client
225
+ :type timeout: float
226
+ :param request_headers: HTTP headers. Will be merged into
227
+ current client object state
228
+ :type request_headers: dict
229
+ :param query_params: HTTP query parameters
230
+ :type query_params: dict
231
+ :param request_body: HTTP request body
232
+ :type request_body: string or json-serializable object
219
233
:param kwargs:
220
- :return: Client object
234
+ :return: Response object
221
235
"""
222
- if 'request_headers' in kwargs :
223
- self ._update_headers (kwargs ['request_headers' ])
224
- if 'request_body' not in kwargs :
236
+ if request_headers :
237
+ self ._update_headers (request_headers )
238
+
239
+ if request_body is None :
225
240
data = None
226
241
else :
227
242
# Don't serialize to a JSON formatted str
228
243
# if we don't have a JSON Content-Type
229
- if 'Content-Type' in self .request_headers :
230
- if self .request_headers ['Content-Type' ] != \
231
- 'application/json' :
232
- data = kwargs ['request_body' ].encode ('utf-8' )
233
- else :
234
- data = json .dumps (
235
- kwargs ['request_body' ]).encode ('utf-8' )
244
+ if 'Content-Type' in self .request_headers and \
245
+ self .request_headers ['Content-Type' ] != 'application/json' :
246
+ data = request_body .encode ('utf-8' )
236
247
else :
237
- data = json .dumps (
238
- kwargs ['request_body' ]).encode ('utf-8' )
239
-
240
- if 'query_params' in kwargs :
241
- params = kwargs ['query_params' ]
242
- else :
243
- params = None
248
+ self .request_headers .setdefault (
249
+ 'Content-Type' , 'application/json' )
250
+ data = json .dumps (request_body ).encode ('utf-8' )
244
251
245
252
opener = urllib .build_opener ()
246
- request = urllib .Request (self ._build_url (params ), data = data )
247
- if self .request_headers :
248
- for key , value in self .request_headers .items ():
249
- request .add_header (key , value )
250
- if data and ('Content-Type' not in self .request_headers ):
251
- request .add_header ('Content-Type' , 'application/json' )
252
- request .get_method = lambda : method
253
- timeout = kwargs .pop ('timeout' , None )
254
- return Response (
255
- self ._make_request (opener , request , timeout = timeout )
253
+ request = urllib .Request (
254
+ self ._build_url (query_params ),
255
+ headers = self .request_headers ,
256
+ data = data ,
256
257
)
258
+ request .get_method = lambda : method
259
+
260
+ return Response (self ._make_request (opener , request , timeout = timeout ))
257
261
return http_request
258
262
else :
259
263
# Add a segment to the URL
0 commit comments