47 |
47 |
DEBUG_LOG = logger.get_log_filename()
|
48 |
48 |
TIMEOUT = 60.0 # seconds
|
49 |
49 |
HTTP_METHODS = ['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'COPY', 'MOVE']
|
50 |
|
LOG_TOKEN = False
|
51 |
|
LOG_DATA = True
|
52 |
50 |
|
53 |
51 |
logger.add_file_logger('clients.send', __name__, filename=DEBUG_LOG)
|
54 |
52 |
sendlog = logger.get_logger('clients.send')
|
... | ... | |
111 |
109 |
self.details = details if details else []
|
112 |
110 |
|
113 |
111 |
|
114 |
|
class RequestManager(object):
|
|
112 |
class Logged(object):
|
|
113 |
|
|
114 |
LOG_TOKEN = False
|
|
115 |
LOG_DATA = False
|
|
116 |
|
|
117 |
|
|
118 |
class RequestManager(Logged):
|
115 |
119 |
"""Handle http request information"""
|
116 |
120 |
|
117 |
121 |
def _connection_info(self, url, path, params={}):
|
... | ... | |
152 |
156 |
self.scheme, self.netloc = self._connection_info(url, path, params)
|
153 |
157 |
|
154 |
158 |
def log(self):
|
155 |
|
sendlog.debug('%s %s://%s%s\t[%s]' % (
|
|
159 |
sendlog.info('%s %s://%s%s\t[%s]' % (
|
156 |
160 |
self.method,
|
157 |
161 |
self.scheme,
|
158 |
162 |
self.netloc,
|
159 |
163 |
self.path,
|
160 |
164 |
self))
|
161 |
165 |
for key, val in self.headers.items():
|
162 |
|
if (not LOG_TOKEN) and key.lower() == 'x-auth-token':
|
|
166 |
if (not self.LOG_TOKEN) and key.lower() == 'x-auth-token':
|
163 |
167 |
continue
|
164 |
|
sendlog.debug('%s: %s\t[%s]', (key, val, self))
|
|
168 |
sendlog.info(' %s: %s\t[%s]' % (key, val, self))
|
165 |
169 |
if self.data:
|
166 |
|
sendlog.debug('data size:%s\t[%s]' % (len(self.data), self))
|
167 |
|
if LOG_DATA:
|
|
170 |
sendlog.info('data size:%s\t[%s]' % (len(self.data), self))
|
|
171 |
if self.LOG_DATA:
|
168 |
172 |
datasendlog.info(self.data)
|
169 |
173 |
else:
|
170 |
|
sendlog.debug('data size:0\t[%s]' % self)
|
|
174 |
sendlog.info('data size:0\t[%s]' % self)
|
171 |
175 |
sendlog.info('')
|
172 |
176 |
|
173 |
177 |
def perform(self, conn):
|
... | ... | |
195 |
199 |
raise ClientError('HTTPResponse takes too long - kamaki timeout')
|
196 |
200 |
|
197 |
201 |
|
198 |
|
class ResponseManager(object):
|
|
202 |
class ResponseManager(Logged):
|
199 |
203 |
"""Manage the http request and handle the response data, headers, etc."""
|
200 |
204 |
|
201 |
205 |
def __init__(self, request, poolsize=None):
|
... | ... | |
215 |
219 |
with PooledHTTPConnection(
|
216 |
220 |
self.request.netloc, self.request.scheme,
|
217 |
221 |
**pool_kw) as connection:
|
|
222 |
self.request.LOG_TOKEN = self.LOG_TOKEN
|
|
223 |
self.request.LOG_DATA = self.LOG_DATA
|
218 |
224 |
r = self.request.perform(connection)
|
219 |
|
recvlog.debug('[resp: %s] <-- [req: %s]\n' % (r, self.request))
|
|
225 |
recvlog.info('[resp: %s] <-- [req: %s]\n' % (r, self.request))
|
220 |
226 |
self._request_performed = True
|
221 |
227 |
self._status_code, self._status = r.status, r.reason
|
222 |
|
recvlog.debug(
|
|
228 |
recvlog.info(
|
223 |
229 |
'%d %s\t[p: %s]' % (self.status_code, self.status, self))
|
224 |
230 |
self._headers = dict()
|
225 |
231 |
for k, v in r.getheaders():
|
226 |
|
if (not LOG_TOKEN) and k.lower() == 'x-auth-token':
|
|
232 |
if (not self.LOG_TOKEN) and k.lower() == 'x-auth-token':
|
227 |
233 |
continue
|
228 |
234 |
self._headers[k] = v
|
229 |
|
recvlog.debug(' %s: %s\t[p: %s]' % (k, v, self))
|
|
235 |
recvlog.info(' %s: %s\t[p: %s]' % (k, v, self))
|
230 |
236 |
self._content = r.read()
|
231 |
|
recvlog.debug('data size: %s\t[p: %s]' % (
|
|
237 |
recvlog.info('data size: %s\t[p: %s]' % (
|
232 |
238 |
len(self._content) if self._content else 0,
|
233 |
239 |
self))
|
234 |
|
if LOG_DATA and self._content:
|
235 |
|
datarecvlog.debug('%s\t[p: %s]' % (self._content, self))
|
|
240 |
if self.LOG_DATA and self._content:
|
|
241 |
datarecvlog.info('%s\t[p: %s]' % (self._content, self))
|
236 |
242 |
except Exception as err:
|
237 |
243 |
from traceback import format_stack
|
238 |
244 |
recvlog.debug('\n'.join(['%s' % type(err)] + format_stack()))
|
... | ... | |
316 |
322 |
'%a %b %d %H:%M:%S %Y',
|
317 |
323 |
'%A, %d-%b-%y %H:%M:%S GMT',
|
318 |
324 |
'%a, %d %b %Y %H:%M:%S GMT']
|
|
325 |
LOG_TOKEN = False
|
|
326 |
LOG_DATA = False
|
319 |
327 |
|
320 |
328 |
def __init__(self, base_url, token):
|
321 |
329 |
self.base_url = base_url
|
... | ... | |
402 |
410 |
data=data, headers=headers, params=params)
|
403 |
411 |
# req.log()
|
404 |
412 |
r = ResponseManager(req)
|
|
413 |
r.LOG_TOKEN, r.LOG_DATA = self.LOG_TOKEN, self.LOG_DATA
|
405 |
414 |
finally:
|
406 |
415 |
self.headers = dict()
|
407 |
416 |
self.params = dict()
|