text: # Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file
  # except in compliance with the License. A copy of the License is located at
  #
  #     http://aws.amazon.com/apache2.0/
  #
  # or in the "license" file accompanying this file. This file is distributed on an "AS IS"
  # BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  # License for the specific language governing permissions and limitations under the License.
  """
  A BitBucket Builds template for deploying an application revision to AWS CodeDeploy
  narshiva@amazon.com
  v1.0.0
  """
  from __future__ import print_function
  import os
  import sys
  import argparse
  import boto3
  from botocore.exceptions import ClientError
  
  def upload_to_s3(bucket_location, artefact, bucket_key):
      """
      Uploads an artefact to Amazon S3
      """
      bucket_path = os.path.normpath(bucket_location)
      paths = bucket_path.split(os.sep)
  
      bucket = paths[0]
      if len(paths) > 1:
        paths.pop(0)
        paths.append(bucket_key)
        bucket_key = os.sep.join(paths)
  
      try:
          client = boto3.client('s3')
      except ClientError as err:
          print("Failed to create boto3 client.\n" + str(err))
          return False
      try:
          client.put_object(
              Body=open(artefact, 'rb') if artefact != 'is_folder' else '',
              Bucket=bucket,
              Key=bucket_key
          )
      except ClientError as err:
          print("Failed to upload artefact to S3.\n" + str(err))
          return False
      except IOError as err:
          print("Failed to access artefact in this directory.\n" + str(err))
          return False
      return True
  
  
  def main():
  
      parser = argparse.ArgumentParser()
      parser.add_argument("bucket", help="Name of the existing S3 bucket location")
      parser.add_argument("artefact", help="Name of the artefact to be uploaded to S3")
      parser.add_argument("bucket_key", help="Name of the S3 Bucket key")
      args = parser.parse_args()
  
      if not upload_to_s3(args.bucket, args.artefact, args.bucket_key):
          sys.exit(1)
  
  if __name__ == "__main__":
      main()
  