Revision d77e33d4 kamaki/cli/commands/image.py

b/kamaki/cli/commands/image.py
32 32
# or implied, of GRNET S.A.command
33 33

  
34 34
from json import load, dumps
35
from os.path import abspath
35
from os import path
36 36
from logging import getLogger
37 37

  
38 38
from kamaki.cli import command
......
43 43
from kamaki.clients.astakos import AstakosClient
44 44
from kamaki.clients import ClientError
45 45
from kamaki.cli.argument import FlagArgument, ValueArgument, KeyValueArgument
46
from kamaki.cli.argument import IntArgument
46
from kamaki.cli.argument import IntArgument, ProgressBarArgument
47 47
from kamaki.cli.commands.cyclades import _init_cyclades
48 48
from kamaki.cli.errors import raiseCLIError, CLIBaseUrlError
49 49
from kamaki.cli.commands import _command_init, errors, addLogSettings
......
142 142

  
143 143
    :raises AssertionError: Valid json but invalid image properties dict
144 144
    """
145
    with open(abspath(filepath)) as f:
145
    with open(path.abspath(filepath)) as f:
146 146
        meta_dict = load(f)
147 147
        try:
148 148
            return _validate_image_meta(meta_dict)
......
283 283
class image_register(_init_image, _optional_json):
284 284
    """(Re)Register an image"""
285 285

  
286
    container_info_cache = {}
287

  
286 288
    arguments = dict(
287 289
        checksum=ValueArgument('set image checksum', '--checksum'),
288 290
        container_format=ValueArgument(
......
308 310
        container=ValueArgument(
309 311
            'Pithos+ container containing the image file',
310 312
            ('-C', '--container')),
311
        uuid=ValueArgument('Custom user uuid', '--uuid')
313
        uuid=ValueArgument('Custom user uuid', '--uuid'),
314
        local_image_path=ValueArgument(
315
            'Local image file path to upload and register '
316
            '(still need target file in the form container:remote-path )',
317
            '--upload-image-file'),
318
        progress_bar=ProgressBarArgument(
319
            'Do not use progress bar', '--no-progress-bar', default=False)
312 320
    )
313 321

  
314 322
    def _get_user_id(self):
......
339 347

  
340 348
    def _store_remote_metafile(self, pclient, remote_path, metadata):
341 349
        return pclient.upload_from_string(
342
            remote_path, _validate_image_meta(metadata, return_str=True))
350
            remote_path, _validate_image_meta(metadata, return_str=True),
351
            container_info_cache=self.container_info_cache)
343 352

  
344 353
    def _load_params_from_file(self, location):
345 354
        params, properties = dict(), dict()
......
413 422
    @errors.generic.all
414 423
    @errors.plankton.connection
415 424
    def _run(self, name, uuid, container, img_path):
425
        if self['local_image_path']:
426
            with open(self['local_image_path']) as f:
427
                pithos = self._get_pithos_client(container)
428
                (pbar, upload_cb) = self._safe_progress_bar('Uploading')
429
                if pbar:
430
                    hash_bar = pbar.clone()
431
                    hash_cb = hash_bar.get_generator('Calculating hashes')
432
                pithos.upload_object(
433
                    img_path, f,
434
                    hash_cb=hash_cb, upload_cb=upload_cb,
435
                    container_info_cache=self.container_info_cache)
436
                pbar.finish()
437

  
416 438
        location = 'pithos://%s/%s/%s' % (uuid, container, img_path)
417 439
        (params, properties, new_loc) = self._load_params_from_file(location)
418 440
        if location != new_loc:
......
449 471
        if pclient:
450 472
            try:
451 473
                meta_headers = pclient.upload_from_string(
452
                    meta_path, dumps(r, indent=2))
474
                    meta_path, dumps(r, indent=2),
475
                    container_info_cache=self.container_info_cache)
453 476
            except TypeError:
454 477
                print('Failed to dump metafile %s:%s' % (container, meta_path))
455 478
                return

Also available in: Unified diff