Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / connection / __init__.py @ e9304ec6

History | View | Annotate | Download (4.5 kB)

1
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, self.list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, self.list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34

    
35
class HTTPResponse(object):
36

    
37
    def __init__(self, request=None, prefetched=False):
38
        self.request = request
39
        self.prefetched = prefetched
40

    
41
    def _get_response(self):
42
        """Wait for http response as late as possible: the first time needed"""
43
        if self.prefetched:
44
            return
45
        self = self.request.response
46
        self.prefetched = True
47

    
48
    def release(self):
49
        """Release the connection.
50
        Use this after finished using the response"""
51
        raise NotImplementedError
52

    
53
    @property
54
    def prefetched(self):
55
        return self._prefetched
56

    
57
    @prefetched.setter
58
    def prefetched(self, p):
59
        self._prefetched = p
60

    
61
    @property
62
    def content(self):
63
        self._get_response()
64
        return self._content
65

    
66
    @content.setter
67
    def content(self, v):
68
        self._content = v
69

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

    
75
    @text.setter
76
    def text(self, v):
77
        self._text = v
78

    
79
    @property
80
    def json(self):
81
        self._get_response()
82
        return self._json
83

    
84
    @json.setter
85
    def json(self, v):
86
        self._json = v
87

    
88
    @property
89
    def headers(self):
90
        self._get_response()
91
        return self._headers
92

    
93
    @headers.setter
94
    def headers(self, v):
95
        self._headers = v
96

    
97
    @property
98
    def status_code(self):
99
        self._get_response()
100
        return self._status_code
101

    
102
    @status_code.setter
103
    def status_code(self, v):
104
        self._status_code = v
105

    
106
    @property
107
    def status(self):
108
        self._get_response()
109
        return self._status
110

    
111
    @status.setter
112
    def status(self, v):
113
        self._status = v
114

    
115
    @property
116
    def request(self):
117
        return self._request
118

    
119
    @request.setter
120
    def request(self, v):
121
        self._request = v
122

    
123

    
124
class HTTPConnection(object):
125

    
126
    def __init__(self, method=None, url=None, params={}, headers={}):
127
        self.headers = headers
128
        self.params = params
129
        self.url = url
130
        self.path = ''
131
        self.method = method
132

    
133
    def set_header(self, name, value):
134
        self.headers[unicode(name)] = unicode(value)
135

    
136
    def remove_header(self, name):
137
        try:
138
            self.headers.pop(name)
139
        except KeyError:
140
            pass
141

    
142
    def replace_headers(self, new_headers):
143
        self.headers = new_headers
144

    
145
    def reset_headers(self):
146
        self.replace_headers({})
147

    
148
    def set_param(self, name, value=None):
149
        self.params[name] = value
150

    
151
    def remove_param(self, name):
152
        try:
153
            self.params.pop(name)
154
        except KeyError:
155
            pass
156

    
157
    def replace_params(self, new_params):
158
        self.params = new_params
159

    
160
    def reset_params(self):
161
        self.replace_params({})
162

    
163
    def set_url(self, url):
164
        self.url = url
165

    
166
    def set_path(self, path):
167
        self.path = path
168

    
169
    def set_method(self, method):
170
        self.method = method
171

    
172
    def perform_request(self,
173
        method=None,
174
        url=None,
175
        async_headers={},
176
        async_params={},
177
        data=None):
178
        raise NotImplementedError