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