# interpreted as representing official policies, either expressed
# or implied, of GRNET S.A.
-from urllib2 import quote
+from urllib2 import quote, unquote
from urlparse import urlparse
from threading import Thread
from json import dumps, loads
from httplib import ResponseNotReady
from time import sleep
from random import random
+from logging import getLogger
from objpool.http import PooledHTTPConnection
-from kamaki.logger import add_file_logger, get_log_filename
TIMEOUT = 60.0 # seconds
HTTP_METHODS = ['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'COPY', 'MOVE']
-log = add_file_logger(__name__)
-log.debug('Logging location: %s' % get_log_filename())
-sendlog = add_file_logger('%s.send' % __name__)
-recvlog = add_file_logger('%s.recv' % __name__)
+log = getLogger(__name__)
+sendlog = getLogger('%s.send' % __name__)
+recvlog = getLogger('%s.recv' % __name__)
def _encode(v):
:returns: (scheme, netloc)
"""
- url = _encode(url) if url else 'http://127.0.0.1/'
+ url = _encode(str(url)) if url else 'http://127.0.0.1/'
url += '' if url.endswith('/') else '/'
if path:
url += _encode(path[1:] if path.startswith('/') else path)
self.method, self.data = method, data
self.scheme, self.netloc = self._connection_info(url, path, params)
- def log(self):
+ def dump_log(self):
sendlog.info('%s %s://%s%s\t[%s]' % (
- self.method,
- self.scheme,
- self.netloc,
- self.path,
- self))
+ self.method, self.scheme, self.netloc, self.path, self))
for key, val in self.headers.items():
if (not self.LOG_TOKEN) and key.lower() == 'x-auth-token':
continue
url=str(self.path),
headers=self.headers,
body=self.data)
- self.log()
+ self.dump_log()
keep_trying = TIMEOUT
while keep_trying > 0:
try:
recvlog.info('\n%s <-- %s <-- [req: %s]\n' % (
self, r, self.request))
self._request_performed = True
- self._status_code, self._status = r.status, r.reason
+ self._status_code, self._status = r.status, unquote(r.reason)
recvlog.info(
'%d %s\t[p: %s]' % (self.status_code, self.status, self))
self._headers = dict()
for k, v in r.getheaders():
if (not self.LOG_TOKEN) and k.lower() == 'x-auth-token':
continue
+ v = unquote(v)
self._headers[k] = v
recvlog.info(' %s: %s\t[p: %s]' % (k, v, self))
self._content = r.read()
LOG_DATA = False
def __init__(self, base_url, token):
+ assert base_url, 'No base_url for client %s' % self
self.base_url = base_url
self.token = token
self.headers, self.params = dict(), dict()
def set_header(self, name, value, iff=True):
"""Set a header 'name':'value'"""
if value is not None and iff:
- self.headers[name] = value
+ self.headers[name] = unicode(value)
def set_param(self, name, value=None, iff=True):
if iff:
- self.params[name] = value
+ self.params[name] = unicode(value)
def request(
self, method, path,