# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

PYTHON_VERSION_COMPATIBILITY = 'PY3'

DEPS = [
  'gsutil',
  'recipe_engine/path',
]


def RunSteps(api):
  """Move things around in a loop!"""
  local_file = api.path['tmp_base'].join('boom')
  bucket = 'example'
  cloud_file = 'some/random/path/to/boom'

  api.gsutil.upload(local_file, bucket, cloud_file,
      metadata={
        'Test-Field': 'value',
        'Remove-Me': None,
        'x-custom-field': 'custom-value',
        'Cache-Control': 'no-cache',
      },
      unauthenticated_url=True)

  # Upload without retry wrapper.
  api.gsutil.upload(local_file, bucket, cloud_file,
      metadata={
        'Test-Field': 'value',
        'Remove-Me': None,
        'x-custom-field': 'custom-value',
        'Cache-Control': 'no-cache',
      },
      unauthenticated_url=True,
      parallel_upload=True,
      multithreaded=True,
      use_retry_wrapper=False)

  # Upload directory contents.
  api.gsutil.upload(
      api.path['tmp_base'],
      bucket,
      'some/random/path',
      args=['-r'],
      name='upload -r')
  api.gsutil.upload(
      api.path['tmp_base'],
      bucket,
      'some/other/random/path',
      args=['--recursive'],
      name='upload --recursive')

  api.gsutil(['cp',
                    'gs://%s/some/random/path/**' % bucket,
                    'gs://%s/staging' % bucket])

  api.gsutil(['cp',
                    'gs://%s/some/random/path/**' % bucket,
                    'gs://%s/staging' % bucket], version='3.25')

  api.gsutil.download_url(
      'https://storage.cloud.google.com/' + bucket + '/' + cloud_file,
      local_file,
      name='gsutil download url')

  # Non-normalized URL.
  try:
    api.gsutil.download_url(
        'https://someotherservice.localhost',
        local_file,
        name='gsutil download url')
  except AssertionError:
    pass

  new_cloud_file = 'staging/to/boom'
  new_local_file = api.path['tmp_base'].join('erang')
  api.gsutil.download(bucket, new_cloud_file, new_local_file)

  private_key_file = 'path/to/key'
  _signed_url = api.gsutil.signurl(private_key_file, bucket, cloud_file,
                                  name='signed url')
  api.gsutil.remove_url('gs://%s/%s' % (bucket, new_cloud_file))

  api.gsutil.list('gs://%s/foo' % bucket)
  api.gsutil.copy(bucket, cloud_file, bucket, new_cloud_file)

  api.gsutil.cat('gs://%s/foo' % bucket)

  api.gsutil.stat('gs://%s/foo' % bucket)

  # Run in dry-run mode.
  api.gsutil.cat('gs://%s/foo' % bucket,
                 name='read remote file',
                 multithreaded=True,
                 dry_run=True)


def GenTests(api):
  yield api.test('basic')
