Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / pithos / rest_api.py @ c7e9c644

History | View | Annotate | Download (31.8 kB)

1 fce31e83 Stavros Sachtouris
# Copyright 2012-2013 GRNET S.A. All rights reserved.
2 afd9d603 Stavros Sachtouris
#
3 afd9d603 Stavros Sachtouris
# Redistribution and use in source and binary forms, with or
4 afd9d603 Stavros Sachtouris
# without modification, are permitted provided that the following
5 afd9d603 Stavros Sachtouris
# conditions are met:
6 afd9d603 Stavros Sachtouris
#
7 afd9d603 Stavros Sachtouris
#   1. Redistributions of source code must retain the above
8 afd9d603 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
9 afd9d603 Stavros Sachtouris
#      disclaimer.
10 afd9d603 Stavros Sachtouris
#
11 afd9d603 Stavros Sachtouris
#   2. Redistributions in binary form must reproduce the above
12 afd9d603 Stavros Sachtouris
#      copyright notice, this list of conditions and the following
13 afd9d603 Stavros Sachtouris
#      disclaimer in the documentation and/or other materials
14 afd9d603 Stavros Sachtouris
#      provided with the distribution.
15 afd9d603 Stavros Sachtouris
#
16 afd9d603 Stavros Sachtouris
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 afd9d603 Stavros Sachtouris
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 afd9d603 Stavros Sachtouris
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 afd9d603 Stavros Sachtouris
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 afd9d603 Stavros Sachtouris
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 afd9d603 Stavros Sachtouris
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 afd9d603 Stavros Sachtouris
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 afd9d603 Stavros Sachtouris
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 afd9d603 Stavros Sachtouris
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 afd9d603 Stavros Sachtouris
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 afd9d603 Stavros Sachtouris
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 afd9d603 Stavros Sachtouris
# POSSIBILITY OF SUCH DAMAGE.
28 afd9d603 Stavros Sachtouris
#
29 afd9d603 Stavros Sachtouris
# The views and conclusions contained in the software and
30 afd9d603 Stavros Sachtouris
# documentation are those of the authors and should not be
31 afd9d603 Stavros Sachtouris
# interpreted as representing official policies, either expressed
32 afd9d603 Stavros Sachtouris
# or implied, of GRNET S.A.
33 afd9d603 Stavros Sachtouris
34 3dabe5d2 Stavros Sachtouris
from kamaki.clients.storage import StorageClient
35 06eccea2 Stavros Sachtouris
from kamaki.clients.utils import path4url
36 afd9d603 Stavros Sachtouris
37 3dabe5d2 Stavros Sachtouris
38 55faa0bc Stavros Sachtouris
class PithosRestClient(StorageClient):
39 afd9d603 Stavros Sachtouris
40 24ff0a35 Stavros Sachtouris
    def account_head(
41 24ff0a35 Stavros Sachtouris
            self,
42 24ff0a35 Stavros Sachtouris
            until=None,
43 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
44 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
45 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
46 afd9d603 Stavros Sachtouris
        """ Full Pithos+ HEAD at account level
47 9e4508df Stavros Sachtouris

48 afd9d603 Stavros Sachtouris
        --- request parameters ---
49 9e4508df Stavros Sachtouris

50 9e4508df Stavros Sachtouris
        :param until: (string) optional timestamp
51 9e4508df Stavros Sachtouris

52 9e4508df Stavros Sachtouris
        --- request headers ---
53 9e4508df Stavros Sachtouris

54 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
55 9e4508df Stavros Sachtouris
            since provided timestamp
56 9e4508df Stavros Sachtouris

57 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
58 9e4508df Stavros Sachtouris
            change since provided timestamp
59 9e4508df Stavros Sachtouris

60 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
61 afd9d603 Stavros Sachtouris
        """
62 4067cdaf Stavros Sachtouris
63 d88ba587 Stavros Sachtouris
        self._assert_account()
64 afd9d603 Stavros Sachtouris
        path = path4url(self.account)
65 afd9d603 Stavros Sachtouris
66 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
67 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
68 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
69 afd9d603 Stavros Sachtouris
70 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 204)
71 afd9d603 Stavros Sachtouris
        return self.head(path, *args, success=success, **kwargs)
72 afd9d603 Stavros Sachtouris
73 24ff0a35 Stavros Sachtouris
    def account_get(
74 24ff0a35 Stavros Sachtouris
            self,
75 24ff0a35 Stavros Sachtouris
            limit=None,
76 24ff0a35 Stavros Sachtouris
            marker=None,
77 24ff0a35 Stavros Sachtouris
            format='json',
78 24ff0a35 Stavros Sachtouris
            show_only_shared=False,
79 24ff0a35 Stavros Sachtouris
            until=None,
80 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
81 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
82 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
83 afd9d603 Stavros Sachtouris
        """  Full Pithos+ GET at account level
84 9e4508df Stavros Sachtouris

85 afd9d603 Stavros Sachtouris
        --- request parameters ---
86 9e4508df Stavros Sachtouris

87 9e4508df Stavros Sachtouris
        :param limit: (integer) The amount of results requested
88 9e4508df Stavros Sachtouris
            (server will use default value if None)
89 9e4508df Stavros Sachtouris

90 9e4508df Stavros Sachtouris
        :param marker: string Return containers with name
91 9e4508df Stavros Sachtouris
            lexicographically after marker
92 9e4508df Stavros Sachtouris

93 9e4508df Stavros Sachtouris
        :param format: (string) reply format can be json or xml
94 9e4508df Stavros Sachtouris
            (default: json)
95 9e4508df Stavros Sachtouris

96 9e4508df Stavros Sachtouris
        :param shared: (bool) If true, only shared containers will be
97 9e4508df Stavros Sachtouris
            included in results
98 9e4508df Stavros Sachtouris

99 9e4508df Stavros Sachtouris
        :param until: (string) optional timestamp
100 9e4508df Stavros Sachtouris

101 9e4508df Stavros Sachtouris
        --- request headers ---
102 9e4508df Stavros Sachtouris

103 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
104 9e4508df Stavros Sachtouris
            since provided timestamp
105 9e4508df Stavros Sachtouris

106 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
107 9e4508df Stavros Sachtouris
            changed since provided timestamp
108 9e4508df Stavros Sachtouris

109 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
110 afd9d603 Stavros Sachtouris
        """
111 4067cdaf Stavros Sachtouris
112 d88ba587 Stavros Sachtouris
        self._assert_account()
113 afd9d603 Stavros Sachtouris
114 24ff0a35 Stavros Sachtouris
        self.set_param('limit', limit, iff=limit)
115 24ff0a35 Stavros Sachtouris
        self.set_param('marker', marker, iff=marker)
116 1b4629c6 Stavros Sachtouris
        self.set_param('format', format, iff=format)
117 3dabe5d2 Stavros Sachtouris
        self.set_param('shared', iff=show_only_shared)
118 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
119 afd9d603 Stavros Sachtouris
120 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
121 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
122 afd9d603 Stavros Sachtouris
123 afd9d603 Stavros Sachtouris
        path = path4url(self.account)
124 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', (200, 204))
125 3dabe5d2 Stavros Sachtouris
        return self.get(path, *args, success=success, **kwargs)
126 afd9d603 Stavros Sachtouris
127 24ff0a35 Stavros Sachtouris
    def account_post(
128 24ff0a35 Stavros Sachtouris
            self,
129 24ff0a35 Stavros Sachtouris
            update=True,
130 24ff0a35 Stavros Sachtouris
            groups={},
131 24ff0a35 Stavros Sachtouris
            metadata=None,
132 24ff0a35 Stavros Sachtouris
            quota=None,
133 24ff0a35 Stavros Sachtouris
            versioning=None,
134 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
135 afd9d603 Stavros Sachtouris
        """ Full Pithos+ POST at account level
136 9e4508df Stavros Sachtouris

137 afd9d603 Stavros Sachtouris
        --- request parameters ---
138 9e4508df Stavros Sachtouris

139 9e4508df Stavros Sachtouris
        :param update: (bool) if True, Do not replace metadata/groups
140 9e4508df Stavros Sachtouris

141 afd9d603 Stavros Sachtouris
        --- request headers ---
142 9e4508df Stavros Sachtouris

143 9e4508df Stavros Sachtouris
        :param groups: (dict) Optional user defined groups in the form
144 9e4508df Stavros Sachtouris
            { 'group1':['user1', 'user2', ...],
145 9e4508df Stavros Sachtouris
            'group2':['userA', 'userB', ...], }
146 9e4508df Stavros Sachtouris

147 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
148 9e4508df Stavros Sachtouris
            { 'name1': 'value1', 'name2': 'value2', ... }
149 9e4508df Stavros Sachtouris

150 9e4508df Stavros Sachtouris
        :param quota: (integer) If supported, sets the Account quota
151 9e4508df Stavros Sachtouris

152 9e4508df Stavros Sachtouris
        :param versioning: (string) If supported, sets the Account versioning
153 9e4508df Stavros Sachtouris
            to 'auto' or some other supported versioning string
154 9e4508df Stavros Sachtouris

155 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
156 afd9d603 Stavros Sachtouris
        """
157 4067cdaf Stavros Sachtouris
158 d88ba587 Stavros Sachtouris
        self._assert_account()
159 afd9d603 Stavros Sachtouris
160 3dabe5d2 Stavros Sachtouris
        self.set_param('update', iff=update)
161 afd9d603 Stavros Sachtouris
162 b58c1078 Stavros Sachtouris
        if groups:
163 b58c1078 Stavros Sachtouris
            for group, usernames in groups.items():
164 b58c1078 Stavros Sachtouris
                userstr = ''
165 b58c1078 Stavros Sachtouris
                dlm = ''
166 b58c1078 Stavros Sachtouris
                for user in usernames:
167 b58c1078 Stavros Sachtouris
                    userstr = userstr + dlm + user
168 b58c1078 Stavros Sachtouris
                    dlm = ','
169 b58c1078 Stavros Sachtouris
                self.set_header('X-Account-Group-' + group, userstr)
170 24ff0a35 Stavros Sachtouris
        if metadata:
171 afd9d603 Stavros Sachtouris
            for metaname, metaval in metadata.items():
172 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Account-Meta-' + metaname, metaval)
173 afd9d603 Stavros Sachtouris
        self.set_header('X-Account-Policy-Quota', quota)
174 afd9d603 Stavros Sachtouris
        self.set_header('X-Account-Policy-Versioning', versioning)
175 afd9d603 Stavros Sachtouris
176 afd9d603 Stavros Sachtouris
        path = path4url(self.account)
177 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 202)
178 afd9d603 Stavros Sachtouris
        return self.post(path, *args, success=success, **kwargs)
179 afd9d603 Stavros Sachtouris
180 24ff0a35 Stavros Sachtouris
    def container_head(
181 24ff0a35 Stavros Sachtouris
            self,
182 24ff0a35 Stavros Sachtouris
            until=None,
183 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
184 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
185 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
186 afd9d603 Stavros Sachtouris
        """ Full Pithos+ HEAD at container level
187 9e4508df Stavros Sachtouris

188 afd9d603 Stavros Sachtouris
        --- request params ---
189 9e4508df Stavros Sachtouris

190 9e4508df Stavros Sachtouris
        :param until: (string) optional timestamp
191 9e4508df Stavros Sachtouris

192 9e4508df Stavros Sachtouris
        --- request headers ---
193 9e4508df Stavros Sachtouris

194 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
195 9e4508df Stavros Sachtouris
            since provided timestamp
196 9e4508df Stavros Sachtouris

197 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
198 9e4508df Stavros Sachtouris
            changed since provided timestamp
199 9e4508df Stavros Sachtouris

200 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
201 afd9d603 Stavros Sachtouris
        """
202 4067cdaf Stavros Sachtouris
203 d88ba587 Stavros Sachtouris
        self._assert_container()
204 afd9d603 Stavros Sachtouris
205 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
206 afd9d603 Stavros Sachtouris
207 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
208 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
209 afd9d603 Stavros Sachtouris
210 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container)
211 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 204)
212 afd9d603 Stavros Sachtouris
        return self.head(path, *args, success=success, **kwargs)
213 afd9d603 Stavros Sachtouris
214 24ff0a35 Stavros Sachtouris
    def container_get(
215 24ff0a35 Stavros Sachtouris
            self,
216 24ff0a35 Stavros Sachtouris
            limit=None,
217 24ff0a35 Stavros Sachtouris
            marker=None,
218 24ff0a35 Stavros Sachtouris
            prefix=None,
219 24ff0a35 Stavros Sachtouris
            delimiter=None,
220 24ff0a35 Stavros Sachtouris
            path=None,
221 24ff0a35 Stavros Sachtouris
            format='json',
222 24ff0a35 Stavros Sachtouris
            meta=[],
223 24ff0a35 Stavros Sachtouris
            show_only_shared=False,
224 24ff0a35 Stavros Sachtouris
            until=None,
225 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
226 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
227 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
228 afd9d603 Stavros Sachtouris
        """ Full Pithos+ GET at container level
229 9e4508df Stavros Sachtouris

230 afd9d603 Stavros Sachtouris
        --- request parameters ---
231 9e4508df Stavros Sachtouris

232 9e4508df Stavros Sachtouris
        :param limit: (integer) The amount of results requested
233 9e4508df Stavros Sachtouris
            (server will use default value if None)
234 9e4508df Stavros Sachtouris

235 9e4508df Stavros Sachtouris
        :param marker: (string) Return containers with name lexicographically
236 9e4508df Stavros Sachtouris
            after marker
237 9e4508df Stavros Sachtouris

238 9e4508df Stavros Sachtouris
        :param prefix: (string) Return objects starting with prefix
239 9e4508df Stavros Sachtouris

240 9e4508df Stavros Sachtouris
        :param delimiter: (string) Return objects up to the delimiter
241 9e4508df Stavros Sachtouris

242 9e4508df Stavros Sachtouris
        :param path: (string) assume prefix = path and delimiter = /
243 9e4508df Stavros Sachtouris
            (overwrites prefix and delimiter)
244 9e4508df Stavros Sachtouris

245 9e4508df Stavros Sachtouris
        :param format: (string) reply format can be json or xml (default:json)
246 9e4508df Stavros Sachtouris

247 9e4508df Stavros Sachtouris
        :param meta: (list) Return objects that satisfy the key queries in
248 9e4508df Stavros Sachtouris
            the specified comma separated list (use <key>, !<key> for
249 9e4508df Stavros Sachtouris
            existence queries, <key><op><value> for value queries, where <op>
250 9e4508df Stavros Sachtouris
            can be one of =, !=, <=, >=, <, >)
251 9e4508df Stavros Sachtouris

252 c7e9c644 Stavros Sachtouris
        :param show_only_shared: (bool) If true, only shared containers will
253 c7e9c644 Stavros Sachtouris
            be included in results
254 9e4508df Stavros Sachtouris

255 9e4508df Stavros Sachtouris
        :param until: (string) optional timestamp
256 9e4508df Stavros Sachtouris

257 9e4508df Stavros Sachtouris
        --- request headers ---
258 9e4508df Stavros Sachtouris

259 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
260 9e4508df Stavros Sachtouris
            since provided timestamp
261 9e4508df Stavros Sachtouris

262 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
263 9e4508df Stavros Sachtouris
            changed since provided timestamp
264 9e4508df Stavros Sachtouris

265 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
266 afd9d603 Stavros Sachtouris
        """
267 4067cdaf Stavros Sachtouris
268 d88ba587 Stavros Sachtouris
        self._assert_container()
269 afd9d603 Stavros Sachtouris
270 24ff0a35 Stavros Sachtouris
        self.set_param('limit', limit, iff=limit)
271 24ff0a35 Stavros Sachtouris
        self.set_param('marker', marker, iff=marker)
272 24ff0a35 Stavros Sachtouris
        if not path:
273 24ff0a35 Stavros Sachtouris
            self.set_param('prefix', prefix, iff=prefix)
274 24ff0a35 Stavros Sachtouris
            self.set_param('delimiter', delimiter, iff=delimiter)
275 afd9d603 Stavros Sachtouris
        else:
276 afd9d603 Stavros Sachtouris
            self.set_param('path', path)
277 c7e9c644 Stavros Sachtouris
        self.set_param('format', format, iff=format)
278 afd9d603 Stavros Sachtouris
        self.set_param('shared', iff=show_only_shared)
279 b58c1078 Stavros Sachtouris
        if meta:
280 b58c1078 Stavros Sachtouris
            self.set_param('meta',  ','.join(meta))
281 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
282 afd9d603 Stavros Sachtouris
283 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
284 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
285 afd9d603 Stavros Sachtouris
286 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container)
287 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 200)
288 afd9d603 Stavros Sachtouris
        return self.get(path, *args, success=success, **kwargs)
289 afd9d603 Stavros Sachtouris
290 24ff0a35 Stavros Sachtouris
    def container_put(
291 24ff0a35 Stavros Sachtouris
            self,
292 24ff0a35 Stavros Sachtouris
            quota=None, versioning=None, metadata=None,
293 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
294 afd9d603 Stavros Sachtouris
        """ Full Pithos+ PUT at container level
295 9e4508df Stavros Sachtouris

296 afd9d603 Stavros Sachtouris
        --- request headers ---
297 9e4508df Stavros Sachtouris

298 9e4508df Stavros Sachtouris
        :param quota: (integer) Size limit in KB
299 9e4508df Stavros Sachtouris

300 9e4508df Stavros Sachtouris
        :param versioning: (string) 'auto' or other string supported by server
301 9e4508df Stavros Sachtouris

302 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
303 9e4508df Stavros Sachtouris
            { 'name1': 'value1', 'name2': 'value2', ... }
304 9e4508df Stavros Sachtouris

305 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
306 afd9d603 Stavros Sachtouris
        """
307 d88ba587 Stavros Sachtouris
        self._assert_container()
308 afd9d603 Stavros Sachtouris
309 24ff0a35 Stavros Sachtouris
        if metadata:
310 afd9d603 Stavros Sachtouris
            for metaname, metaval in metadata.items():
311 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Container-Meta-' + metaname, metaval)
312 afd9d603 Stavros Sachtouris
        self.set_header('X-Container-Policy-Quota', quota)
313 afd9d603 Stavros Sachtouris
        self.set_header('X-Container-Policy-Versioning', versioning)
314 afd9d603 Stavros Sachtouris
315 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container)
316 3dabe5d2 Stavros Sachtouris
        success = kwargs.pop('success', (201, 202))
317 afd9d603 Stavros Sachtouris
        return self.put(path, *args, success=success, **kwargs)
318 afd9d603 Stavros Sachtouris
319 24ff0a35 Stavros Sachtouris
    def container_post(
320 24ff0a35 Stavros Sachtouris
            self,
321 24ff0a35 Stavros Sachtouris
            update=True,
322 24ff0a35 Stavros Sachtouris
            format='json',
323 24ff0a35 Stavros Sachtouris
            quota=None,
324 24ff0a35 Stavros Sachtouris
            versioning=None,
325 24ff0a35 Stavros Sachtouris
            metadata=None,
326 24ff0a35 Stavros Sachtouris
            content_type=None,
327 24ff0a35 Stavros Sachtouris
            content_length=None,
328 24ff0a35 Stavros Sachtouris
            transfer_encoding=None,
329 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
330 afd9d603 Stavros Sachtouris
        """ Full Pithos+ POST at container level
331 9e4508df Stavros Sachtouris

332 afd9d603 Stavros Sachtouris
        --- request params ---
333 9e4508df Stavros Sachtouris

334 9e4508df Stavros Sachtouris
        :param update: (bool)  if True, Do not replace metadata/groups
335 9e4508df Stavros Sachtouris

336 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
337 9e4508df Stavros Sachtouris

338 afd9d603 Stavros Sachtouris
        --- request headers ---
339 9e4508df Stavros Sachtouris

340 9e4508df Stavros Sachtouris
        :param quota: (integer) Size limit in KB
341 9e4508df Stavros Sachtouris

342 9e4508df Stavros Sachtouris
        :param versioning: (string) 'auto' or other string supported by server
343 9e4508df Stavros Sachtouris

344 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
345 9e4508df Stavros Sachtouris
            { 'name1': 'value1', 'name2': 'value2', ... }
346 9e4508df Stavros Sachtouris

347 9e4508df Stavros Sachtouris
        :param content_type: (string) set a custom content type
348 9e4508df Stavros Sachtouris

349 9e4508df Stavros Sachtouris
        :param content_length: (string) set a custrom content length
350 9e4508df Stavros Sachtouris

351 9e4508df Stavros Sachtouris
        :param transfer_encoding: (string) set a custrom transfer encoding
352 9e4508df Stavros Sachtouris

353 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
354 afd9d603 Stavros Sachtouris
        """
355 d88ba587 Stavros Sachtouris
        self._assert_container()
356 afd9d603 Stavros Sachtouris
357 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
358 afd9d603 Stavros Sachtouris
        self.set_param('update', iff=update)
359 afd9d603 Stavros Sachtouris
360 24ff0a35 Stavros Sachtouris
        if metadata:
361 afd9d603 Stavros Sachtouris
            for metaname, metaval in metadata.items():
362 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Container-Meta-' + metaname, metaval)
363 afd9d603 Stavros Sachtouris
        self.set_header('X-Container-Policy-Quota', quota)
364 afd9d603 Stavros Sachtouris
        self.set_header('X-Container-Policy-Versioning', versioning)
365 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
366 afd9d603 Stavros Sachtouris
        self.set_header('Content-Length', content_length)
367 afd9d603 Stavros Sachtouris
        self.set_header('Transfer-Encoding', transfer_encoding)
368 afd9d603 Stavros Sachtouris
369 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container)
370 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 202)
371 afd9d603 Stavros Sachtouris
        return self.post(path, *args, success=success, **kwargs)
372 afd9d603 Stavros Sachtouris
373 afd9d603 Stavros Sachtouris
    def container_delete(self, until=None, delimiter=None, *args, **kwargs):
374 afd9d603 Stavros Sachtouris
        """ Full Pithos+ DELETE at container level
375 9e4508df Stavros Sachtouris

376 afd9d603 Stavros Sachtouris
        --- request parameters ---
377 9e4508df Stavros Sachtouris

378 9e4508df Stavros Sachtouris
        :param until: (timestamp string) if defined, container is purged up to
379 9e4508df Stavros Sachtouris
            that time
380 9e4508df Stavros Sachtouris

381 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
382 afd9d603 Stavros Sachtouris
        """
383 4067cdaf Stavros Sachtouris
384 d88ba587 Stavros Sachtouris
        self._assert_container()
385 afd9d603 Stavros Sachtouris
386 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
387 24ff0a35 Stavros Sachtouris
        self.set_param('delimiter', delimiter, iff=delimiter)
388 afd9d603 Stavros Sachtouris
389 3dabe5d2 Stavros Sachtouris
        path = path4url(self.account, self.container)
390 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 204)
391 afd9d603 Stavros Sachtouris
        return self.delete(path, success=success)
392 afd9d603 Stavros Sachtouris
393 24ff0a35 Stavros Sachtouris
    def object_head(
394 24ff0a35 Stavros Sachtouris
            self, object,
395 24ff0a35 Stavros Sachtouris
            version=None,
396 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
397 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
398 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
399 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
400 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
401 afd9d603 Stavros Sachtouris
        """ Full Pithos+ HEAD at object level
402 9e4508df Stavros Sachtouris

403 afd9d603 Stavros Sachtouris
        --- request parameters ---
404 9e4508df Stavros Sachtouris

405 9e4508df Stavros Sachtouris
        :param version: (string) optional version identified
406 9e4508df Stavros Sachtouris

407 afd9d603 Stavros Sachtouris
        --- request headers ---
408 9e4508df Stavros Sachtouris

409 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
410 9e4508df Stavros Sachtouris
            with etag matching with this
411 9e4508df Stavros Sachtouris

412 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
413 9e4508df Stavros Sachtouris
            with etag not matching with this
414 9e4508df Stavros Sachtouris

415 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
416 9e4508df Stavros Sachtouris
            since provided timestamp
417 9e4508df Stavros Sachtouris

418 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
419 9e4508df Stavros Sachtouris
            changed since provided timestamp
420 9e4508df Stavros Sachtouris

421 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
422 afd9d603 Stavros Sachtouris
        """
423 4067cdaf Stavros Sachtouris
424 d88ba587 Stavros Sachtouris
        self._assert_container()
425 afd9d603 Stavros Sachtouris
426 24ff0a35 Stavros Sachtouris
        self.set_param('version', version, iff=version)
427 afd9d603 Stavros Sachtouris
428 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
429 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
430 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
431 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
432 afd9d603 Stavros Sachtouris
433 3dabe5d2 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
434 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 200)
435 afd9d603 Stavros Sachtouris
        return self.head(path, *args, success=success, **kwargs)
436 afd9d603 Stavros Sachtouris
437 24ff0a35 Stavros Sachtouris
    def object_get(
438 24ff0a35 Stavros Sachtouris
            self, object,
439 24ff0a35 Stavros Sachtouris
            format='json',
440 24ff0a35 Stavros Sachtouris
            hashmap=False,
441 24ff0a35 Stavros Sachtouris
            version=None,
442 24ff0a35 Stavros Sachtouris
            data_range=None,
443 24ff0a35 Stavros Sachtouris
            if_range=False,
444 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
445 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
446 24ff0a35 Stavros Sachtouris
            if_modified_since=None,
447 24ff0a35 Stavros Sachtouris
            if_unmodified_since=None,
448 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
449 afd9d603 Stavros Sachtouris
        """ Full Pithos+ GET at object level
450 9e4508df Stavros Sachtouris

451 afd9d603 Stavros Sachtouris
        --- request parameters ---
452 9e4508df Stavros Sachtouris

453 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
454 9e4508df Stavros Sachtouris

455 9e4508df Stavros Sachtouris
        :param hashmap: (bool) Optional request for hashmap
456 9e4508df Stavros Sachtouris

457 9e4508df Stavros Sachtouris
        :param version: (string) optional version identified
458 9e4508df Stavros Sachtouris

459 afd9d603 Stavros Sachtouris
        --- request headers ---
460 9e4508df Stavros Sachtouris

461 9e4508df Stavros Sachtouris
        :param data_range: (string) Optional range of data to retrieve
462 9e4508df Stavros Sachtouris

463 9e4508df Stavros Sachtouris
        :param if_range: (bool)
464 9e4508df Stavros Sachtouris

465 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
466 9e4508df Stavros Sachtouris
            with etag matching with this
467 9e4508df Stavros Sachtouris

468 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
469 9e4508df Stavros Sachtouris
            with etag not matching with this
470 9e4508df Stavros Sachtouris

471 9e4508df Stavros Sachtouris
        :param if_modified_since: (string) Retrieve if account has changed
472 9e4508df Stavros Sachtouris
            since provided timestamp
473 9e4508df Stavros Sachtouris

474 9e4508df Stavros Sachtouris
        :param if_unmodified_since: (string) Retrieve if account has not
475 9e4508df Stavros Sachtouris
            changed since provided timestamp
476 9e4508df Stavros Sachtouris

477 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
478 afd9d603 Stavros Sachtouris
        """
479 4067cdaf Stavros Sachtouris
480 d88ba587 Stavros Sachtouris
        self._assert_container()
481 afd9d603 Stavros Sachtouris
482 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
483 24ff0a35 Stavros Sachtouris
        self.set_param('version', version, iff=version)
484 afd9d603 Stavros Sachtouris
        self.set_param('hashmap', hashmap, iff=hashmap)
485 afd9d603 Stavros Sachtouris
486 afd9d603 Stavros Sachtouris
        self.set_header('Range', data_range)
487 2005b18e Stavros Sachtouris
        self.set_header('If-Range', '', if_range and data_range)
488 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match, )
489 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
490 afd9d603 Stavros Sachtouris
        self.set_header('If-Modified-Since', if_modified_since)
491 afd9d603 Stavros Sachtouris
        self.set_header('If-Unmodified-Since', if_unmodified_since)
492 afd9d603 Stavros Sachtouris
493 3dabe5d2 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
494 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 200)
495 afd9d603 Stavros Sachtouris
        return self.get(path, *args, success=success, **kwargs)
496 afd9d603 Stavros Sachtouris
497 24ff0a35 Stavros Sachtouris
    def object_put(
498 24ff0a35 Stavros Sachtouris
            self, object,
499 24ff0a35 Stavros Sachtouris
            format='json',
500 24ff0a35 Stavros Sachtouris
            hashmap=False,
501 24ff0a35 Stavros Sachtouris
            delimiter=None,
502 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
503 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
504 24ff0a35 Stavros Sachtouris
            etag=None,
505 24ff0a35 Stavros Sachtouris
            content_length=None,
506 24ff0a35 Stavros Sachtouris
            content_type=None,
507 24ff0a35 Stavros Sachtouris
            transfer_encoding=None,
508 24ff0a35 Stavros Sachtouris
            copy_from=None,
509 24ff0a35 Stavros Sachtouris
            move_from=None,
510 24ff0a35 Stavros Sachtouris
            source_account=None,
511 24ff0a35 Stavros Sachtouris
            source_version=None,
512 24ff0a35 Stavros Sachtouris
            content_encoding=None,
513 24ff0a35 Stavros Sachtouris
            content_disposition=None,
514 24ff0a35 Stavros Sachtouris
            manifest=None,
515 24ff0a35 Stavros Sachtouris
            permissions=None,
516 24ff0a35 Stavros Sachtouris
            public=None,
517 24ff0a35 Stavros Sachtouris
            metadata=None,
518 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
519 afd9d603 Stavros Sachtouris
        """ Full Pithos+ PUT at object level
520 9e4508df Stavros Sachtouris

521 afd9d603 Stavros Sachtouris
        --- request parameters ---
522 9e4508df Stavros Sachtouris

523 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
524 9e4508df Stavros Sachtouris

525 9e4508df Stavros Sachtouris
        :param hashmap: (bool) Optional hashmap provided instead of data
526 9e4508df Stavros Sachtouris

527 afd9d603 Stavros Sachtouris
        --- request headers ---
528 9e4508df Stavros Sachtouris

529 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
530 9e4508df Stavros Sachtouris
            with etag matching with this
531 9e4508df Stavros Sachtouris

532 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
533 9e4508df Stavros Sachtouris
            with etag not matching with this
534 9e4508df Stavros Sachtouris

535 9e4508df Stavros Sachtouris
        :param etag: (string) The MD5 hash of the object (optional to check
536 9e4508df Stavros Sachtouris
            written data)
537 9e4508df Stavros Sachtouris

538 9e4508df Stavros Sachtouris
        :param content_length: (integer) The size of the data written
539 9e4508df Stavros Sachtouris

540 9e4508df Stavros Sachtouris
        :param content_type: (string) The MIME content type of the object
541 9e4508df Stavros Sachtouris

542 9e4508df Stavros Sachtouris
        :param transfer_encoding: (string) Set to chunked to specify
543 9e4508df Stavros Sachtouris
            incremental uploading (if used, Content-Length is ignored)
544 9e4508df Stavros Sachtouris

545 9e4508df Stavros Sachtouris
        :param copy_from: (string) The source path in the form
546 9e4508df Stavros Sachtouris
            /<container>/<object>
547 9e4508df Stavros Sachtouris

548 9e4508df Stavros Sachtouris
        :param move_from: (string) The source path in the form
549 9e4508df Stavros Sachtouris
            /<container>/<object>
550 9e4508df Stavros Sachtouris

551 9e4508df Stavros Sachtouris
        :param source_account: (string) The source account to copy/move from
552 9e4508df Stavros Sachtouris

553 9e4508df Stavros Sachtouris
        :param source_version: (string) The source version to copy from
554 9e4508df Stavros Sachtouris

555 9e4508df Stavros Sachtouris
        :param conent_encoding: (string) The encoding of the object
556 9e4508df Stavros Sachtouris

557 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Presentation style of the object
558 9e4508df Stavros Sachtouris

559 9e4508df Stavros Sachtouris
        :param manifest: (string) Object parts prefix in
560 9e4508df Stavros Sachtouris
            /<container>/<object> form
561 9e4508df Stavros Sachtouris

562 9e4508df Stavros Sachtouris
        :param permissions: (dict) Object permissions in the form (all fields
563 9e4508df Stavros Sachtouris
            are optional)
564 9e4508df Stavros Sachtouris
            { 'read':[user1, group1, user2, ...],
565 9e4508df Stavros Sachtouris
            'write':['user3, group2, group3, ...] }
566 9e4508df Stavros Sachtouris

567 9e4508df Stavros Sachtouris
        :param public: (bool) If true, Object is publicly accessible,
568 9e4508df Stavros Sachtouris
            if false, not
569 9e4508df Stavros Sachtouris

570 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
571 9e4508df Stavros Sachtouris
            {'meta-key-1':'meta-value-1', 'meta-key-2':'meta-value-2', ...}
572 9e4508df Stavros Sachtouris

573 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
574 afd9d603 Stavros Sachtouris
        """
575 4067cdaf Stavros Sachtouris
576 d88ba587 Stavros Sachtouris
        self._assert_container()
577 afd9d603 Stavros Sachtouris
578 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
579 afd9d603 Stavros Sachtouris
        self.set_param('hashmap', hashmap, iff=hashmap)
580 24ff0a35 Stavros Sachtouris
        self.set_param('delimiter', delimiter, iff=delimiter)
581 afd9d603 Stavros Sachtouris
582 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
583 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
584 afd9d603 Stavros Sachtouris
        self.set_header('ETag', etag)
585 afd9d603 Stavros Sachtouris
        self.set_header('Content-Length', content_length)
586 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
587 afd9d603 Stavros Sachtouris
        self.set_header('Transfer-Encoding', transfer_encoding)
588 afd9d603 Stavros Sachtouris
        self.set_header('X-Copy-From', copy_from)
589 afd9d603 Stavros Sachtouris
        self.set_header('X-Move-From', move_from)
590 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Account', source_account)
591 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Version', source_version)
592 afd9d603 Stavros Sachtouris
        self.set_header('Content-Encoding', content_encoding)
593 afd9d603 Stavros Sachtouris
        self.set_header('Content-Disposition', content_disposition)
594 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Manifest', manifest)
595 3dabe5d2 Stavros Sachtouris
        if permissions:
596 b58c1078 Stavros Sachtouris
            perms = None
597 b58c1078 Stavros Sachtouris
            if permissions:
598 b58c1078 Stavros Sachtouris
                for perm_type, perm_list in permissions.items():
599 b58c1078 Stavros Sachtouris
                    if not perms:
600 b58c1078 Stavros Sachtouris
                        perms = ''  # Remove permissions
601 b58c1078 Stavros Sachtouris
                    if perm_list:
602 b58c1078 Stavros Sachtouris
                        perms += ';' if perms else ''
603 b58c1078 Stavros Sachtouris
                        perms += '%s=%s' % (perm_type, ','.join(perm_list))
604 b58c1078 Stavros Sachtouris
            self.set_header('X-Object-Sharing', perms)
605 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Public', public)
606 24ff0a35 Stavros Sachtouris
        if metadata:
607 afd9d603 Stavros Sachtouris
            for key, val in metadata.items():
608 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Object-Meta-' + key, val)
609 afd9d603 Stavros Sachtouris
610 3dabe5d2 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
611 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 201)
612 afd9d603 Stavros Sachtouris
        return self.put(path, *args, success=success, **kwargs)
613 afd9d603 Stavros Sachtouris
614 24ff0a35 Stavros Sachtouris
    def object_copy(
615 24ff0a35 Stavros Sachtouris
            self, object, destination,
616 24ff0a35 Stavros Sachtouris
            format='json',
617 24ff0a35 Stavros Sachtouris
            ignore_content_type=False,
618 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
619 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
620 24ff0a35 Stavros Sachtouris
            destination_account=None,
621 24ff0a35 Stavros Sachtouris
            content_type=None,
622 24ff0a35 Stavros Sachtouris
            content_encoding=None,
623 24ff0a35 Stavros Sachtouris
            content_disposition=None,
624 24ff0a35 Stavros Sachtouris
            source_version=None,
625 24ff0a35 Stavros Sachtouris
            permissions=None,
626 24ff0a35 Stavros Sachtouris
            public=False,
627 24ff0a35 Stavros Sachtouris
            metadata=None,
628 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
629 afd9d603 Stavros Sachtouris
        """ Full Pithos+ COPY at object level
630 9e4508df Stavros Sachtouris

631 afd9d603 Stavros Sachtouris
        --- request parameters ---
632 9e4508df Stavros Sachtouris

633 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
634 9e4508df Stavros Sachtouris

635 9e4508df Stavros Sachtouris
        :param ignore_content_type: (bool) Ignore the supplied Content-Type
636 9e4508df Stavros Sachtouris

637 afd9d603 Stavros Sachtouris
        --- request headers ---
638 9e4508df Stavros Sachtouris

639 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, copy only results
640 9e4508df Stavros Sachtouris
            with etag matching with this
641 9e4508df Stavros Sachtouris

642 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, copy only results
643 9e4508df Stavros Sachtouris
            with etag not matching with this
644 9e4508df Stavros Sachtouris

645 9e4508df Stavros Sachtouris
        :param destination: (string) The destination path in the form
646 9e4508df Stavros Sachtouris
            /<container>/<object>
647 9e4508df Stavros Sachtouris

648 9e4508df Stavros Sachtouris
        :param destination_account: (string) The destination account to copy to
649 9e4508df Stavros Sachtouris

650 9e4508df Stavros Sachtouris
        :param content_type: (string) The MIME content type of the object
651 9e4508df Stavros Sachtouris

652 9e4508df Stavros Sachtouris
        :param content_encoding: (string) The encoding of the object
653 9e4508df Stavros Sachtouris

654 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Object resentation style
655 9e4508df Stavros Sachtouris

656 9e4508df Stavros Sachtouris
        :param source_version: (string) The source version to copy from
657 9e4508df Stavros Sachtouris

658 9e4508df Stavros Sachtouris
        :param permissions: (dict) Object permissions in the form
659 9e4508df Stavros Sachtouris
            (all fields are optional)
660 9e4508df Stavros Sachtouris
            { 'read':[user1, group1, user2, ...],
661 9e4508df Stavros Sachtouris
            'write':['user3, group2, group3, ...] }
662 9e4508df Stavros Sachtouris

663 9e4508df Stavros Sachtouris
        :param permissions: update permissions
664 9e4508df Stavros Sachtouris

665 9e4508df Stavros Sachtouris
        :param public: (bool) If true, Object is publicly accessible
666 9e4508df Stavros Sachtouris

667 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
668 9e4508df Stavros Sachtouris
            {'meta-key-1':'meta-value-1', 'meta-key-2':'meta-value-2', ...}
669 9e4508df Stavros Sachtouris
            Metadata are appended to the source metadata. In case of same
670 9e4508df Stavros Sachtouris
            keys, they replace the old metadata
671 9e4508df Stavros Sachtouris

672 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
673 afd9d603 Stavros Sachtouris
        """
674 4067cdaf Stavros Sachtouris
675 d88ba587 Stavros Sachtouris
        self._assert_container()
676 afd9d603 Stavros Sachtouris
677 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
678 afd9d603 Stavros Sachtouris
        self.set_param('ignore_content_type', iff=ignore_content_type)
679 afd9d603 Stavros Sachtouris
680 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
681 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
682 afd9d603 Stavros Sachtouris
        self.set_header('Destination', destination)
683 afd9d603 Stavros Sachtouris
        self.set_header('Destination-Account', destination_account)
684 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
685 afd9d603 Stavros Sachtouris
        self.set_header('Content-Encoding', content_encoding)
686 afd9d603 Stavros Sachtouris
        self.set_header('Content-Disposition', content_disposition)
687 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Version', source_version)
688 3dabe5d2 Stavros Sachtouris
        if permissions:
689 b58c1078 Stavros Sachtouris
            perms = ''
690 b58c1078 Stavros Sachtouris
            for perm_type, perm_list in permissions.items():
691 24ff0a35 Stavros Sachtouris
                if not perms:
692 3dabe5d2 Stavros Sachtouris
                    perms = ''  # Remove permissions
693 b58c1078 Stavros Sachtouris
                if perm_list:
694 b58c1078 Stavros Sachtouris
                    perms += ';' if perms else ''
695 b58c1078 Stavros Sachtouris
                    perms += '%s=%s' % (perm_type, ','.join(perm_list))
696 b58c1078 Stavros Sachtouris
            self.set_header('X-Object-Sharing', perms)
697 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Public', public)
698 24ff0a35 Stavros Sachtouris
        if metadata:
699 afd9d603 Stavros Sachtouris
            for key, val in metadata.items():
700 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Object-Meta-' + key, val)
701 afd9d603 Stavros Sachtouris
702 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
703 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 201)
704 afd9d603 Stavros Sachtouris
        return self.copy(path, *args, success=success, **kwargs)
705 afd9d603 Stavros Sachtouris
706 24ff0a35 Stavros Sachtouris
    def object_move(
707 24ff0a35 Stavros Sachtouris
            self, object,
708 24ff0a35 Stavros Sachtouris
            format='json',
709 24ff0a35 Stavros Sachtouris
            ignore_content_type=False,
710 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
711 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
712 24ff0a35 Stavros Sachtouris
            destination=None,
713 24ff0a35 Stavros Sachtouris
            destination_account=None,
714 24ff0a35 Stavros Sachtouris
            content_type=None,
715 24ff0a35 Stavros Sachtouris
            content_encoding=None,
716 24ff0a35 Stavros Sachtouris
            content_disposition=None,
717 24ff0a35 Stavros Sachtouris
            permissions={},
718 24ff0a35 Stavros Sachtouris
            public=False,
719 24ff0a35 Stavros Sachtouris
            metadata={},
720 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
721 afd9d603 Stavros Sachtouris
        """ Full Pithos+ COPY at object level
722 9e4508df Stavros Sachtouris

723 afd9d603 Stavros Sachtouris
        --- request parameters ---
724 9e4508df Stavros Sachtouris

725 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
726 9e4508df Stavros Sachtouris

727 9e4508df Stavros Sachtouris
        :param ignore_content_type: (bool) Ignore the supplied Content-Type
728 9e4508df Stavros Sachtouris

729 afd9d603 Stavros Sachtouris
        --- request headers ---
730 9e4508df Stavros Sachtouris

731 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
732 9e4508df Stavros Sachtouris
            with etag matching with this
733 9e4508df Stavros Sachtouris

734 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
735 9e4508df Stavros Sachtouris
            with etag not matching with this
736 9e4508df Stavros Sachtouris

737 9e4508df Stavros Sachtouris
        :param destination: (string) The destination path in the form
738 9e4508df Stavros Sachtouris
            /<container>/<object>
739 9e4508df Stavros Sachtouris

740 9e4508df Stavros Sachtouris
        :param destination_account: (string) The destination account to copy to
741 9e4508df Stavros Sachtouris

742 9e4508df Stavros Sachtouris
        :param content_type: (string) The MIME content type of the object
743 9e4508df Stavros Sachtouris

744 9e4508df Stavros Sachtouris
        :param content_encoding: (string) The encoding of the object
745 9e4508df Stavros Sachtouris

746 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Object presentation style
747 9e4508df Stavros Sachtouris

748 9e4508df Stavros Sachtouris
        :param source_version: (string) The source version to copy from
749 9e4508df Stavros Sachtouris

750 9e4508df Stavros Sachtouris
        :param permissions: (dict) Object permissions in the form
751 9e4508df Stavros Sachtouris
            (all fields are optional)
752 9e4508df Stavros Sachtouris
            { 'read':[user1, group1, user2, ...],
753 9e4508df Stavros Sachtouris
            'write':['user3, group2, group3, ...] }
754 9e4508df Stavros Sachtouris

755 9e4508df Stavros Sachtouris
        :param public: (bool) If true, Object is publicly accessible
756 9e4508df Stavros Sachtouris

757 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
758 9e4508df Stavros Sachtouris
            {'meta-key-1':'meta-value-1', 'meta-key-2':'meta-value-2', ...}
759 9e4508df Stavros Sachtouris

760 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
761 afd9d603 Stavros Sachtouris
        """
762 4067cdaf Stavros Sachtouris
763 d88ba587 Stavros Sachtouris
        self._assert_container()
764 afd9d603 Stavros Sachtouris
765 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
766 afd9d603 Stavros Sachtouris
        self.set_param('ignore_content_type', iff=ignore_content_type)
767 afd9d603 Stavros Sachtouris
768 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
769 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
770 afd9d603 Stavros Sachtouris
        self.set_header('Destination', destination)
771 afd9d603 Stavros Sachtouris
        self.set_header('Destination-Account', destination_account)
772 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
773 afd9d603 Stavros Sachtouris
        self.set_header('Content-Encoding', content_encoding)
774 afd9d603 Stavros Sachtouris
        self.set_header('Content-Disposition', content_disposition)
775 b58c1078 Stavros Sachtouris
        if permissions:
776 b58c1078 Stavros Sachtouris
            perms = ''
777 b58c1078 Stavros Sachtouris
            for perm_type, perm_list in permissions.items():
778 b58c1078 Stavros Sachtouris
                if not perms:
779 b58c1078 Stavros Sachtouris
                    perms = ''  # Remove permissions
780 b58c1078 Stavros Sachtouris
                if perm_list:
781 b58c1078 Stavros Sachtouris
                    perms += ';' if perms else ''
782 b58c1078 Stavros Sachtouris
                    perms += '%s=%s' % (perm_type, ','.join(perm_list))
783 b58c1078 Stavros Sachtouris
            self.set_header('X-Object-Sharing', perms)
784 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Public', public)
785 b58c1078 Stavros Sachtouris
        if metadata:
786 b58c1078 Stavros Sachtouris
            for key, val in metadata.items():
787 b58c1078 Stavros Sachtouris
                self.set_header('X-Object-Meta-' + key, val)
788 afd9d603 Stavros Sachtouris
789 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
790 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 201)
791 afd9d603 Stavros Sachtouris
        return self.move(path, *args, success=success, **kwargs)
792 afd9d603 Stavros Sachtouris
793 24ff0a35 Stavros Sachtouris
    def object_post(
794 24ff0a35 Stavros Sachtouris
            self, object,
795 24ff0a35 Stavros Sachtouris
            format='json',
796 24ff0a35 Stavros Sachtouris
            update=True,
797 24ff0a35 Stavros Sachtouris
            if_etag_match=None,
798 24ff0a35 Stavros Sachtouris
            if_etag_not_match=None,
799 24ff0a35 Stavros Sachtouris
            content_length=None,
800 24ff0a35 Stavros Sachtouris
            content_type=None,
801 24ff0a35 Stavros Sachtouris
            content_range=None,
802 24ff0a35 Stavros Sachtouris
            transfer_encoding=None,
803 24ff0a35 Stavros Sachtouris
            content_encoding=None,
804 24ff0a35 Stavros Sachtouris
            content_disposition=None,
805 24ff0a35 Stavros Sachtouris
            source_object=None,
806 24ff0a35 Stavros Sachtouris
            source_account=None,
807 24ff0a35 Stavros Sachtouris
            source_version=None,
808 24ff0a35 Stavros Sachtouris
            object_bytes=None,
809 24ff0a35 Stavros Sachtouris
            manifest=None,
810 24ff0a35 Stavros Sachtouris
            permissions={},
811 24ff0a35 Stavros Sachtouris
            public=False,
812 24ff0a35 Stavros Sachtouris
            metadata={},
813 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
814 afd9d603 Stavros Sachtouris
        """ Full Pithos+ POST at object level
815 9e4508df Stavros Sachtouris

816 afd9d603 Stavros Sachtouris
        --- request parameters ---
817 9e4508df Stavros Sachtouris

818 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
819 9e4508df Stavros Sachtouris

820 9e4508df Stavros Sachtouris
        :param update: (bool) Do not replace metadata
821 9e4508df Stavros Sachtouris

822 afd9d603 Stavros Sachtouris
        --- request headers ---
823 9e4508df Stavros Sachtouris

824 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
825 9e4508df Stavros Sachtouris
            with etag matching with this
826 9e4508df Stavros Sachtouris

827 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
828 9e4508df Stavros Sachtouris
            with etag not matching with this
829 9e4508df Stavros Sachtouris

830 9e4508df Stavros Sachtouris
        :param content_length: (string) The size of the data written
831 9e4508df Stavros Sachtouris

832 9e4508df Stavros Sachtouris
        :param content_type: (string) The MIME content type of the object
833 9e4508df Stavros Sachtouris

834 9e4508df Stavros Sachtouris
        :param content_range: (string) The range of data supplied
835 9e4508df Stavros Sachtouris

836 9e4508df Stavros Sachtouris
        :param transfer_encoding: (string) Set to chunked to specify
837 9e4508df Stavros Sachtouris
            incremental uploading (if used, Content-Length is ignored)
838 9e4508df Stavros Sachtouris

839 9e4508df Stavros Sachtouris
        :param content_encoding: (string) The encoding of the object
840 9e4508df Stavros Sachtouris

841 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Object presentation style
842 9e4508df Stavros Sachtouris

843 9e4508df Stavros Sachtouris
        :param source_object: (string) Update with data from the object at
844 9e4508df Stavros Sachtouris
            path /<container>/<object>
845 9e4508df Stavros Sachtouris

846 9e4508df Stavros Sachtouris
        :param source_account: (string) The source account to update from
847 9e4508df Stavros Sachtouris

848 9e4508df Stavros Sachtouris
        :param source_version: (string) The source version to copy from
849 9e4508df Stavros Sachtouris

850 9e4508df Stavros Sachtouris
        :param object_bytes: (integer) The updated objects final size
851 9e4508df Stavros Sachtouris

852 9e4508df Stavros Sachtouris
        :param manifest: (string) Object parts prefix as /<container>/<object>
853 9e4508df Stavros Sachtouris

854 9e4508df Stavros Sachtouris
        :param permissions: (dict) Object permissions in the form (all fields
855 9e4508df Stavros Sachtouris
            are optional)
856 9e4508df Stavros Sachtouris
            { 'read':[user1, group1, user2, ...],
857 9e4508df Stavros Sachtouris
            'write':['user3, group2, group3, ...] }
858 9e4508df Stavros Sachtouris

859 9e4508df Stavros Sachtouris
        :param public: (bool) If true, Object is publicly accessible
860 9e4508df Stavros Sachtouris

861 9e4508df Stavros Sachtouris
        :param metadata: (dict) Optional user defined metadata in the form
862 9e4508df Stavros Sachtouris
            {'meta-key-1':'meta-value-1', 'meta-key-2':'meta-value-2', ...}
863 9e4508df Stavros Sachtouris

864 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
865 afd9d603 Stavros Sachtouris
        """
866 4067cdaf Stavros Sachtouris
867 d88ba587 Stavros Sachtouris
        self._assert_container()
868 afd9d603 Stavros Sachtouris
869 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
870 3dabe5d2 Stavros Sachtouris
        self.set_param('update', iff=update)
871 afd9d603 Stavros Sachtouris
872 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
873 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
874 24ff0a35 Stavros Sachtouris
        self.set_header(
875 24ff0a35 Stavros Sachtouris
            'Content-Length',
876 3dabe5d2 Stavros Sachtouris
            content_length,
877 24ff0a35 Stavros Sachtouris
            iff=not transfer_encoding)
878 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
879 afd9d603 Stavros Sachtouris
        self.set_header('Content-Range', content_range)
880 afd9d603 Stavros Sachtouris
        self.set_header('Transfer-Encoding', transfer_encoding)
881 afd9d603 Stavros Sachtouris
        self.set_header('Content-Encoding', content_encoding)
882 afd9d603 Stavros Sachtouris
        self.set_header('Content-Disposition', content_disposition)
883 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Object', source_object)
884 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Account', source_account)
885 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Version', source_version)
886 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Bytes', object_bytes)
887 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Manifest', manifest)
888 b58c1078 Stavros Sachtouris
        if permissions:
889 b58c1078 Stavros Sachtouris
            perms = ''
890 b58c1078 Stavros Sachtouris
            for perm_type, perm_list in permissions.items():
891 b58c1078 Stavros Sachtouris
                if not perms:
892 b58c1078 Stavros Sachtouris
                    perms = ''  # Remove permissions
893 b58c1078 Stavros Sachtouris
                if perm_list:
894 b58c1078 Stavros Sachtouris
                    perms += ';' if perms else ''
895 b58c1078 Stavros Sachtouris
                    perms += '%s=%s' % (perm_type, ','.join(perm_list))
896 b58c1078 Stavros Sachtouris
                self.set_header('X-Object-Sharing', perms)
897 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Public', public)
898 afd9d603 Stavros Sachtouris
        for key, val in metadata.items():
899 3dabe5d2 Stavros Sachtouris
            self.set_header('X-Object-Meta-' + key, val)
900 afd9d603 Stavros Sachtouris
901 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
902 3dabe5d2 Stavros Sachtouris
        success = kwargs.pop('success', (202, 204))
903 afd9d603 Stavros Sachtouris
        return self.post(path, *args, success=success, **kwargs)
904 3dabe5d2 Stavros Sachtouris
905 24ff0a35 Stavros Sachtouris
    def object_delete(
906 24ff0a35 Stavros Sachtouris
            self, object,
907 24ff0a35 Stavros Sachtouris
            until=None, delimiter=None,
908 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
909 afd9d603 Stavros Sachtouris
        """ Full Pithos+ DELETE at object level
910 9e4508df Stavros Sachtouris

911 3dabe5d2 Stavros Sachtouris
        --- request parameters ---
912 9e4508df Stavros Sachtouris

913 9e4508df Stavros Sachtouris
        :param until: (string) Optional timestamp
914 9e4508df Stavros Sachtouris

915 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
916 afd9d603 Stavros Sachtouris
        """
917 d88ba587 Stavros Sachtouris
        self._assert_container()
918 afd9d603 Stavros Sachtouris
919 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
920 24ff0a35 Stavros Sachtouris
        self.set_param('delimiter', delimiter, iff=delimiter)
921 afd9d603 Stavros Sachtouris
922 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
923 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 204)
924 3dabe5d2 Stavros Sachtouris
        return self.delete(path, *args, success=success, **kwargs)