Revision 3dabe5d2 kamaki/clients/connection/kamakicon.py

b/kamaki/clients/connection/kamakicon.py
34 34
from urlparse import urlparse
35 35
#from .pool.http import get_http_connection
36 36
from synnefo.lib.pool.http import get_http_connection
37
from kamaki.clients.connection import HTTPConnection, HTTPResponse, HTTPConnectionError
37
from kamaki.clients.connection import HTTPConnection, HTTPResponse,\
38
    HTTPConnectionError
38 39
from gevent.dns import DNSError
39 40
from socket import gaierror
40 41

  
......
43 44
from time import sleep
44 45
from httplib import ResponseNotReady
45 46

  
47

  
46 48
class KamakiHTTPResponse(HTTPResponse):
47 49

  
48 50
    def _get_response(self):
......
59 61
            break
60 62
        self.prefetched = True
61 63
        headers = {}
62
        for k,v in r.getheaders():
63
            headers.update({k:v})
64
        for k, v in r.getheaders():
65
            headers.update({k: v})
64 66
        self.headers = headers
65 67
        self.content = r.read()
66 68
        self.status_code = r.status
67 69
        self.status = r.reason
68 70
        self.request.close()
69 71

  
70
    @property 
72
    @property
71 73
    def text(self):
72 74
        self._get_response()
73 75
        return self._content
76

  
74 77
    @text.setter
75 78
    def test(self, v):
76 79
        pass
77 80

  
78
    @property 
81
    @property
79 82
    def json(self):
80 83
        self._get_response()
81 84
        try:
82 85
            return loads(self._content)
83 86
        except ValueError as err:
84
            HTTPConnectionError('Response not formated in JSON', details=unicode(err), status=702)
87
            HTTPConnectionError('Response not formated in JSON',
88
                details=unicode(err),
89
                status=702)
90

  
85 91
    @json.setter
86 92
    def json(self, v):
87 93
        pass
......
97 103
        """ return (scheme, netloc, url?with&params) """
98 104
        url = self.url
99 105
        params = dict(self.params)
100
        for k,v in extra_params.items():
106
        for k, v in extra_params.items():
101 107
            params[k] = v
102
        for i,(key, val) in enumerate(params.items()):
103
            param_str = ('?' if i == 0 else '&') + unicode(key) 
108
        for i, (key, val) in enumerate(params.items()):
109
            param_str = ('?' if i == 0 else '&') + unicode(key)
104 110
            if val is not None:
105
                param_str+= '='+unicode(val)
111
                param_str += '=' + unicode(val)
106 112
            url += param_str
107 113

  
108 114
        parsed = urlparse(self.url)
109 115
        self.url = url
110 116
        return (parsed.scheme, parsed.netloc)
111 117

  
112
    def perform_request(self, method=None, data=None, async_headers={}, async_params={}):
113
        (scheme, netloc) = self._retrieve_connection_info(extra_params=async_params)
118
    def perform_request(self,
119
        method=None,
120
        data=None,
121
        async_headers={},
122
        async_params={}):
123
        (scheme, netloc) = self._retrieve_connection_info(
124
            extra_params=async_params)
114 125
        headers = dict(self.headers)
115
        for k,v in async_headers.items():
126
        for k, v in async_headers.items():
116 127
            headers[k] = v
117 128

  
118 129
        #de-unicode headers to prepare them for http
119 130
        http_headers = {}
120
        for k,v in headers.items():
131
        for k, v in headers.items():
121 132
            http_headers[str(k)] = str(v)
122 133

  
123 134
        #get connection from pool
124 135
        conn = get_http_connection(netloc=netloc, scheme=scheme)
125 136
        try:
126 137
            #Be carefull, all non-body variables should not be unicode
127
            conn.request(method = str(method.upper()),
138
            conn.request(method=str(method.upper()),
128 139
                url=str(self.url),
129 140
                headers=http_headers,
130 141
                body=data)
131 142
        except Exception as err:
132 143
            conn.close()
133 144
            if isinstance(err, DNSError) or isinstance(err, gaierror):
134
                raise HTTPConnectionError('Cannot connect to %s'%self.url, status=701,
135
                    details='%s: %s'%(type(err),unicode(err)))
145
                raise HTTPConnectionError('Cannot connect to %s' % self.url,
146
                    status=701,
147
                    details='%s: %s' % (type(err), unicode(err)))
136 148
            raise
137 149
        return KamakiHTTPResponse(conn)

Also available in: Unified diff