Revision 862afc75
b/snf-cyclades-app/synnefo/plankton/backend.py | ||
---|---|---|
79 | 79 |
MAX_META_KEY_LENGTH = 128 - len(PLANKTON_DOMAIN) - len(PROPERTY_PREFIX) |
80 | 80 |
MAX_META_VALUE_LENGTH = 256 |
81 | 81 |
|
82 |
# TODO: Change domain! |
|
83 |
SNAPSHOTS_DOMAIN = PLANKTON_DOMAIN |
|
84 |
SNAPSHOTS_PREFIX = PLANKTON_PREFIX |
|
85 |
|
|
82 | 86 |
from pithos.backends.util import PithosBackendPool |
83 | 87 |
_pithos_backend_pool = \ |
84 | 88 |
PithosBackendPool( |
... | ... | |
427 | 431 |
image_url, name) |
428 | 432 |
return self._get_image(image_url) |
429 | 433 |
|
434 |
def list_snapshots(self, user=None): |
|
435 |
_snapshots = self.backend.get_domain_objects(domain=SNAPSHOTS_DOMAIN, |
|
436 |
user=user) |
|
437 |
snapshots = [] |
|
438 |
for (location, meta, permissions) in _snapshots: |
|
439 |
snapshot_url = "pithos://" + location |
|
440 |
if not (SNAPSHOTS_PREFIX + "is_snapshot") in meta: |
|
441 |
continue |
|
442 |
snapshots.append(snapshot_to_dict(snapshot_url, meta, permissions)) |
|
443 |
snapshots.sort(key="uuid", reverse=False) |
|
444 |
return snapshots |
|
445 |
|
|
446 |
@handle_backend_exceptions |
|
447 |
def get_snapshot(self, user, snapshot_uuid): |
|
448 |
#snapshot = self.backend.get_version_props_for_uuid(self.user, |
|
449 |
# snapshot_uuid, |
|
450 |
# SNAPSHOT_DOMAIN) |
|
451 |
snapshot_url = self._get_image_url(snapshot_uuid) |
|
452 |
meta = self._get_meta(snapshot_url) |
|
453 |
permissions = self._get_permissions(snapshot_url) |
|
454 |
return snapshot_to_dict(snapshot_url, meta, permissions) |
|
455 |
|
|
456 |
@handle_backend_exceptions |
|
457 |
def delete_snapshot(self, snapshot_uuid): |
|
458 |
self.backend.delete_object_for_uuid(self.user, snapshot_uuid) |
|
459 |
|
|
430 | 460 |
def _list_images(self, user=None, filters=None, params=None): |
431 | 461 |
filters = filters or {} |
432 | 462 |
|
... | ... | |
517 | 547 |
image["store"] = "pithos" |
518 | 548 |
image['owner'] = account |
519 | 549 |
|
550 |
# Distinquish between images and snapshots |
|
551 |
image["is_snapshot"] = (SNAPSHOTS_PREFIX + "is_snapshot") in meta |
|
552 |
|
|
520 | 553 |
# Permissions |
521 | 554 |
image["is_public"] = "*" in permissions.get('read', []) |
522 | 555 |
|
... | ... | |
539 | 572 |
return image |
540 | 573 |
|
541 | 574 |
|
575 |
def snapshot_to_dict(snapshot_url, meta, permissions): |
|
576 |
"""Render an snapshot to a dictionary""" |
|
577 |
account, container, name = split_url(snapshot_url) |
|
578 |
|
|
579 |
snapshot = {} |
|
580 |
snapshot["uuid"] = meta["uuid"] |
|
581 |
snapshot["map"] = meta["hash"] |
|
582 |
snapshot["size"] = meta["bytes"] |
|
583 |
|
|
584 |
snapshot['owner'] = account |
|
585 |
snapshot["location"] = snapshot_url |
|
586 |
snapshot["file_name"] = name |
|
587 |
|
|
588 |
created = meta.get("created_at", meta["modified"]) |
|
589 |
snapshot["created_at"] = format_timestamp(created) |
|
590 |
|
|
591 |
for key, val in meta.items(): |
|
592 |
if key.startswith(SNAPSHOTS_PREFIX): |
|
593 |
# Remove plankton prefix |
|
594 |
key = key.replace(SNAPSHOTS_PREFIX, "") |
|
595 |
if key == "metadata": |
|
596 |
snapshot[key] = json.loads(val) |
|
597 |
else: |
|
598 |
snapshot[key] = val |
|
599 |
|
|
600 |
return snapshot |
|
601 |
|
|
602 |
|
|
542 | 603 |
class JSONFileBackend(object): |
543 | 604 |
""" |
544 | 605 |
A dummy image backend that loads available images from a file with json |
Also available in: Unified diff