Statistics
| Branch: | Tag: | Revision:

root / kamaki / clients / pithos / rest_api.py @ 5c2058e7

History | View | Annotate | Download (31.4 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 b773795c 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 1df0b0aa Stavros Sachtouris
        self.set_header('X-Container-Policy-Quota', quota)
310 1df0b0aa Stavros Sachtouris
        self.set_header('X-Container-Policy-Versioning', versioning)
311 24ff0a35 Stavros Sachtouris
        if metadata:
312 afd9d603 Stavros Sachtouris
            for metaname, metaval in metadata.items():
313 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Container-Meta-' + metaname, metaval)
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 7702c429 Stavros Sachtouris
        :param transfer_encoding: (string) set a custom 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 b773795c Stavros Sachtouris
        self.set_param('update', '', iff=update)
358 7702c429 Stavros Sachtouris
        self.set_param('format', format, iff=format)
359 afd9d603 Stavros Sachtouris
360 7702c429 Stavros Sachtouris
        self.set_header('X-Container-Policy-Quota', quota)
361 7702c429 Stavros Sachtouris
        self.set_header('X-Container-Policy-Versioning', versioning)
362 24ff0a35 Stavros Sachtouris
        if metadata:
363 afd9d603 Stavros Sachtouris
            for metaname, metaval in metadata.items():
364 3dabe5d2 Stavros Sachtouris
                self.set_header('X-Container-Meta-' + metaname, metaval)
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 faa4a3ea Stavros Sachtouris
        return self.delete(path, *args, success=success, **kwargs)
392 afd9d603 Stavros Sachtouris
393 24ff0a35 Stavros Sachtouris
    def object_head(
394 fa27f71a Stavros Sachtouris
            self, obj,
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 fa27f71a Stavros Sachtouris
        path = path4url(self.account, self.container, obj)
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 1b80cb25 Stavros Sachtouris
            self, obj,
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 afd9d603 Stavros Sachtouris
        self.set_param('hashmap', hashmap, iff=hashmap)
484 1b80cb25 Stavros Sachtouris
        self.set_param('version', version, iff=version)
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 1b80cb25 Stavros Sachtouris
        path = path4url(self.account, self.container, obj)
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 6cd86652 Stavros Sachtouris
            self, obj,
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 6aadd6e1 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 6aadd6e1 Stavros Sachtouris
        :param public: (bool) If true, Object is published, False, unpublished
568 9e4508df Stavros Sachtouris

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

662 6aadd6e1 Stavros Sachtouris
        :param public: (bool) If true, Object is published, False, unpublished
663 9e4508df Stavros Sachtouris

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

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

720 afd9d603 Stavros Sachtouris
        --- request parameters ---
721 9e4508df Stavros Sachtouris

722 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
723 9e4508df Stavros Sachtouris

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

726 afd9d603 Stavros Sachtouris
        --- request headers ---
727 9e4508df Stavros Sachtouris

728 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
729 9e4508df Stavros Sachtouris
            with etag matching with this
730 9e4508df Stavros Sachtouris

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

734 9e4508df Stavros Sachtouris
        :param destination: (string) The destination path in the form
735 9e4508df Stavros Sachtouris
            /<container>/<object>
736 9e4508df Stavros Sachtouris

737 9e4508df Stavros Sachtouris
        :param destination_account: (string) The destination account to copy to
738 9e4508df Stavros Sachtouris

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

741 9e4508df Stavros Sachtouris
        :param content_encoding: (string) The encoding of the object
742 9e4508df Stavros Sachtouris

743 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Object presentation style
744 9e4508df Stavros Sachtouris

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

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

752 6aadd6e1 Stavros Sachtouris
        :param public: (bool) If true, Object is published, False, unpublished
753 9e4508df Stavros Sachtouris

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

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

808 afd9d603 Stavros Sachtouris
        --- request parameters ---
809 9e4508df Stavros Sachtouris

810 9e4508df Stavros Sachtouris
        :param format: (string) json (default) or xml
811 9e4508df Stavros Sachtouris

812 9e4508df Stavros Sachtouris
        :param update: (bool) Do not replace metadata
813 9e4508df Stavros Sachtouris

814 afd9d603 Stavros Sachtouris
        --- request headers ---
815 9e4508df Stavros Sachtouris

816 9e4508df Stavros Sachtouris
        :param if_etag_match: (string) if provided, return only results
817 9e4508df Stavros Sachtouris
            with etag matching with this
818 9e4508df Stavros Sachtouris

819 9e4508df Stavros Sachtouris
        :param if_etag_not_match: (string) if provided, return only results
820 9e4508df Stavros Sachtouris
            with etag not matching with this
821 9e4508df Stavros Sachtouris

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

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

826 9e4508df Stavros Sachtouris
        :param content_range: (string) The range of data supplied
827 9e4508df Stavros Sachtouris

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

831 9e4508df Stavros Sachtouris
        :param content_encoding: (string) The encoding of the object
832 9e4508df Stavros Sachtouris

833 9e4508df Stavros Sachtouris
        :param content_disposition: (string) Object presentation style
834 9e4508df Stavros Sachtouris

835 9e4508df Stavros Sachtouris
        :param source_object: (string) Update with data from the object at
836 9e4508df Stavros Sachtouris
            path /<container>/<object>
837 9e4508df Stavros Sachtouris

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

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

842 9e4508df Stavros Sachtouris
        :param object_bytes: (integer) The updated objects final size
843 9e4508df Stavros Sachtouris

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

846 9e4508df Stavros Sachtouris
        :param permissions: (dict) Object permissions in the form (all fields
847 9e4508df Stavros Sachtouris
            are optional)
848 9e4508df Stavros Sachtouris
            { 'read':[user1, group1, user2, ...],
849 9e4508df Stavros Sachtouris
            'write':['user3, group2, group3, ...] }
850 9e4508df Stavros Sachtouris

851 6aadd6e1 Stavros Sachtouris
        :param public: (bool) If true, Object is published, False, unpublished
852 9e4508df Stavros Sachtouris

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

856 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
857 afd9d603 Stavros Sachtouris
        """
858 4067cdaf Stavros Sachtouris
859 d88ba587 Stavros Sachtouris
        self._assert_container()
860 afd9d603 Stavros Sachtouris
861 24ff0a35 Stavros Sachtouris
        self.set_param('format', format, iff=format)
862 b773795c Stavros Sachtouris
        self.set_param('update', '', iff=update)
863 afd9d603 Stavros Sachtouris
864 afd9d603 Stavros Sachtouris
        self.set_header('If-Match', if_etag_match)
865 afd9d603 Stavros Sachtouris
        self.set_header('If-None-Match', if_etag_not_match)
866 24ff0a35 Stavros Sachtouris
        self.set_header(
867 b773795c Stavros Sachtouris
            'Content-Length', content_length, iff=not transfer_encoding)
868 afd9d603 Stavros Sachtouris
        self.set_header('Content-Type', content_type)
869 afd9d603 Stavros Sachtouris
        self.set_header('Content-Range', content_range)
870 afd9d603 Stavros Sachtouris
        self.set_header('Transfer-Encoding', transfer_encoding)
871 afd9d603 Stavros Sachtouris
        self.set_header('Content-Encoding', content_encoding)
872 afd9d603 Stavros Sachtouris
        self.set_header('Content-Disposition', content_disposition)
873 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Object', source_object)
874 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Account', source_account)
875 afd9d603 Stavros Sachtouris
        self.set_header('X-Source-Version', source_version)
876 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Bytes', object_bytes)
877 afd9d603 Stavros Sachtouris
        self.set_header('X-Object-Manifest', manifest)
878 b773795c Stavros Sachtouris
        perms = ';'.join(
879 b773795c Stavros Sachtouris
            ['%s=%s' % (k, ','.join(v)) for k, v in permissions.items() if (
880 b773795c Stavros Sachtouris
                v)]) if (permissions) else ''
881 b773795c Stavros Sachtouris
        self.set_header('X-Object-Sharing', perms, iff=permissions)
882 6aadd6e1 Stavros Sachtouris
        self.set_header('X-Object-Public', public, public is not None)
883 afd9d603 Stavros Sachtouris
        for key, val in metadata.items():
884 3dabe5d2 Stavros Sachtouris
            self.set_header('X-Object-Meta-' + key, val)
885 afd9d603 Stavros Sachtouris
886 c639293b Stavros Sachtouris
        path = path4url(self.account, self.container, obj)
887 3dabe5d2 Stavros Sachtouris
        success = kwargs.pop('success', (202, 204))
888 afd9d603 Stavros Sachtouris
        return self.post(path, *args, success=success, **kwargs)
889 3dabe5d2 Stavros Sachtouris
890 24ff0a35 Stavros Sachtouris
    def object_delete(
891 24ff0a35 Stavros Sachtouris
            self, object,
892 24ff0a35 Stavros Sachtouris
            until=None, delimiter=None,
893 24ff0a35 Stavros Sachtouris
            *args, **kwargs):
894 afd9d603 Stavros Sachtouris
        """ Full Pithos+ DELETE at object level
895 9e4508df Stavros Sachtouris

896 3dabe5d2 Stavros Sachtouris
        --- request parameters ---
897 9e4508df Stavros Sachtouris

898 9e4508df Stavros Sachtouris
        :param until: (string) Optional timestamp
899 9e4508df Stavros Sachtouris

900 9e4508df Stavros Sachtouris
        :returns: ConnectionResponse
901 afd9d603 Stavros Sachtouris
        """
902 d88ba587 Stavros Sachtouris
        self._assert_container()
903 afd9d603 Stavros Sachtouris
904 24ff0a35 Stavros Sachtouris
        self.set_param('until', until, iff=until)
905 24ff0a35 Stavros Sachtouris
        self.set_param('delimiter', delimiter, iff=delimiter)
906 afd9d603 Stavros Sachtouris
907 afd9d603 Stavros Sachtouris
        path = path4url(self.account, self.container, object)
908 afd9d603 Stavros Sachtouris
        success = kwargs.pop('success', 204)
909 3dabe5d2 Stavros Sachtouris
        return self.delete(path, *args, success=success, **kwargs)