Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / backends / base.py @ d3655326

History | View | Annotate | Download (19.6 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 d50ed8d4 Sofia Papagiannaki
DEFAULT_QUOTA = 0  # No quota.
36 228de81b Antony Chazapis
DEFAULT_VERSIONING = 'auto'
37 228de81b Antony Chazapis
38 228de81b Antony Chazapis
39 d50ed8d4 Sofia Papagiannaki
40 cca6c617 Antony Chazapis
class NotAllowedError(Exception):
41 cca6c617 Antony Chazapis
    pass
42 cca6c617 Antony Chazapis
43 d50ed8d4 Sofia Papagiannaki
44 5df6c6d1 Antony Chazapis
class QuotaError(Exception):
45 5df6c6d1 Antony Chazapis
    pass
46 5df6c6d1 Antony Chazapis
47 d50ed8d4 Sofia Papagiannaki
48 7efc9f86 Sofia Papagiannaki
class AccountExists(NameError):
49 7efc9f86 Sofia Papagiannaki
    pass
50 d50ed8d4 Sofia Papagiannaki
51 d50ed8d4 Sofia Papagiannaki
52 7efc9f86 Sofia Papagiannaki
class ContainerExists(NameError):
53 7efc9f86 Sofia Papagiannaki
    pass
54 7efc9f86 Sofia Papagiannaki
55 d50ed8d4 Sofia Papagiannaki
56 7efc9f86 Sofia Papagiannaki
class AccountNotEmpty(IndexError):
57 7efc9f86 Sofia Papagiannaki
    pass
58 7efc9f86 Sofia Papagiannaki
59 d50ed8d4 Sofia Papagiannaki
60 7efc9f86 Sofia Papagiannaki
class ContainerNotEmpty(IndexError):
61 7efc9f86 Sofia Papagiannaki
    pass
62 7efc9f86 Sofia Papagiannaki
63 d50ed8d4 Sofia Papagiannaki
64 7efc9f86 Sofia Papagiannaki
class ItemNotExists(NameError):
65 7efc9f86 Sofia Papagiannaki
    pass
66 7efc9f86 Sofia Papagiannaki
67 d50ed8d4 Sofia Papagiannaki
68 7efc9f86 Sofia Papagiannaki
class VersionNotExists(IndexError):
69 7efc9f86 Sofia Papagiannaki
    pass
70 7efc9f86 Sofia Papagiannaki
71 d50ed8d4 Sofia Papagiannaki
72 8ee4ec50 Vangelis Koukis
class BaseBackend(object):
73 22dab079 Antony Chazapis
    """Abstract backend class that serves as a reference for actual implementations.
74 d50ed8d4 Sofia Papagiannaki

75 b956618e Antony Chazapis
    The purpose of the backend is to provide the necessary functions for handling data
76 b956618e Antony Chazapis
    and metadata. It is responsible for the actual storage and retrieval of information.
77 d50ed8d4 Sofia Papagiannaki

78 b956618e Antony Chazapis
    Note that the account level is always valid as it is checked from another subsystem.
79 d50ed8d4 Sofia Papagiannaki

80 02c0c3fa Antony Chazapis
    When not replacing metadata/groups/policy, keys with empty values should be deleted.
81 d50ed8d4 Sofia Papagiannaki

82 22dab079 Antony Chazapis
    The following variables should be available:
83 22dab079 Antony Chazapis
        'hash_algorithm': Suggested is 'sha256'
84 d50ed8d4 Sofia Papagiannaki

85 22dab079 Antony Chazapis
        'block_size': Suggested is 4MB
86 d50ed8d4 Sofia Papagiannaki

87 b2832c6a Antony Chazapis
        'default_policy': A dictionary with default policy settings
88 b956618e Antony Chazapis
    """
89 d50ed8d4 Sofia Papagiannaki
90 d14fe290 Antony Chazapis
    def close(self):
91 d14fe290 Antony Chazapis
        """Close the backend connection."""
92 d14fe290 Antony Chazapis
        pass
93 d50ed8d4 Sofia Papagiannaki
94 f6c97079 Antony Chazapis
    def list_accounts(self, user, marker=None, limit=10000):
95 f6c97079 Antony Chazapis
        """Return a list of accounts the user can access.
96 d50ed8d4 Sofia Papagiannaki

97 f6c97079 Antony Chazapis
        Parameters:
98 f6c97079 Antony Chazapis
            'marker': Start list from the next item after 'marker'
99 d50ed8d4 Sofia Papagiannaki

100 f6c97079 Antony Chazapis
            'limit': Number of containers to return
101 f6c97079 Antony Chazapis
        """
102 f6c97079 Antony Chazapis
        return []
103 d50ed8d4 Sofia Papagiannaki
104 82482e2c Antony Chazapis
    def get_account_meta(self, user, account, domain, until=None, include_user_defined=True):
105 cb69c154 Antony Chazapis
        """Return a dictionary with the account metadata for the domain.
106 d50ed8d4 Sofia Papagiannaki

107 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
108 b956618e Antony Chazapis
            'name': The account name
109 d50ed8d4 Sofia Papagiannaki

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

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

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

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

118 cca6c617 Antony Chazapis
        Raises:
119 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
120 b956618e Antony Chazapis
        """
121 b956618e Antony Chazapis
        return {}
122 d50ed8d4 Sofia Papagiannaki
123 cb69c154 Antony Chazapis
    def update_account_meta(self, user, account, domain, meta, replace=False):
124 cb69c154 Antony Chazapis
        """Update the metadata associated with the account for the domain.
125 d50ed8d4 Sofia Papagiannaki

126 b956618e Antony Chazapis
        Parameters:
127 cb69c154 Antony Chazapis
            'domain': Metadata domain
128 d50ed8d4 Sofia Papagiannaki

129 b956618e Antony Chazapis
            'meta': Dictionary with metadata to update
130 d50ed8d4 Sofia Papagiannaki

131 22dab079 Antony Chazapis
            'replace': Replace instead of update
132 d50ed8d4 Sofia Papagiannaki

133 cca6c617 Antony Chazapis
        Raises:
134 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
135 b956618e Antony Chazapis
        """
136 b956618e Antony Chazapis
        return
137 d50ed8d4 Sofia Papagiannaki
138 02c0c3fa Antony Chazapis
    def get_account_groups(self, user, account):
139 02c0c3fa Antony Chazapis
        """Return a dictionary with the user groups defined for this account.
140 d50ed8d4 Sofia Papagiannaki

141 cca6c617 Antony Chazapis
        Raises:
142 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
143 58a6c894 Antony Chazapis
        """
144 02c0c3fa Antony Chazapis
        return {}
145 d50ed8d4 Sofia Papagiannaki
146 02c0c3fa Antony Chazapis
    def update_account_groups(self, user, account, groups, replace=False):
147 02c0c3fa Antony Chazapis
        """Update the groups associated with the account.
148 d50ed8d4 Sofia Papagiannaki

149 b956618e Antony Chazapis
        Raises:
150 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
151 d50ed8d4 Sofia Papagiannaki

152 02c0c3fa Antony Chazapis
            ValueError: Invalid data in groups
153 b956618e Antony Chazapis
        """
154 b956618e Antony Chazapis
        return
155 d50ed8d4 Sofia Papagiannaki
156 b2832c6a Antony Chazapis
    def get_account_policy(self, user, account):
157 b2832c6a Antony Chazapis
        """Return a dictionary with the account policy.
158 d50ed8d4 Sofia Papagiannaki

159 b2832c6a Antony Chazapis
        The keys returned are:
160 b2832c6a Antony Chazapis
            'quota': The maximum bytes allowed (default is 0 - unlimited)
161 d50ed8d4 Sofia Papagiannaki

162 b2832c6a Antony Chazapis
            'versioning': Can be 'auto', 'manual' or 'none' (default is 'manual')
163 d50ed8d4 Sofia Papagiannaki

164 b2832c6a Antony Chazapis
        Raises:
165 b2832c6a Antony Chazapis
            NotAllowedError: Operation not permitted
166 b2832c6a Antony Chazapis
        """
167 b2832c6a Antony Chazapis
        return {}
168 d50ed8d4 Sofia Papagiannaki
169 b2832c6a Antony Chazapis
    def update_account_policy(self, user, account, policy, replace=False):
170 b2832c6a Antony Chazapis
        """Update the policy associated with the account.
171 d50ed8d4 Sofia Papagiannaki

172 b2832c6a Antony Chazapis
        Raises:
173 b2832c6a Antony Chazapis
            NotAllowedError: Operation not permitted
174 d50ed8d4 Sofia Papagiannaki

175 b2832c6a Antony Chazapis
            ValueError: Invalid policy defined
176 b2832c6a Antony Chazapis
        """
177 b2832c6a Antony Chazapis
        return
178 d50ed8d4 Sofia Papagiannaki
179 1c50a9e5 Sofia Papagiannaki
    def put_account(self, user, account, policy={}):
180 a9b3f29d Antony Chazapis
        """Create a new account with the given name.
181 d50ed8d4 Sofia Papagiannaki

182 a9b3f29d Antony Chazapis
        Raises:
183 a9b3f29d Antony Chazapis
            NotAllowedError: Operation not permitted
184 d50ed8d4 Sofia Papagiannaki

185 b2832c6a Antony Chazapis
            ValueError: Invalid policy defined
186 a9b3f29d Antony Chazapis
        """
187 a9b3f29d Antony Chazapis
        return
188 d50ed8d4 Sofia Papagiannaki
189 02c0c3fa Antony Chazapis
    def delete_account(self, user, account):
190 02c0c3fa Antony Chazapis
        """Delete the account with the given name.
191 d50ed8d4 Sofia Papagiannaki

192 b956618e Antony Chazapis
        Raises:
193 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
194 d50ed8d4 Sofia Papagiannaki

195 7efc9f86 Sofia Papagiannaki
            AccountNotEmpty: Account is not empty
196 b956618e Antony Chazapis
        """
197 b956618e Antony Chazapis
        return
198 d50ed8d4 Sofia Papagiannaki
199 4d15c94e Sofia Papagiannaki
    def list_containers(self, user, account, marker=None, limit=10000, shared=False, until=None, public=False):
200 f6c97079 Antony Chazapis
        """Return a list of container names existing under an account.
201 d50ed8d4 Sofia Papagiannaki

202 02c0c3fa Antony Chazapis
        Parameters:
203 02c0c3fa Antony Chazapis
            'marker': Start list from the next item after 'marker'
204 d50ed8d4 Sofia Papagiannaki

205 02c0c3fa Antony Chazapis
            'limit': Number of containers to return
206 d50ed8d4 Sofia Papagiannaki

207 b18ef3ad Antony Chazapis
            'shared': Only list containers with permissions set
208 d50ed8d4 Sofia Papagiannaki

209 4d15c94e Sofia Papagiannaki
            'public': Only list containers containing public objects
210 d50ed8d4 Sofia Papagiannaki

211 d50ed8d4 Sofia Papagiannaki

212 02c0c3fa Antony Chazapis
        Raises:
213 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
214 02c0c3fa Antony Chazapis
        """
215 02c0c3fa Antony Chazapis
        return []
216 d50ed8d4 Sofia Papagiannaki
217 371d907a Antony Chazapis
    def list_container_meta(self, user, account, container, domain, until=None):
218 371d907a Antony Chazapis
        """Return a list with all the container's object meta keys for the domain.
219 d50ed8d4 Sofia Papagiannaki

220 371d907a Antony Chazapis
        Raises:
221 371d907a Antony Chazapis
            NotAllowedError: Operation not permitted
222 d50ed8d4 Sofia Papagiannaki

223 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
224 371d907a Antony Chazapis
        """
225 371d907a Antony Chazapis
        return []
226 d50ed8d4 Sofia Papagiannaki
227 82482e2c Antony Chazapis
    def get_container_meta(self, user, account, container, domain, until=None, include_user_defined=True):
228 cb69c154 Antony Chazapis
        """Return a dictionary with the container metadata for the domain.
229 d50ed8d4 Sofia Papagiannaki

230 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
231 b956618e Antony Chazapis
            'name': The container name
232 d50ed8d4 Sofia Papagiannaki

233 b956618e Antony Chazapis
            'count': The number of objects
234 d50ed8d4 Sofia Papagiannaki

235 b956618e Antony Chazapis
            'bytes': The total data size
236 d50ed8d4 Sofia Papagiannaki

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

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

241 b956618e Antony Chazapis
        Raises:
242 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
243 d50ed8d4 Sofia Papagiannaki

244 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
245 b956618e Antony Chazapis
        """
246 b956618e Antony Chazapis
        return {}
247 d50ed8d4 Sofia Papagiannaki
248 cb69c154 Antony Chazapis
    def update_container_meta(self, user, account, container, domain, meta, replace=False):
249 cb69c154 Antony Chazapis
        """Update the metadata associated with the container for the domain.
250 d50ed8d4 Sofia Papagiannaki

251 b956618e Antony Chazapis
        Parameters:
252 cb69c154 Antony Chazapis
            'domain': Metadata domain
253 d50ed8d4 Sofia Papagiannaki

254 b956618e Antony Chazapis
            'meta': Dictionary with metadata to update
255 d50ed8d4 Sofia Papagiannaki

256 22dab079 Antony Chazapis
            'replace': Replace instead of update
257 d50ed8d4 Sofia Papagiannaki

258 b956618e Antony Chazapis
        Raises:
259 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
260 d50ed8d4 Sofia Papagiannaki

261 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
262 b956618e Antony Chazapis
        """
263 b956618e Antony Chazapis
        return
264 d50ed8d4 Sofia Papagiannaki
265 02c0c3fa Antony Chazapis
    def get_container_policy(self, user, account, container):
266 02c0c3fa Antony Chazapis
        """Return a dictionary with the container policy.
267 d50ed8d4 Sofia Papagiannaki

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

271 02c0c3fa Antony Chazapis
            'versioning': Can be 'auto', 'manual' or 'none' (default is 'manual')
272 d50ed8d4 Sofia Papagiannaki

273 02c0c3fa Antony Chazapis
        Raises:
274 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
275 d50ed8d4 Sofia Papagiannaki

276 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
277 02c0c3fa Antony Chazapis
        """
278 02c0c3fa Antony Chazapis
        return {}
279 d50ed8d4 Sofia Papagiannaki
280 02c0c3fa Antony Chazapis
    def update_container_policy(self, user, account, container, policy, replace=False):
281 b2832c6a Antony Chazapis
        """Update the policy associated with the container.
282 d50ed8d4 Sofia Papagiannaki

283 02c0c3fa Antony Chazapis
        Raises:
284 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
285 d50ed8d4 Sofia Papagiannaki

286 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
287 d50ed8d4 Sofia Papagiannaki

288 02c0c3fa Antony Chazapis
            ValueError: Invalid policy defined
289 02c0c3fa Antony Chazapis
        """
290 02c0c3fa Antony Chazapis
        return
291 d50ed8d4 Sofia Papagiannaki
292 e46b2bcf Sofia Papagiannaki
    def put_container(self, user, account, container, policy={}, delimiter=None):
293 02c0c3fa Antony Chazapis
        """Create a new container with the given name.
294 d50ed8d4 Sofia Papagiannaki

295 e46b2bcf Sofia Papagiannaki
        Parameters:
296 e46b2bcf Sofia Papagiannaki
            'delimiter': If present deletes container contents instead of the container
297 d50ed8d4 Sofia Papagiannaki

298 02c0c3fa Antony Chazapis
        Raises:
299 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
300 d50ed8d4 Sofia Papagiannaki

301 7efc9f86 Sofia Papagiannaki
            ContainerExists: Container already exists
302 d50ed8d4 Sofia Papagiannaki

303 02c0c3fa Antony Chazapis
            ValueError: Invalid policy defined
304 02c0c3fa Antony Chazapis
        """
305 02c0c3fa Antony Chazapis
        return
306 d50ed8d4 Sofia Papagiannaki
307 84846143 Antony Chazapis
    def delete_container(self, user, account, container, until=None):
308 84846143 Antony Chazapis
        """Delete/purge the container with the given name.
309 d50ed8d4 Sofia Papagiannaki

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

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

315 7efc9f86 Sofia Papagiannaki
            ContainerNotEmpty: Container is not empty
316 02c0c3fa Antony Chazapis
        """
317 02c0c3fa Antony Chazapis
        return
318 d50ed8d4 Sofia Papagiannaki
319 4d15c94e Sofia Papagiannaki
    def list_objects(self, user, account, container, prefix='', delimiter=None, marker=None, limit=10000, virtual=True, domain=None, keys=[], shared=False, until=None, size_range=None, public=False):
320 58a6c894 Antony Chazapis
        """Return a list of object (name, version_id) tuples existing under a container.
321 d50ed8d4 Sofia Papagiannaki

322 b956618e Antony Chazapis
        Parameters:
323 b956618e Antony Chazapis
            'prefix': List objects starting with 'prefix'
324 d50ed8d4 Sofia Papagiannaki

325 b956618e Antony Chazapis
            'delimiter': Return unique names before 'delimiter' and after 'prefix'
326 d50ed8d4 Sofia Papagiannaki

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

329 b956618e Antony Chazapis
            'limit': Number of objects to return
330 d50ed8d4 Sofia Papagiannaki

331 f4b61e0c Antony Chazapis
            'virtual': If not set, the result will only include names starting
332 f4b61e0c Antony Chazapis
                       with 'prefix' and ending without a 'delimiter' or with
333 f4b61e0c Antony Chazapis
                       the first occurance of the 'delimiter' after 'prefix'.
334 f4b61e0c Antony Chazapis
                       If set, the result will include all names after 'prefix',
335 3f839f59 Antony Chazapis
                       up to and including the 'delimiter' if it is found
336 d50ed8d4 Sofia Papagiannaki

337 cb69c154 Antony Chazapis
            'domain': Metadata domain for keys
338 d50ed8d4 Sofia Papagiannaki

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

343 b18ef3ad Antony Chazapis
            'shared': Only list objects with permissions set
344 d50ed8d4 Sofia Papagiannaki

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

348 4d15c94e Sofia Papagiannaki
            'public': Only list public objects
349 d50ed8d4 Sofia Papagiannaki

350 d50ed8d4 Sofia Papagiannaki

351 22dab079 Antony Chazapis
        Raises:
352 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
353 d50ed8d4 Sofia Papagiannaki

354 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
355 22dab079 Antony Chazapis
        """
356 22dab079 Antony Chazapis
        return []
357 d50ed8d4 Sofia Papagiannaki
358 371d907a Antony Chazapis
    def list_object_meta(self, user, account, container, prefix='', delimiter=None, marker=None, limit=10000, virtual=True, domain=None, keys=[], shared=False, until=None, size_range=None):
359 371d907a Antony Chazapis
        """Return a list of object metadata dicts existing under a container.
360 d50ed8d4 Sofia Papagiannaki

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

364 15a96c3e Antony Chazapis
        Raises:
365 15a96c3e Antony Chazapis
            NotAllowedError: Operation not permitted
366 d50ed8d4 Sofia Papagiannaki

367 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
368 b956618e Antony Chazapis
        """
369 b956618e Antony Chazapis
        return []
370 d50ed8d4 Sofia Papagiannaki
371 15a96c3e Antony Chazapis
    def list_object_permissions(self, user, account, container, prefix=''):
372 15a96c3e Antony Chazapis
        """Return a list of paths that enforce permissions under a container.
373 d50ed8d4 Sofia Papagiannaki

374 15a96c3e Antony Chazapis
        Raises:
375 15a96c3e Antony Chazapis
            NotAllowedError: Operation not permitted
376 15a96c3e Antony Chazapis
        """
377 15a96c3e Antony Chazapis
        return []
378 d50ed8d4 Sofia Papagiannaki
379 15a96c3e Antony Chazapis
    def list_object_public(self, user, account, container, prefix=''):
380 15a96c3e Antony Chazapis
        """Return a dict mapping paths to public ids for objects that are public under a container."""
381 15a96c3e Antony Chazapis
        return {}
382 d50ed8d4 Sofia Papagiannaki
383 82482e2c Antony Chazapis
    def get_object_meta(self, user, account, container, name, domain, version=None, include_user_defined=True):
384 cb69c154 Antony Chazapis
        """Return a dictionary with the object metadata for the domain.
385 d50ed8d4 Sofia Papagiannaki

386 b956618e Antony Chazapis
        The keys returned are all user-defined, except:
387 58a6c894 Antony Chazapis
            'name': The object name
388 d50ed8d4 Sofia Papagiannaki

389 b956618e Antony Chazapis
            'bytes': The total data size
390 d50ed8d4 Sofia Papagiannaki

391 66ce2ca5 Antony Chazapis
            'type': The content type
392 d50ed8d4 Sofia Papagiannaki

393 4a1c29ea Antony Chazapis
            'hash': The hashmap hash
394 d50ed8d4 Sofia Papagiannaki

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

397 104626e3 Antony Chazapis
            'modified_by': The user that committed the object (version requested)
398 d50ed8d4 Sofia Papagiannaki

399 58a6c894 Antony Chazapis
            'version': The version identifier
400 d50ed8d4 Sofia Papagiannaki

401 58a6c894 Antony Chazapis
            'version_timestamp': The version's modification timestamp
402 d50ed8d4 Sofia Papagiannaki

403 25ae8b75 Antony Chazapis
            'uuid': A unique identifier that persists data or metadata updates and renames
404 d50ed8d4 Sofia Papagiannaki

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

407 b956618e Antony Chazapis
        Raises:
408 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
409 d50ed8d4 Sofia Papagiannaki

410 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
411 d50ed8d4 Sofia Papagiannaki

412 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
413 b956618e Antony Chazapis
        """
414 b956618e Antony Chazapis
        return {}
415 d50ed8d4 Sofia Papagiannaki
416 cb69c154 Antony Chazapis
    def update_object_meta(self, user, account, container, name, domain, meta, replace=False):
417 cb69c154 Antony Chazapis
        """Update the metadata associated with the object for the domain and return the new version.
418 d50ed8d4 Sofia Papagiannaki

419 b956618e Antony Chazapis
        Parameters:
420 cb69c154 Antony Chazapis
            'domain': Metadata domain
421 d50ed8d4 Sofia Papagiannaki

422 a6eb13e9 Antony Chazapis
            'meta': Dictionary with metadata to update
423 d50ed8d4 Sofia Papagiannaki

424 22dab079 Antony Chazapis
            'replace': Replace instead of update
425 d50ed8d4 Sofia Papagiannaki

426 b956618e Antony Chazapis
        Raises:
427 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
428 d50ed8d4 Sofia Papagiannaki

429 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
430 b956618e Antony Chazapis
        """
431 02c4d2ba Antony Chazapis
        return ''
432 d50ed8d4 Sofia Papagiannaki
433 3436eeb0 Antony Chazapis
    def get_object_permissions(self, user, account, container, name):
434 067cf1fc Antony Chazapis
        """Return the action allowed on the object, the path
435 067cf1fc Antony Chazapis
        from which the object gets its permissions from,
436 cca6c617 Antony Chazapis
        along with a dictionary containing the permissions.
437 d50ed8d4 Sofia Papagiannaki

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

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

443 3436eeb0 Antony Chazapis
        Raises:
444 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
445 d50ed8d4 Sofia Papagiannaki

446 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
447 3436eeb0 Antony Chazapis
        """
448 3436eeb0 Antony Chazapis
        return {}
449 d50ed8d4 Sofia Papagiannaki
450 3436eeb0 Antony Chazapis
    def update_object_permissions(self, user, account, container, name, permissions):
451 345dcf39 Antony Chazapis
        """Update (set) the permissions associated with the object.
452 d50ed8d4 Sofia Papagiannaki

453 3436eeb0 Antony Chazapis
        Parameters:
454 345dcf39 Antony Chazapis
            'permissions': Dictionary with permissions to set
455 d50ed8d4 Sofia Papagiannaki

456 3436eeb0 Antony Chazapis
        Raises:
457 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
458 d50ed8d4 Sofia Papagiannaki

459 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
460 d50ed8d4 Sofia Papagiannaki

461 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
462 3436eeb0 Antony Chazapis
        """
463 3436eeb0 Antony Chazapis
        return
464 d50ed8d4 Sofia Papagiannaki
465 02c0c3fa Antony Chazapis
    def get_object_public(self, user, account, container, name):
466 bb4eafc6 Antony Chazapis
        """Return the public id of the object if applicable.
467 d50ed8d4 Sofia Papagiannaki

468 02c0c3fa Antony Chazapis
        Raises:
469 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
470 d50ed8d4 Sofia Papagiannaki

471 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
472 02c0c3fa Antony Chazapis
        """
473 02c0c3fa Antony Chazapis
        return None
474 d50ed8d4 Sofia Papagiannaki
475 02c0c3fa Antony Chazapis
    def update_object_public(self, user, account, container, name, public):
476 02c0c3fa Antony Chazapis
        """Update the public status of the object.
477 d50ed8d4 Sofia Papagiannaki

478 02c0c3fa Antony Chazapis
        Parameters:
479 02c0c3fa Antony Chazapis
            'public': Boolean value
480 d50ed8d4 Sofia Papagiannaki

481 02c0c3fa Antony Chazapis
        Raises:
482 02c0c3fa Antony Chazapis
            NotAllowedError: Operation not permitted
483 d50ed8d4 Sofia Papagiannaki

484 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
485 02c0c3fa Antony Chazapis
        """
486 02c0c3fa Antony Chazapis
        return
487 d50ed8d4 Sofia Papagiannaki
488 83dd59c5 Antony Chazapis
    def get_object_hashmap(self, user, account, container, name, version=None):
489 22dab079 Antony Chazapis
        """Return the object's size and a list with partial hashes.
490 d50ed8d4 Sofia Papagiannaki

491 b956618e Antony Chazapis
        Raises:
492 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
493 d50ed8d4 Sofia Papagiannaki

494 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
495 d50ed8d4 Sofia Papagiannaki

496 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
497 b956618e Antony Chazapis
        """
498 22dab079 Antony Chazapis
        return 0, []
499 d50ed8d4 Sofia Papagiannaki
500 33b4e4a6 Antony Chazapis
    def update_object_hashmap(self, user, account, container, name, size, type, hashmap, checksum, domain, meta={}, replace_meta=False, permissions=None):
501 02c4d2ba Antony Chazapis
        """Create/update an object with the specified size and partial hashes and return the new version.
502 d50ed8d4 Sofia Papagiannaki

503 3436eeb0 Antony Chazapis
        Parameters:
504 cb69c154 Antony Chazapis
            'domain': Metadata domain
505 d50ed8d4 Sofia Papagiannaki

506 cb69c154 Antony Chazapis
            'meta': Dictionary with metadata to change
507 d50ed8d4 Sofia Papagiannaki

508 3436eeb0 Antony Chazapis
            'replace_meta': Replace metadata instead of update
509 d50ed8d4 Sofia Papagiannaki

510 3436eeb0 Antony Chazapis
            'permissions': Updated object permissions
511 d50ed8d4 Sofia Papagiannaki

512 b956618e Antony Chazapis
        Raises:
513 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
514 d50ed8d4 Sofia Papagiannaki

515 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container does not exist
516 d50ed8d4 Sofia Papagiannaki

517 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
518 d50ed8d4 Sofia Papagiannaki

519 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
520 b956618e Antony Chazapis
        """
521 02c4d2ba Antony Chazapis
        return ''
522 d50ed8d4 Sofia Papagiannaki
523 33b4e4a6 Antony Chazapis
    def update_object_checksum(self, user, account, container, name, version, checksum):
524 33b4e4a6 Antony Chazapis
        """Update an object's checksum."""
525 33b4e4a6 Antony Chazapis
        return
526 d50ed8d4 Sofia Papagiannaki
527 4d15c94e Sofia Papagiannaki
    def copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None, src_version=None, delimiter=None):
528 02c4d2ba Antony Chazapis
        """Copy an object's data and metadata and return the new version.
529 d50ed8d4 Sofia Papagiannaki

530 b956618e Antony Chazapis
        Parameters:
531 cb69c154 Antony Chazapis
            'domain': Metadata domain
532 d50ed8d4 Sofia Papagiannaki

533 cb69c154 Antony Chazapis
            'meta': Dictionary with metadata to change from source to destination
534 d50ed8d4 Sofia Papagiannaki

535 22dab079 Antony Chazapis
            'replace_meta': Replace metadata instead of update
536 d50ed8d4 Sofia Papagiannaki

537 3436eeb0 Antony Chazapis
            'permissions': New object permissions
538 d50ed8d4 Sofia Papagiannaki

539 3436eeb0 Antony Chazapis
            'src_version': Copy from the version provided
540 d50ed8d4 Sofia Papagiannaki

541 4d15c94e Sofia Papagiannaki
            'delimiter': Copy objects whose path starts with src_name + delimiter
542 d50ed8d4 Sofia Papagiannaki

543 b956618e Antony Chazapis
        Raises:
544 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
545 d50ed8d4 Sofia Papagiannaki

546 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
547 d50ed8d4 Sofia Papagiannaki

548 7efc9f86 Sofia Papagiannaki
            VersionNotExists: Version does not exist
549 d50ed8d4 Sofia Papagiannaki

550 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
551 d50ed8d4 Sofia Papagiannaki

552 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
553 b956618e Antony Chazapis
        """
554 02c4d2ba Antony Chazapis
        return ''
555 d50ed8d4 Sofia Papagiannaki
556 4d15c94e Sofia Papagiannaki
    def move_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None, delimiter=None):
557 02c4d2ba Antony Chazapis
        """Move an object's data and metadata and return the new version.
558 d50ed8d4 Sofia Papagiannaki

559 b956618e Antony Chazapis
        Parameters:
560 cb69c154 Antony Chazapis
            'domain': Metadata domain
561 d50ed8d4 Sofia Papagiannaki

562 cb69c154 Antony Chazapis
            'meta': Dictionary with metadata to change from source to destination
563 d50ed8d4 Sofia Papagiannaki

564 22dab079 Antony Chazapis
            'replace_meta': Replace metadata instead of update
565 d50ed8d4 Sofia Papagiannaki

566 3436eeb0 Antony Chazapis
            'permissions': New object permissions
567 d50ed8d4 Sofia Papagiannaki

568 4d15c94e Sofia Papagiannaki
            'delimiter': Move objects whose path starts with src_name + delimiter
569 d50ed8d4 Sofia Papagiannaki

570 b956618e Antony Chazapis
        Raises:
571 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
572 d50ed8d4 Sofia Papagiannaki

573 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
574 d50ed8d4 Sofia Papagiannaki

575 3436eeb0 Antony Chazapis
            ValueError: Invalid users/groups in permissions
576 d50ed8d4 Sofia Papagiannaki

577 5df6c6d1 Antony Chazapis
            QuotaError: Account or container quota exceeded
578 b956618e Antony Chazapis
        """
579 02c4d2ba Antony Chazapis
        return ''
580 d50ed8d4 Sofia Papagiannaki
581 4d15c94e Sofia Papagiannaki
    def delete_object(self, user, account, container, name, until=None, delimiter=None):
582 84846143 Antony Chazapis
        """Delete/purge an object.
583 d50ed8d4 Sofia Papagiannaki

584 4d15c94e Sofia Papagiannaki
        Parameters:
585 4d15c94e Sofia Papagiannaki
            'delimiter': Delete objects whose path starting with name + delimiter
586 d50ed8d4 Sofia Papagiannaki

587 b956618e Antony Chazapis
        Raises:
588 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
589 d50ed8d4 Sofia Papagiannaki

590 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Container/object does not exist
591 b956618e Antony Chazapis
        """
592 b956618e Antony Chazapis
        return
593 d50ed8d4 Sofia Papagiannaki
594 83dd59c5 Antony Chazapis
    def list_versions(self, user, account, container, name):
595 cca6c617 Antony Chazapis
        """Return a list of all (version, version_timestamp) tuples for an object.
596 d50ed8d4 Sofia Papagiannaki

597 cca6c617 Antony Chazapis
        Raises:
598 cca6c617 Antony Chazapis
            NotAllowedError: Operation not permitted
599 cca6c617 Antony Chazapis
        """
600 58a6c894 Antony Chazapis
        return []
601 d50ed8d4 Sofia Papagiannaki
602 37bee317 Antony Chazapis
    def get_uuid(self, user, uuid):
603 37bee317 Antony Chazapis
        """Return the (account, container, name) for the UUID given.
604 d50ed8d4 Sofia Papagiannaki

605 37bee317 Antony Chazapis
        Raises:
606 37bee317 Antony Chazapis
            NotAllowedError: Operation not permitted
607 d50ed8d4 Sofia Papagiannaki

608 37bee317 Antony Chazapis
            NameError: UUID does not exist
609 37bee317 Antony Chazapis
        """
610 37bee317 Antony Chazapis
        return None
611 d50ed8d4 Sofia Papagiannaki
612 bb4eafc6 Antony Chazapis
    def get_public(self, user, public):
613 bb4eafc6 Antony Chazapis
        """Return the (account, container, name) for the public id given.
614 d50ed8d4 Sofia Papagiannaki

615 bb4eafc6 Antony Chazapis
        Raises:
616 bb4eafc6 Antony Chazapis
            NotAllowedError: Operation not permitted
617 d50ed8d4 Sofia Papagiannaki

618 bb4eafc6 Antony Chazapis
            NameError: Public id does not exist
619 bb4eafc6 Antony Chazapis
        """
620 bb4eafc6 Antony Chazapis
        return None
621 d50ed8d4 Sofia Papagiannaki
622 22dab079 Antony Chazapis
    def get_block(self, hash):
623 22dab079 Antony Chazapis
        """Return a block's data.
624 d50ed8d4 Sofia Papagiannaki

625 22dab079 Antony Chazapis
        Raises:
626 7efc9f86 Sofia Papagiannaki
            ItemNotExists: Block does not exist
627 22dab079 Antony Chazapis
        """
628 22dab079 Antony Chazapis
        return ''
629 d50ed8d4 Sofia Papagiannaki
630 22dab079 Antony Chazapis
    def put_block(self, data):
631 22dab079 Antony Chazapis
        """Store a block and return the hash."""
632 22dab079 Antony Chazapis
        return 0
633 d50ed8d4 Sofia Papagiannaki
634 22dab079 Antony Chazapis
    def update_block(self, hash, data, offset=0):
635 22dab079 Antony Chazapis
        """Update a known block and return the hash.
636 d50ed8d4 Sofia Papagiannaki

637 22dab079 Antony Chazapis
        Raises:
638 22dab079 Antony Chazapis
            IndexError: Offset or data outside block limits
639 22dab079 Antony Chazapis
        """
640 22dab079 Antony Chazapis
        return 0