54 |
54 |
import json
|
55 |
55 |
import warnings
|
56 |
56 |
import logging
|
|
57 |
import os
|
|
58 |
|
57 |
59 |
from time import gmtime, strftime
|
58 |
60 |
from functools import wraps
|
59 |
61 |
from operator import itemgetter
|
60 |
62 |
|
61 |
63 |
from django.conf import settings
|
|
64 |
from django.utils import importlib
|
62 |
65 |
from pithos.backends.base import NotAllowedError, VersionNotExists
|
63 |
66 |
|
64 |
67 |
logger = logging.getLogger(__name__)
|
... | ... | |
468 |
471 |
image[key] = val
|
469 |
472 |
|
470 |
473 |
return image
|
|
474 |
|
|
475 |
|
|
476 |
class JSONFileBackend(object):
|
|
477 |
"""
|
|
478 |
A dummy image backend that loads available images from a file with json
|
|
479 |
formatted content.
|
|
480 |
|
|
481 |
usage:
|
|
482 |
PLANKTON_BACKEND_MODULE = 'synnefo.plankton.backend.JSONFileBackend'
|
|
483 |
PLANKTON_IMAGES_JSON_BACKEND_FILE = '/tmp/images.json'
|
|
484 |
|
|
485 |
# loading images from an existing plankton service
|
|
486 |
$ curl -H "X-Auth-Token: <MYTOKEN>" \
|
|
487 |
https://cyclades.synnefo.org/plankton/images/detail | \
|
|
488 |
python -m json.tool > /tmp/images.json
|
|
489 |
"""
|
|
490 |
def __init__(self, userid):
|
|
491 |
self.images_file = getattr(settings,
|
|
492 |
'PLANKTON_IMAGES_JSON_BACKEND_FILE', '')
|
|
493 |
if not os.path.exists(self.images_file):
|
|
494 |
raise Exception("Invalid plankgon images json backend file: %s",
|
|
495 |
self.images_file)
|
|
496 |
fp = file(self.images_file)
|
|
497 |
self.images = json.load(fp)
|
|
498 |
fp.close()
|
|
499 |
|
|
500 |
def iter(self, *args, **kwargs):
|
|
501 |
return self.images.__iter__()
|
|
502 |
|
|
503 |
def list_images(self, *args, **kwargs):
|
|
504 |
return self.images
|
|
505 |
|
|
506 |
def get_image(self, image_uuid):
|
|
507 |
try:
|
|
508 |
return filter(lambda i: i['id'] == image_uuid, self.images)[0]
|
|
509 |
except IndexError:
|
|
510 |
raise Exception("Unknown image uuid: %s" % image_uuid)
|
|
511 |
|
|
512 |
def close(self):
|
|
513 |
pass
|
|
514 |
|
|
515 |
|
|
516 |
def get_backend():
|
|
517 |
backend_module = getattr(settings, 'PLANKTON_BACKEND_MODULE', None)
|
|
518 |
if not backend_module:
|
|
519 |
# no setting set
|
|
520 |
return ImageBackend
|
|
521 |
|
|
522 |
parts = backend_module.split(".")
|
|
523 |
module = ".".join(parts[:-1])
|
|
524 |
cls = parts[-1]
|
|
525 |
try:
|
|
526 |
return getattr(importlib.import_module(module), cls)
|
|
527 |
except (ImportError, AttributeError), e:
|
|
528 |
raise ImportError("Cannot import plankton module: %s (%s)" %
|
|
529 |
(backend_module, e.message))
|