Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / backends / base.py @ 809b482a

History | View | Annotate | Download (21.2 kB)

1 2e662088 Antony Chazapis
# Copyright 2011-2012 GRNET S.A. All rights reserved.
2 d50ed8d4 Sofia Papagiannaki
#
3 5635f9ef Antony Chazapis
# Redistribution and use in source and binary forms, with or
4 5635f9ef Antony Chazapis
# without modification, are permitted provided that the following
5 5635f9ef Antony Chazapis
# conditions are met:
6 d50ed8d4 Sofia Papagiannaki
#
7 5635f9ef Antony Chazapis
#   1. Redistributions of source code must retain the above
8 5635f9ef Antony Chazapis
#      copyright notice, this list of conditions and the following
9 5635f9ef Antony Chazapis
#      disclaimer.
10 d50ed8d4 Sofia Papagiannaki
#
11 5635f9ef Antony Chazapis
#   2. Redistributions in binary form must reproduce the above
12 5635f9ef Antony Chazapis
#      copyright notice, this list of conditions and the following
13 5635f9ef Antony Chazapis
#      disclaimer in the documentation and/or other materials
14 5635f9ef Antony Chazapis
#      provided with the distribution.
15 d50ed8d4 Sofia Papagiannaki
#
16 5635f9ef Antony Chazapis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 5635f9ef Antony Chazapis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 5635f9ef Antony Chazapis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 5635f9ef Antony Chazapis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 5635f9ef Antony Chazapis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 5635f9ef Antony Chazapis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 5635f9ef Antony Chazapis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 5635f9ef Antony Chazapis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 5635f9ef Antony Chazapis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 5635f9ef Antony Chazapis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 5635f9ef Antony Chazapis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 5635f9ef Antony Chazapis
# POSSIBILITY OF SUCH DAMAGE.
28 d50ed8d4 Sofia Papagiannaki
#
29 5635f9ef Antony Chazapis
# The views and conclusions contained in the software and
30 5635f9ef Antony Chazapis
# documentation are those of the authors and should not be
31 5635f9ef Antony Chazapis
# interpreted as representing official policies, either expressed
32 5635f9ef Antony Chazapis
# or implied, of GRNET S.A.
33 5635f9ef Antony Chazapis
34 228de81b Antony Chazapis
# Default setting for new accounts.
35 19ddd41b Sofia Papagiannaki
DEFAULT_ACCOUNT_QUOTA = 0  # No quota.
36 19ddd41b Sofia Papagiannaki
DEFAULT_CONTAINER_QUOTA = 0  # No quota.
37 19ddd41b Sofia Papagiannaki
DEFAULT_CONTAINER_VERSIONING = 'auto'
38 228de81b Antony Chazapis
39 228de81b Antony Chazapis
40 cca6c617 Antony Chazapis
class NotAllowedError(Exception):
41 cca6c617 Antony Chazapis
    pass
42 cca6c617 Antony Chazapis
43 d50ed8d4 Sofia Papagiannaki
44 1e47e49d Chrysostomos Nanakos
class IllegalOperationError(NotAllowedError):
45 1e47e49d Chrysostomos Nanakos
    pass
46 1e47e49d Chrysostomos Nanakos
47 1e47e49d Chrysostomos Nanakos
48 5df6c6d1 Antony Chazapis
class QuotaError(Exception):
49 5df6c6d1 Antony Chazapis
    pass
50 5df6c6d1 Antony Chazapis
51 d50ed8d4 Sofia Papagiannaki
52 7efc9f86 Sofia Papagiannaki
class AccountExists(NameError):
53 7efc9f86 Sofia Papagiannaki
    pass
54 d50ed8d4 Sofia Papagiannaki
55 d50ed8d4 Sofia Papagiannaki
56 7efc9f86 Sofia Papagiannaki
class ContainerExists(NameError):
57 7efc9f86 Sofia Papagiannaki
    pass
58 7efc9f86 Sofia Papagiannaki
59 d50ed8d4 Sofia Papagiannaki
60 7efc9f86 Sofia Papagiannaki
class AccountNotEmpty(IndexError):
61 7efc9f86 Sofia Papagiannaki
    pass
62 7efc9f86 Sofia Papagiannaki
63 d50ed8d4 Sofia Papagiannaki
64 7efc9f86 Sofia Papagiannaki
class ContainerNotEmpty(IndexError):
65 7efc9f86 Sofia Papagiannaki
    pass
66 7efc9f86 Sofia Papagiannaki
67 d50ed8d4 Sofia Papagiannaki
68 7efc9f86 Sofia Papagiannaki
class ItemNotExists(NameError):
69 7efc9f86 Sofia Papagiannaki
    pass
70 7efc9f86 Sofia Papagiannaki
71 d50ed8d4 Sofia Papagiannaki
72 7efc9f86 Sofia Papagiannaki
class VersionNotExists(IndexError):
73 7efc9f86 Sofia Papagiannaki
    pass
74 7efc9f86 Sofia Papagiannaki
75 1e47e49d Chrysostomos Nanakos
76 3a5994a8 Sofia Papagiannaki
class InvalidHash(TypeError):
77 3a5994a8 Sofia Papagiannaki
    pass
78 d50ed8d4 Sofia Papagiannaki
79 1e47e49d Chrysostomos Nanakos
80 8ee4ec50 Vangelis Koukis
class BaseBackend(object):
81 29148653 Sofia Papagiannaki
    """Abstract backend class.
82 29148653 Sofia Papagiannaki

83 29148653 Sofia Papagiannaki
    This class serves as a reference for actual implementations.
84 d50ed8d4 Sofia Papagiannaki

85 29148653 Sofia Papagiannaki
    The purpose of the backend is to provide the necessary functions
86 29148653 Sofia Papagiannaki
    for handling data and metadata.
87 d50ed8d4 Sofia Papagiannaki

88 29148653 Sofia Papagiannaki
    It is responsible for the actual storage and retrieval of information.
89 d50ed8d4 Sofia Papagiannaki

90 29148653 Sofia Papagiannaki
    Note that the account level is always valid as it is checked
91 29148653 Sofia Papagiannaki
    from another subsystem.
92 29148653 Sofia Papagiannaki

93 29148653 Sofia Papagiannaki
    When not replacing metadata/groups/policy, keys with empty values
94 29148653 Sofia Papagiannaki
    should be deleted.
95 d50ed8d4 Sofia Papagiannaki

96 22dab079 Antony Chazapis
    The following variables should be available:
97 22dab079 Antony Chazapis
        'hash_algorithm': Suggested is 'sha256'
98 d50ed8d4 Sofia Papagiannaki

99 22dab079 Antony Chazapis
        'block_size': Suggested is 4MB
100 d50ed8d4 Sofia Papagiannaki

101 29148653 Sofia Papagiannaki
        'default_account_policy': A dictionary with default account policy
102 29148653 Sofia Papagiannaki
                                  settings
103 29148653 Sofia Papagiannaki
        'default_container_policy': A dictionary with default container policy
104 29148653 Sofia Papagiannaki
                                    settings
105 b956618e Antony Chazapis
    """
106 d50ed8d4 Sofia Papagiannaki
107 d14fe290 Antony Chazapis
    def close(self):
108 d14fe290 Antony Chazapis
        """Close the backend connection."""
109 d14fe290 Antony Chazapis
        pass
110 d50ed8d4 Sofia Papagiannaki
111 f6c97079 Antony Chazapis
    def list_accounts(self, user, marker=None, limit=10000):
112 f6c97079 Antony Chazapis
        """Return a list of accounts the user can access.
113 d50ed8d4 Sofia Papagiannaki

114 29148653 Sofia Papagiannaki
        Keyword arguments:
115 f6c97079 Antony Chazapis
            'marker': Start list from the next item after 'marker'
116 d50ed8d4 Sofia Papagiannaki

117 f6c97079 Antony Chazapis
            'limit': Number of containers to return
118 f6c97079 Antony Chazapis
        """
119 f6c97079 Antony Chazapis
        return []
120 d50ed8d4 Sofia Papagiannaki
121 29148653 Sofia Papagiannaki
    def get_account_meta(self, user, account, domain, until=None,
122 29148653 Sofia Papagiannaki
                         include_user_defined=True, external_quota=None):
123 cb69c154 Antony Chazapis
        """Return a dictionary with the account metadata for the domain.
124 d50ed8d4 Sofia Papagiannaki

125 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
126 b956618e Antony Chazapis
            'name': The account name
127 d50ed8d4 Sofia Papagiannaki

128 b956618e Antony Chazapis
            'count': The number of containers (or 0)
129 d50ed8d4 Sofia Papagiannaki

130 b956618e Antony Chazapis
            'bytes': The total data size (or 0)
131 d50ed8d4 Sofia Papagiannaki

132 58a6c894 Antony Chazapis
            'modified': Last modification timestamp (overall)
133 d50ed8d4 Sofia Papagiannaki

134 58a6c894 Antony Chazapis
            'until_timestamp': Last modification until the timestamp provided
135 d50ed8d4 Sofia Papagiannaki

136 29148653 Sofia Papagiannaki
            'external_quota': The quota computed from external quota holder
137 29148653 Sofia Papagiannaki
                              mechanism
138 29148653 Sofia Papagiannaki

139 cca6c617 Antony Chazapis
        Raises:
140 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
141 b956618e Antony Chazapis
        """
142 b956618e Antony Chazapis
        return {}
143 d50ed8d4 Sofia Papagiannaki
144 cb69c154 Antony Chazapis
    def update_account_meta(self, user, account, domain, meta, replace=False):
145 cb69c154 Antony Chazapis
        """Update the metadata associated with the account for the domain.
146 d50ed8d4 Sofia Papagiannaki

147 b956618e Antony Chazapis
        Parameters:
148 cb69c154 Antony Chazapis
            'domain': Metadata domain
149 d50ed8d4 Sofia Papagiannaki

150 29148653 Sofia Papagiannaki
        Keyword arguments:
151 b956618e Antony Chazapis
            'meta': Dictionary with metadata to update
152 d50ed8d4 Sofia Papagiannaki

153 22dab079 Antony Chazapis
            'replace': Replace instead of update
154 d50ed8d4 Sofia Papagiannaki

155 cca6c617 Antony Chazapis
        Raises:
156 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
157 b956618e Antony Chazapis
        """
158 b956618e Antony Chazapis
        return
159 d50ed8d4 Sofia Papagiannaki
160 02c0c3fa Antony Chazapis
    def get_account_groups(self, user, account):
161 29148653 Sofia Papagiannaki
        """Return a dictionary with the user groups defined for the account.
162 d50ed8d4 Sofia Papagiannaki

163 cca6c617 Antony Chazapis
        Raises:
164 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
165 58a6c894 Antony Chazapis
        """
166 02c0c3fa Antony Chazapis
        return {}
167 d50ed8d4 Sofia Papagiannaki
168 02c0c3fa Antony Chazapis
    def update_account_groups(self, user, account, groups, replace=False):
169 02c0c3fa Antony Chazapis
        """Update the groups associated with the account.
170 d50ed8d4 Sofia Papagiannaki

171 b956618e Antony Chazapis
        Raises:
172 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
173 d50ed8d4 Sofia Papagiannaki

174 02c0c3fa Antony Chazapis
            ValueError: Invalid data in groups
175 b956618e Antony Chazapis
        """
176 b956618e Antony Chazapis
        return
177 d50ed8d4 Sofia Papagiannaki
178 b2832c6a Antony Chazapis
    def get_account_policy(self, user, account):
179 b2832c6a Antony Chazapis
        """Return a dictionary with the account policy.
180 d50ed8d4 Sofia Papagiannaki

181 b2832c6a Antony Chazapis
        The keys returned are:
182 b2832c6a Antony Chazapis
            'quota': The maximum bytes allowed (default is 0 - unlimited)
183 d50ed8d4 Sofia Papagiannaki

184 29148653 Sofia Papagiannaki
            'versioning': Can be 'auto', 'manual' or 'none' (default: 'manual')
185 d50ed8d4 Sofia Papagiannaki

186 b2832c6a Antony Chazapis
        Raises:
187 b2832c6a Antony Chazapis
            NotAllowedError: Operation not permitted
188 b2832c6a Antony Chazapis
        """
189 b2832c6a Antony Chazapis
        return {}
190 d50ed8d4 Sofia Papagiannaki
191 b2832c6a Antony Chazapis
    def update_account_policy(self, user, account, policy, replace=False):
192 b2832c6a Antony Chazapis
        """Update the policy associated with the account.
193 d50ed8d4 Sofia Papagiannaki

194 b2832c6a Antony Chazapis
        Raises:
195 b2832c6a Antony Chazapis
            NotAllowedError: Operation not permitted
196 d50ed8d4 Sofia Papagiannaki

197 b2832c6a Antony Chazapis
            ValueError: Invalid policy defined
198 b2832c6a Antony Chazapis
        """
199 b2832c6a Antony Chazapis
        return
200 d50ed8d4 Sofia Papagiannaki
201 78348987 Sofia Papagiannaki
    def put_account(self, user, account, policy=None):
202 a9b3f29d Antony Chazapis
        """Create a new account with the given name.
203 d50ed8d4 Sofia Papagiannaki

204 a9b3f29d Antony Chazapis
        Raises:
205 a9b3f29d Antony Chazapis
            NotAllowedError: Operation not permitted
206 d50ed8d4 Sofia Papagiannaki

207 b2832c6a Antony Chazapis
            ValueError: Invalid policy defined
208 a9b3f29d Antony Chazapis
        """
209 a9b3f29d Antony Chazapis
        return
210 d50ed8d4 Sofia Papagiannaki
211 02c0c3fa Antony Chazapis
    def delete_account(self, user, account):
212 02c0c3fa Antony Chazapis
        """Delete the account with the given name.
213 d50ed8d4 Sofia Papagiannaki

214 b956618e Antony Chazapis
        Raises:
215 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
216 d50ed8d4 Sofia Papagiannaki

217 7efc9f86 Sofia Papagiannaki
            AccountNotEmpty: Account is not empty
218 b956618e Antony Chazapis
        """
219 b956618e Antony Chazapis
        return
220 d50ed8d4 Sofia Papagiannaki
221 29148653 Sofia Papagiannaki
    def list_containers(self, user, account, marker=None, limit=10000,
222 29148653 Sofia Papagiannaki
                        shared=False, until=None, public=False):
223 f6c97079 Antony Chazapis
        """Return a list of container names existing under an account.
224 d50ed8d4 Sofia Papagiannaki

225 29148653 Sofia Papagiannaki
        Keyword arguments:
226 02c0c3fa Antony Chazapis
            'marker': Start list from the next item after 'marker'
227 d50ed8d4 Sofia Papagiannaki

228 02c0c3fa Antony Chazapis
            'limit': Number of containers to return
229 d50ed8d4 Sofia Papagiannaki

230 b18ef3ad Antony Chazapis
            'shared': Only list containers with permissions set
231 d50ed8d4 Sofia Papagiannaki

232 4d15c94e Sofia Papagiannaki
            'public': Only list containers containing public objects
233 d50ed8d4 Sofia Papagiannaki

234 d50ed8d4 Sofia Papagiannaki

235 02c0c3fa Antony Chazapis
        Raises:
236 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
237 02c0c3fa Antony Chazapis
        """
238 02c0c3fa Antony Chazapis
        return []
239 d50ed8d4 Sofia Papagiannaki
240 29148653 Sofia Papagiannaki
    def list_container_meta(self, user, account, container, domain,
241 29148653 Sofia Papagiannaki
                            until=None):
242 29148653 Sofia Papagiannaki
        """Return a list of the container's object meta keys for a domain.
243 d50ed8d4 Sofia Papagiannaki

244 371d907a Antony Chazapis
        Raises:
245 371d907a Antony Chazapis
            NotAllowedError: Operation not permitted
246 d50ed8d4 Sofia Papagiannaki

247 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
248 371d907a Antony Chazapis
        """
249 371d907a Antony Chazapis
        return []
250 d50ed8d4 Sofia Papagiannaki
251 29148653 Sofia Papagiannaki
    def get_container_meta(self, user, account, container, domain, until=None,
252 29148653 Sofia Papagiannaki
                           include_user_defined=True):
253 cb69c154 Antony Chazapis
        """Return a dictionary with the container metadata for the domain.
254 d50ed8d4 Sofia Papagiannaki

255 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
256 b956618e Antony Chazapis
            'name': The container name
257 d50ed8d4 Sofia Papagiannaki

258 b956618e Antony Chazapis
            'count': The number of objects
259 d50ed8d4 Sofia Papagiannaki

260 b956618e Antony Chazapis
            'bytes': The total data size
261 d50ed8d4 Sofia Papagiannaki

262 58a6c894 Antony Chazapis
            'modified': Last modification timestamp (overall)
263 d50ed8d4 Sofia Papagiannaki

264 58a6c894 Antony Chazapis
            'until_timestamp': Last modification until the timestamp provided
265 d50ed8d4 Sofia Papagiannaki

266 b956618e Antony Chazapis
        Raises:
267 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
268 d50ed8d4 Sofia Papagiannaki

269 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
270 b956618e Antony Chazapis
        """
271 b956618e Antony Chazapis
        return {}
272 d50ed8d4 Sofia Papagiannaki
273 29148653 Sofia Papagiannaki
    def update_container_meta(self, user, account, container, domain, meta,
274 29148653 Sofia Papagiannaki
                              replace=False):
275 cb69c154 Antony Chazapis
        """Update the metadata associated with the container for the domain.
276 d50ed8d4 Sofia Papagiannaki

277 b956618e Antony Chazapis
        Parameters:
278 cb69c154 Antony Chazapis
            'domain': Metadata domain
279 d50ed8d4 Sofia Papagiannaki

280 29148653 Sofia Papagiannaki
        Keyword arguments:
281 b956618e Antony Chazapis
            'meta': Dictionary with metadata to update
282 d50ed8d4 Sofia Papagiannaki

283 22dab079 Antony Chazapis
            'replace': Replace instead of update
284 d50ed8d4 Sofia Papagiannaki

285 b956618e Antony Chazapis
        Raises:
286 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
287 d50ed8d4 Sofia Papagiannaki

288 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
289 b956618e Antony Chazapis
        """
290 b956618e Antony Chazapis
        return
291 d50ed8d4 Sofia Papagiannaki
292 02c0c3fa Antony Chazapis
    def get_container_policy(self, user, account, container):
293 02c0c3fa Antony Chazapis
        """Return a dictionary with the container policy.
294 d50ed8d4 Sofia Papagiannaki

295 02c0c3fa Antony Chazapis
        The keys returned are:
296 02c0c3fa Antony Chazapis
            'quota': The maximum bytes allowed (default is 0 - unlimited)
297 d50ed8d4 Sofia Papagiannaki

298 29148653 Sofia Papagiannaki
            'versioning': Can be 'auto', 'manual' or 'none' (default: 'manual')
299 d50ed8d4 Sofia Papagiannaki

300 02c0c3fa Antony Chazapis
        Raises:
301 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
302 d50ed8d4 Sofia Papagiannaki

303 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
304 02c0c3fa Antony Chazapis
        """
305 02c0c3fa Antony Chazapis
        return {}
306 d50ed8d4 Sofia Papagiannaki
307 29148653 Sofia Papagiannaki
    def update_container_policy(self, user, account, container, policy,
308 29148653 Sofia Papagiannaki
                                replace=False):
309 b2832c6a Antony Chazapis
        """Update the policy associated with the container.
310 d50ed8d4 Sofia Papagiannaki

311 02c0c3fa Antony Chazapis
        Raises:
312 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
313 d50ed8d4 Sofia Papagiannaki

314 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
315 d50ed8d4 Sofia Papagiannaki

316 02c0c3fa Antony Chazapis
            ValueError: Invalid policy defined
317 02c0c3fa Antony Chazapis
        """
318 02c0c3fa Antony Chazapis
        return
319 d50ed8d4 Sofia Papagiannaki
320 29148653 Sofia Papagiannaki
    def put_container(self, user, account, container, policy=None):
321 02c0c3fa Antony Chazapis
        """Create a new container with the given name.
322 d50ed8d4 Sofia Papagiannaki

323 02c0c3fa Antony Chazapis
        Raises:
324 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
325 d50ed8d4 Sofia Papagiannaki

326 7efc9f86 Sofia Papagiannaki
            ContainerExists: Container already exists
327 d50ed8d4 Sofia Papagiannaki

328 02c0c3fa Antony Chazapis
            ValueError: Invalid policy defined
329 02c0c3fa Antony Chazapis
        """
330 02c0c3fa Antony Chazapis
        return
331 d50ed8d4 Sofia Papagiannaki
332 29148653 Sofia Papagiannaki
    def delete_container(self, user, account, container, until=None,
333 29148653 Sofia Papagiannaki
                         delimiter=None):
334 84846143 Antony Chazapis
        """Delete/purge the container with the given name.
335 d50ed8d4 Sofia Papagiannaki

336 29148653 Sofia Papagiannaki
        Keyword arguments:
337 29148653 Sofia Papagiannaki
            'delimiter': If not None, deletes the container contents starting
338 29148653 Sofia Papagiannaki
                         with the delimiter
339 29148653 Sofia Papagiannaki

340 02c0c3fa Antony Chazapis
        Raises:
341 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
342 d50ed8d4 Sofia Papagiannaki

343 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
344 d50ed8d4 Sofia Papagiannaki

345 7efc9f86 Sofia Papagiannaki
            ContainerNotEmpty: Container is not empty
346 02c0c3fa Antony Chazapis
        """
347 02c0c3fa Antony Chazapis
        return
348 d50ed8d4 Sofia Papagiannaki
349 29148653 Sofia Papagiannaki
    def list_objects(self, user, account, container, prefix='', delimiter=None,
350 29148653 Sofia Papagiannaki
                     marker=None, limit=10000, virtual=True, domain=None,
351 29148653 Sofia Papagiannaki
                     keys=None, shared=False, until=None, size_range=None,
352 29148653 Sofia Papagiannaki
                     public=False):
353 29148653 Sofia Papagiannaki
        """List (object name, object version_id) under a container.
354 d50ed8d4 Sofia Papagiannaki

355 29148653 Sofia Papagiannaki
        Keyword arguments:
356 b956618e Antony Chazapis
            'prefix': List objects starting with 'prefix'
357 d50ed8d4 Sofia Papagiannaki

358 29148653 Sofia Papagiannaki
            'delimiter': Return unique names before 'delimiter' and
359 29148653 Sofia Papagiannaki
                         after 'prefix'
360 d50ed8d4 Sofia Papagiannaki

361 b956618e Antony Chazapis
            'marker': Start list from the next item after 'marker'
362 d50ed8d4 Sofia Papagiannaki

363 b956618e Antony Chazapis
            'limit': Number of objects to return
364 d50ed8d4 Sofia Papagiannaki

365 f4b61e0c Antony Chazapis
            'virtual': If not set, the result will only include names starting
366 f4b61e0c Antony Chazapis
                       with 'prefix' and ending without a 'delimiter' or with
367 f4b61e0c Antony Chazapis
                       the first occurance of the 'delimiter' after 'prefix'.
368 29148653 Sofia Papagiannaki
                       If set, the result will include all names after 'prefix'
369 3f839f59 Antony Chazapis
                       up to and including the 'delimiter' if it is found
370 d50ed8d4 Sofia Papagiannaki

371 cb69c154 Antony Chazapis
            'domain': Metadata domain for keys
372 d50ed8d4 Sofia Papagiannaki

373 95d47e1a Antony Chazapis
            'keys': Include objects that satisfy the key queries in the list.
374 95d47e1a Antony Chazapis
                    Use 'key', '!key' for existence queries, 'key op value' for
375 4e5673a0 Antony Chazapis
                    value queries, where 'op' can be one of =, !=, <=, >=, <, >
376 d50ed8d4 Sofia Papagiannaki

377 b18ef3ad Antony Chazapis
            'shared': Only list objects with permissions set
378 d50ed8d4 Sofia Papagiannaki

379 7ff57991 Antony Chazapis
            'size_range': Include objects with byte size in (from, to).
380 7ff57991 Antony Chazapis
                          Use None to specify unlimited
381 d50ed8d4 Sofia Papagiannaki

382 4d15c94e Sofia Papagiannaki
            'public': Only list public objects
383 d50ed8d4 Sofia Papagiannaki

384 d50ed8d4 Sofia Papagiannaki

385 22dab079 Antony Chazapis
        Raises:
386 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
387 d50ed8d4 Sofia Papagiannaki

388 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
389 22dab079 Antony Chazapis
        """
390 22dab079 Antony Chazapis
        return []
391 d50ed8d4 Sofia Papagiannaki
392 29148653 Sofia Papagiannaki
    def list_object_meta(self, user, account, container, prefix='',
393 29148653 Sofia Papagiannaki
                         delimiter=None, marker=None, limit=10000,
394 29148653 Sofia Papagiannaki
                         virtual=True, domain=None, keys=None, shared=False,
395 29148653 Sofia Papagiannaki
                         until=None, size_range=None, public=False):
396 29148653 Sofia Papagiannaki
        """Return a list of metadata dicts of objects under a container.
397 d50ed8d4 Sofia Papagiannaki

398 371d907a Antony Chazapis
        Same parameters with list_objects. Returned dicts have no user-defined
399 371d907a Antony Chazapis
        metadata and, if until is not None, a None 'modified' timestamp.
400 d50ed8d4 Sofia Papagiannaki

401 15a96c3e Antony Chazapis
        Raises:
402 15a96c3e Antony Chazapis
            NotAllowedError: Operation not permitted
403 d50ed8d4 Sofia Papagiannaki

404 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
405 b956618e Antony Chazapis
        """
406 b956618e Antony Chazapis
        return []
407 d50ed8d4 Sofia Papagiannaki
408 15a96c3e Antony Chazapis
    def list_object_permissions(self, user, account, container, prefix=''):
409 29148653 Sofia Papagiannaki
        """Return a list of paths enforce permissions under a container.
410 d50ed8d4 Sofia Papagiannaki

411 15a96c3e Antony Chazapis
        Raises:
412 15a96c3e Antony Chazapis
            NotAllowedError: Operation not permitted
413 15a96c3e Antony Chazapis
        """
414 15a96c3e Antony Chazapis
        return []
415 d50ed8d4 Sofia Papagiannaki
416 15a96c3e Antony Chazapis
    def list_object_public(self, user, account, container, prefix=''):
417 29148653 Sofia Papagiannaki
        """Return a mapping of object paths to public ids under a container."""
418 15a96c3e Antony Chazapis
        return {}
419 d50ed8d4 Sofia Papagiannaki
420 29148653 Sofia Papagiannaki
    def get_object_meta(self, user, account, container, name, domain,
421 29148653 Sofia Papagiannaki
                        version=None, include_user_defined=True):
422 cb69c154 Antony Chazapis
        """Return a dictionary with the object metadata for the domain.
423 d50ed8d4 Sofia Papagiannaki

424 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
425 58a6c894 Antony Chazapis
            'name': The object name
426 d50ed8d4 Sofia Papagiannaki

427 b956618e Antony Chazapis
            'bytes': The total data size
428 d50ed8d4 Sofia Papagiannaki

429 66ce2ca5 Antony Chazapis
            'type': The content type
430 d50ed8d4 Sofia Papagiannaki

431 4a1c29ea Antony Chazapis
            'hash': The hashmap hash
432 d50ed8d4 Sofia Papagiannaki

433 58a6c894 Antony Chazapis
            'modified': Last modification timestamp (overall)
434 d50ed8d4 Sofia Papagiannaki

435 29148653 Sofia Papagiannaki
            'modified_by': The user that committed the object
436 29148653 Sofia Papagiannaki
                           (version requested)
437 d50ed8d4 Sofia Papagiannaki

438 58a6c894 Antony Chazapis
            'version': The version identifier
439 d50ed8d4 Sofia Papagiannaki

440 58a6c894 Antony Chazapis
            'version_timestamp': The version's modification timestamp
441 d50ed8d4 Sofia Papagiannaki

442 29148653 Sofia Papagiannaki
            'uuid': A unique identifier that persists data or metadata updates
443 29148653 Sofia Papagiannaki
                    and renames
444 d50ed8d4 Sofia Papagiannaki

445 33b4e4a6 Antony Chazapis
            'checksum': The MD5 sum of the object (may be empty)
446 d50ed8d4 Sofia Papagiannaki

447 b956618e Antony Chazapis
        Raises:
448 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
449 d50ed8d4 Sofia Papagiannaki

450 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
451 d50ed8d4 Sofia Papagiannaki

452 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
453 b956618e Antony Chazapis
        """
454 b956618e Antony Chazapis
        return {}
455 d50ed8d4 Sofia Papagiannaki
456 29148653 Sofia Papagiannaki
    def update_object_meta(self, user, account, container, name, domain, meta,
457 29148653 Sofia Papagiannaki
                           replace=False):
458 29148653 Sofia Papagiannaki
        """Update object metadata for a domain and return the new version.
459 d50ed8d4 Sofia Papagiannaki

460 b956618e Antony Chazapis
        Parameters:
461 cb69c154 Antony Chazapis
            'domain': Metadata domain
462 d50ed8d4 Sofia Papagiannaki

463 a6eb13e9 Antony Chazapis
            'meta': Dictionary with metadata to update
464 d50ed8d4 Sofia Papagiannaki

465 22dab079 Antony Chazapis
            'replace': Replace instead of update
466 d50ed8d4 Sofia Papagiannaki

467 b956618e Antony Chazapis
        Raises:
468 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
469 d50ed8d4 Sofia Papagiannaki

470 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
471 b956618e Antony Chazapis
        """
472 02c4d2ba Antony Chazapis
        return ''
473 d50ed8d4 Sofia Papagiannaki
474 3436eeb0 Antony Chazapis
    def get_object_permissions(self, user, account, container, name):
475 067cf1fc Antony Chazapis
        """Return the action allowed on the object, the path
476 067cf1fc Antony Chazapis
        from which the object gets its permissions from,
477 cca6c617 Antony Chazapis
        along with a dictionary containing the permissions.
478 d50ed8d4 Sofia Papagiannaki

479 067cf1fc Antony Chazapis
        The dictionary keys are (also used for defining the action):
480 3436eeb0 Antony Chazapis
            'read': The object is readable by the users/groups in the list
481 d50ed8d4 Sofia Papagiannaki

482 3436eeb0 Antony Chazapis
            'write': The object is writable by the users/groups in the list
483 d50ed8d4 Sofia Papagiannaki

484 3436eeb0 Antony Chazapis
        Raises:
485 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
486 d50ed8d4 Sofia Papagiannaki

487 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
488 3436eeb0 Antony Chazapis
        """
489 3436eeb0 Antony Chazapis
        return {}
490 d50ed8d4 Sofia Papagiannaki
491 29148653 Sofia Papagiannaki
    def update_object_permissions(self, user, account, container, name,
492 29148653 Sofia Papagiannaki
                                  permissions):
493 345dcf39 Antony Chazapis
        """Update (set) the permissions associated with the object.
494 d50ed8d4 Sofia Papagiannaki

495 3436eeb0 Antony Chazapis
        Parameters:
496 345dcf39 Antony Chazapis
            'permissions': Dictionary with permissions to set
497 d50ed8d4 Sofia Papagiannaki

498 3436eeb0 Antony Chazapis
        Raises:
499 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
500 d50ed8d4 Sofia Papagiannaki

501 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
502 d50ed8d4 Sofia Papagiannaki

503 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
504 3436eeb0 Antony Chazapis
        """
505 3436eeb0 Antony Chazapis
        return
506 d50ed8d4 Sofia Papagiannaki
507 02c0c3fa Antony Chazapis
    def get_object_public(self, user, account, container, name):
508 bb4eafc6 Antony Chazapis
        """Return the public id of the object if applicable.
509 d50ed8d4 Sofia Papagiannaki

510 02c0c3fa Antony Chazapis
        Raises:
511 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
512 d50ed8d4 Sofia Papagiannaki

513 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
514 02c0c3fa Antony Chazapis
        """
515 02c0c3fa Antony Chazapis
        return None
516 d50ed8d4 Sofia Papagiannaki
517 02c0c3fa Antony Chazapis
    def update_object_public(self, user, account, container, name, public):
518 02c0c3fa Antony Chazapis
        """Update the public status of the object.
519 d50ed8d4 Sofia Papagiannaki

520 02c0c3fa Antony Chazapis
        Parameters:
521 02c0c3fa Antony Chazapis
            'public': Boolean value
522 d50ed8d4 Sofia Papagiannaki

523 02c0c3fa Antony Chazapis
        Raises:
524 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
525 d50ed8d4 Sofia Papagiannaki

526 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
527 02c0c3fa Antony Chazapis
        """
528 02c0c3fa Antony Chazapis
        return
529 d50ed8d4 Sofia Papagiannaki
530 83dd59c5 Antony Chazapis
    def get_object_hashmap(self, user, account, container, name, version=None):
531 22dab079 Antony Chazapis
        """Return the object's size and a list with partial hashes.
532 d50ed8d4 Sofia Papagiannaki

533 b956618e Antony Chazapis
        Raises:
534 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
535 d50ed8d4 Sofia Papagiannaki

536 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
537 d50ed8d4 Sofia Papagiannaki

538 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
539 b956618e Antony Chazapis
        """
540 22dab079 Antony Chazapis
        return 0, []
541 d50ed8d4 Sofia Papagiannaki
542 29148653 Sofia Papagiannaki
    def update_object_hashmap(self, user, account, container, name, size, type,
543 29148653 Sofia Papagiannaki
                              hashmap, checksum, domain, meta=None,
544 29148653 Sofia Papagiannaki
                              replace_meta=False, permissions=None):
545 29148653 Sofia Papagiannaki
        """Create/update an object's hashmap and return the new version.
546 d50ed8d4 Sofia Papagiannaki

547 3436eeb0 Antony Chazapis
        Parameters:
548 cb69c154 Antony Chazapis
            'domain': Metadata domain
549 d50ed8d4 Sofia Papagiannaki

550 cb69c154 Antony Chazapis
            'meta': Dictionary with metadata to change
551 d50ed8d4 Sofia Papagiannaki

552 3436eeb0 Antony Chazapis
            'replace_meta': Replace metadata instead of update
553 d50ed8d4 Sofia Papagiannaki

554 3436eeb0 Antony Chazapis
            'permissions': Updated object permissions
555 d50ed8d4 Sofia Papagiannaki

556 b956618e Antony Chazapis
        Raises:
557 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
558 d50ed8d4 Sofia Papagiannaki

559 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
560 d50ed8d4 Sofia Papagiannaki

561 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
562 d50ed8d4 Sofia Papagiannaki

563 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
564 b956618e Antony Chazapis
        """
565 02c4d2ba Antony Chazapis
        return ''
566 d50ed8d4 Sofia Papagiannaki
567 29148653 Sofia Papagiannaki
    def update_object_checksum(self, user, account, container, name, version,
568 29148653 Sofia Papagiannaki
                               checksum):
569 33b4e4a6 Antony Chazapis
        """Update an object's checksum."""
570 33b4e4a6 Antony Chazapis
        return
571 d50ed8d4 Sofia Papagiannaki
572 29148653 Sofia Papagiannaki
    def copy_object(self, user, src_account, src_container, src_name,
573 29148653 Sofia Papagiannaki
                    dest_account, dest_container, dest_name, type, domain,
574 29148653 Sofia Papagiannaki
                    meta=None, replace_meta=False, permissions=None,
575 29148653 Sofia Papagiannaki
                    src_version=None, delimiter=None):
576 02c4d2ba Antony Chazapis
        """Copy an object's data and metadata and return the new version.
577 d50ed8d4 Sofia Papagiannaki

578 b956618e Antony Chazapis
        Parameters:
579 cb69c154 Antony Chazapis
            'domain': Metadata domain
580 d50ed8d4 Sofia Papagiannaki

581 29148653 Sofia Papagiannaki
            'meta': Dictionary with metadata to change from source
582 29148653 Sofia Papagiannaki
                    to destination
583 d50ed8d4 Sofia Papagiannaki

584 22dab079 Antony Chazapis
            'replace_meta': Replace metadata instead of update
585 d50ed8d4 Sofia Papagiannaki

586 3436eeb0 Antony Chazapis
            'permissions': New object permissions
587 d50ed8d4 Sofia Papagiannaki

588 3436eeb0 Antony Chazapis
            'src_version': Copy from the version provided
589 d50ed8d4 Sofia Papagiannaki

590 29148653 Sofia Papagiannaki
            'delimiter': Copy objects whose path starts with
591 29148653 Sofia Papagiannaki
                         src_name + delimiter
592 d50ed8d4 Sofia Papagiannaki

593 b956618e Antony Chazapis
        Raises:
594 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
595 d50ed8d4 Sofia Papagiannaki

596 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
597 d50ed8d4 Sofia Papagiannaki

598 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
599 d50ed8d4 Sofia Papagiannaki

600 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
601 d50ed8d4 Sofia Papagiannaki

602 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
603 b956618e Antony Chazapis
        """
604 02c4d2ba Antony Chazapis
        return ''
605 d50ed8d4 Sofia Papagiannaki
606 29148653 Sofia Papagiannaki
    def move_object(self, user, src_account, src_container, src_name,
607 29148653 Sofia Papagiannaki
                    dest_account, dest_container, dest_name, type, domain,
608 29148653 Sofia Papagiannaki
                    meta=None, replace_meta=False, permissions=None,
609 29148653 Sofia Papagiannaki
                    delimiter=None):
610 02c4d2ba Antony Chazapis
        """Move an object's data and metadata and return the new version.
611 d50ed8d4 Sofia Papagiannaki

612 b956618e Antony Chazapis
        Parameters:
613 cb69c154 Antony Chazapis
            'domain': Metadata domain
614 d50ed8d4 Sofia Papagiannaki

615 29148653 Sofia Papagiannaki
            'meta': Dictionary with metadata to change from source
616 29148653 Sofia Papagiannaki
                    to destination
617 d50ed8d4 Sofia Papagiannaki

618 22dab079 Antony Chazapis
            'replace_meta': Replace metadata instead of update
619 d50ed8d4 Sofia Papagiannaki

620 3436eeb0 Antony Chazapis
            'permissions': New object permissions
621 d50ed8d4 Sofia Papagiannaki

622 29148653 Sofia Papagiannaki
            'delimiter': Move objects whose path starts with
623 29148653 Sofia Papagiannaki
                         src_name + delimiter
624 d50ed8d4 Sofia Papagiannaki

625 b956618e Antony Chazapis
        Raises:
626 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
627 d50ed8d4 Sofia Papagiannaki

628 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
629 d50ed8d4 Sofia Papagiannaki

630 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
631 d50ed8d4 Sofia Papagiannaki

632 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
633 b956618e Antony Chazapis
        """
634 02c4d2ba Antony Chazapis
        return ''
635 d50ed8d4 Sofia Papagiannaki
636 29148653 Sofia Papagiannaki
    def delete_object(self, user, account, container, name, until=None,
637 29148653 Sofia Papagiannaki
                      delimiter=None):
638 84846143 Antony Chazapis
        """Delete/purge an object.
639 d50ed8d4 Sofia Papagiannaki

640 4d15c94e Sofia Papagiannaki
        Parameters:
641 29148653 Sofia Papagiannaki
            'delimiter': Delete objects whose path starting with
642 29148653 Sofia Papagiannaki
                         name + delimiter
643 d50ed8d4 Sofia Papagiannaki

644 b956618e Antony Chazapis
        Raises:
645 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
646 d50ed8d4 Sofia Papagiannaki

647 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
648 b956618e Antony Chazapis
        """
649 b956618e Antony Chazapis
        return
650 d50ed8d4 Sofia Papagiannaki
651 83dd59c5 Antony Chazapis
    def list_versions(self, user, account, container, name):
652 29148653 Sofia Papagiannaki
        """Return a list of all object (version, version_timestamp) tuples.
653 d50ed8d4 Sofia Papagiannaki

654 cca6c617 Antony Chazapis
        Raises:
655 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
656 cca6c617 Antony Chazapis
        """
657 58a6c894 Antony Chazapis
        return []
658 d50ed8d4 Sofia Papagiannaki
659 37bee317 Antony Chazapis
    def get_uuid(self, user, uuid):
660 37bee317 Antony Chazapis
        """Return the (account, container, name) for the UUID given.
661 d50ed8d4 Sofia Papagiannaki

662 37bee317 Antony Chazapis
        Raises:
663 37bee317 Antony Chazapis
            NotAllowedError: Operation not permitted
664 d50ed8d4 Sofia Papagiannaki

665 37bee317 Antony Chazapis
            NameError: UUID does not exist
666 37bee317 Antony Chazapis
        """
667 37bee317 Antony Chazapis
        return None
668 d50ed8d4 Sofia Papagiannaki
669 bb4eafc6 Antony Chazapis
    def get_public(self, user, public):
670 bb4eafc6 Antony Chazapis
        """Return the (account, container, name) for the public id given.
671 d50ed8d4 Sofia Papagiannaki

672 bb4eafc6 Antony Chazapis
        Raises:
673 bb4eafc6 Antony Chazapis
            NotAllowedError: Operation not permitted
674 d50ed8d4 Sofia Papagiannaki

675 bb4eafc6 Antony Chazapis
            NameError: Public id does not exist
676 bb4eafc6 Antony Chazapis
        """
677 bb4eafc6 Antony Chazapis
        return None
678 d50ed8d4 Sofia Papagiannaki
679 22dab079 Antony Chazapis
    def get_block(self, hash):
680 22dab079 Antony Chazapis
        """Return a block's data.
681 d50ed8d4 Sofia Papagiannaki

682 22dab079 Antony Chazapis
        Raises:
683 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Block does not exist
684 22dab079 Antony Chazapis
        """
685 22dab079 Antony Chazapis
        return ''
686 d50ed8d4 Sofia Papagiannaki
687 22dab079 Antony Chazapis
    def put_block(self, data):
688 22dab079 Antony Chazapis
        """Store a block and return the hash."""
689 22dab079 Antony Chazapis
        return 0
690 d50ed8d4 Sofia Papagiannaki
691 22dab079 Antony Chazapis
    def update_block(self, hash, data, offset=0):
692 22dab079 Antony Chazapis
        """Update a known block and return the hash.
693 d50ed8d4 Sofia Papagiannaki

694 22dab079 Antony Chazapis
        Raises:
695 22dab079 Antony Chazapis
            IndexError: Offset or data outside block limits
696 22dab079 Antony Chazapis
        """
697 22dab079 Antony Chazapis
        return 0
698 29148653 Sofia Papagiannaki
699 29148653 Sofia Papagiannaki
    def get_domain_objects(self, domain, user=None):
700 29148653 Sofia Papagiannaki
        """Return a list of tuples for objects under the domain.
701 29148653 Sofia Papagiannaki

702 29148653 Sofia Papagiannaki
        Parameters:
703 29148653 Sofia Papagiannaki
            'user': return only objects accessible to the user.
704 29148653 Sofia Papagiannaki
        """