def _storage_delete(args, _): """ Delete one or more buckets or objects. """ items = _expand_list(args['bucket']) items.extend(_expand_list(args['object'])) errs = [] for item in items: try: bucket, key = gcp.storage._bucket.parse_name(item) if bucket and key: gcs_item = gcp.storage.Item(bucket, key) if gcs_item.exists(): gcp.storage.Item(bucket, key).delete() else: errs.append("%s does not exist" % item) elif bucket: gcs_bucket = gcp.storage.Bucket(bucket) if gcs_bucket.exists(): gcs_bucket.delete() else: errs.append("%s does not exist" % item) else: raise Exception("Can't delete item with invalid name %s" % item) except Exception as e: errs.append("Couldn't delete %s: %s" % (item, _utils.extract_storage_api_response_error(e.message))) if errs: raise Exception('\n'.join(errs))
def _storage_copy(args, _): target = args['destination'] target_bucket, target_key = gcp.storage._bucket.parse_name(target) if target_bucket is None and target_key is None: raise Exception('Invalid copy target name %s' % target) sources = _expand_list(args['source']) if len(sources) > 1: # Multiple sources; target must be a bucket if target_bucket is None or target_key is not None: raise Exception('More than one source but target %s is not a bucket' % target) errs = [] for source in sources: source_bucket, source_key = gcp.storage._bucket.parse_name(source) if source_bucket is None or source_key is None: raise Exception('Invalid source object name %s' % source) destination_bucket = target_bucket if target_bucket else source_bucket destination_key = target_key if target_key else source_key try: gcp.storage.Item(source_bucket, source_key).copy_to(destination_key, bucket=destination_bucket) except Exception as e: errs.append("Couldn't copy %s to %s: %s" % (source, target, _utils.extract_storage_api_response_error(e.message))) if errs: raise Exception('\n'.join(errs))
def _storage_create(args, _): """ Create one or more buckets. """ buckets = gcp.storage.Buckets(project_id=args['project']) errs = [] for name in args['bucket']: try: bucket, key = gcp.storage._bucket.parse_name(name) if bucket and not key: buckets.create(bucket) else: raise Exception("Invalid bucket name %s" % name) except Exception as e: errs.append("Couldn't create %s: %s" % (name, _utils.extract_storage_api_response_error(e.message))) if errs: raise Exception('\n'.join(errs))