70 |
70 |
Uses SQLite for storage.
|
71 |
71 |
"""
|
72 |
72 |
|
|
73 |
# TODO: Create account if not present in all functions.
|
|
74 |
|
73 |
75 |
def __init__(self, db):
|
74 |
76 |
self.hash_algorithm = 'sha256'
|
75 |
77 |
self.block_size = 4 * 1024 * 1024 # 4MB
|
... | ... | |
145 |
147 |
if user != account:
|
146 |
148 |
if until or account not in self._allowed_accounts(user):
|
147 |
149 |
raise NotAllowedError
|
|
150 |
else:
|
|
151 |
self._create_account(user, account)
|
148 |
152 |
try:
|
149 |
153 |
version_id, mtime = self._get_accountinfo(account, until)
|
150 |
154 |
except NameError:
|
|
155 |
# TODO: Make sure this doesn't happen.
|
151 |
156 |
version_id = None
|
152 |
157 |
mtime = 0
|
153 |
158 |
count, bytes, tstamp = self._get_pathstats(account, until)
|
... | ... | |
174 |
179 |
meta.update({'name': account, 'count': count, 'bytes': bytes})
|
175 |
180 |
if until is not None:
|
176 |
181 |
meta.update({'until_timestamp': tstamp})
|
177 |
|
if modified:
|
178 |
|
meta.update({'modified': modified})
|
|
182 |
meta.update({'modified': modified})
|
179 |
183 |
return meta
|
180 |
184 |
|
181 |
185 |
@backend_method
|
... | ... | |
196 |
200 |
if account not in self._allowed_accounts(user):
|
197 |
201 |
raise NotAllowedError
|
198 |
202 |
return {}
|
|
203 |
self._create_account(user, account)
|
199 |
204 |
return self._get_groups(account)
|
200 |
205 |
|
201 |
206 |
@backend_method
|
... | ... | |
205 |
210 |
logger.debug("update_account_groups: %s %s %s", account, groups, replace)
|
206 |
211 |
if user != account:
|
207 |
212 |
raise NotAllowedError
|
|
213 |
self._create_account(user, account)
|
208 |
214 |
self._check_groups(groups)
|
209 |
215 |
self._put_groups(account, groups, replace)
|
210 |
216 |
|
... | ... | |
221 |
227 |
pass
|
222 |
228 |
else:
|
223 |
229 |
raise NameError('Account already exists')
|
224 |
|
version_id = self._put_version(account, user)
|
|
230 |
self._put_version(account, user)
|
225 |
231 |
|
226 |
232 |
@backend_method
|
227 |
233 |
def delete_account(self, user, account):
|
... | ... | |
338 |
344 |
if policy:
|
339 |
345 |
self._check_policy(policy)
|
340 |
346 |
path = os.path.join(account, container)
|
341 |
|
version_id = self._put_version(path, user)
|
|
347 |
version_id = self._put_version(path, user)[0]
|
342 |
348 |
for k, v in self.default_policy.iteritems():
|
343 |
349 |
if k not in policy:
|
344 |
350 |
policy[k] = v
|
... | ... | |
661 |
667 |
tstamp = int(time.time())
|
662 |
668 |
sql = 'insert into versions (name, user, tstamp, size, hide) values (?, ?, ?, ?, ?)'
|
663 |
669 |
id = self.con.execute(sql, (path, user, tstamp, size, hide)).lastrowid
|
664 |
|
return str(id)
|
|
670 |
return str(id), tstamp
|
665 |
671 |
|
666 |
672 |
def _copy_version(self, user, src_path, dest_path, copy_meta=True, copy_data=True, src_version=None):
|
667 |
673 |
if src_version is not None:
|
... | ... | |
675 |
681 |
size = 0
|
676 |
682 |
if not copy_data:
|
677 |
683 |
size = 0
|
678 |
|
dest_version_id = self._put_version(dest_path, user, size)
|
|
684 |
dest_version_id = self._put_version(dest_path, user, size)[0]
|
679 |
685 |
if copy_meta and src_version_id is not None:
|
680 |
686 |
sql = 'insert into metadata select %s, key, value from metadata where version_id = ?'
|
681 |
687 |
sql = sql % dest_version_id
|
... | ... | |
722 |
728 |
version_id, muser, mtime, size = self._get_version(path, version)
|
723 |
729 |
return path, version_id, muser, mtime, size
|
724 |
730 |
|
|
731 |
def _create_account(self, user, account):
|
|
732 |
try:
|
|
733 |
self._get_accountinfo(account)
|
|
734 |
except NameError:
|
|
735 |
self._put_version(account, user)
|
|
736 |
|
725 |
737 |
def _get_metadata(self, path, version):
|
726 |
738 |
sql = 'select key, value from metadata where version_id = ?'
|
727 |
739 |
c = self.con.execute(sql, (version,))
|
... | ... | |
759 |
771 |
c = self.con.execute(sql, (path,))
|
760 |
772 |
return dict(c.fetchall())
|
761 |
773 |
|
762 |
|
|
763 |
774 |
def _list_limits(self, listing, marker, limit):
|
764 |
775 |
start = 0
|
765 |
776 |
if marker:
|