Skip to content

data.sync.aws

Data - Sync - AWS¤

aws_cli(*cmd) ¤

aws_cli invokes the aws cli processes in python to execute awscli commands.

.. warning:: This is not the most elegant way of using awscli. However, it has been a convinient function in data science projects.

Parameters:

Name Type Description Default
*cmd

tuple of awscli command. .. admonition:: Examples :class: info AWS credential env variables should be configured before calling this function. The awscli command should be wrapped as a tuple. To download data from S3 to a local path, use >>> aws_cli(('s3', 'sync', 's3://s2-fpd/augmentation/', '/tmp/test')) Similarly, upload is done in the following way >>> # local_path = '' >>> # remote_path = '' >>> _aws_cli(('s3', 'sync', local_path, remote_path)) .. admonition:: References :class: info This function is adapted from https://github.com/boto/boto3/issues/358#issuecomment-372086466

()
Source code in dietbox/data/sync/aws.py
def aws_cli(*cmd):
    """
    aws_cli invokes the aws cli processes in python to execute awscli commands.

    .. warning::
        This is not the most elegant way of using awscli.
        However, it has been a convinient function in data science projects.

    :param *cmd: tuple of awscli command.

    .. admonition:: Examples
       :class: info
       AWS credential env variables should be configured before calling this function.
       The awscli command should be wrapped as a tuple. To download data from S3 to a local path, use
       >>> aws_cli(('s3', 'sync', 's3://s2-fpd/augmentation/', '/tmp/test'))
       Similarly, upload is done in the following way
       >>> # local_path = ''
       >>> # remote_path = ''
       >>> _aws_cli(('s3', 'sync', local_path, remote_path))

    .. admonition:: References
       :class: info
       This function is adapted from https://github.com/boto/boto3/issues/358#issuecomment-372086466
    """
    old_env = dict(os.environ)
    try:
        # Set up environment
        env = os.environ.copy()
        env["LC_CTYPE"] = "en_US.UTF"
        os.environ.update(env)

        # Run awscli in the same process
        exit_code = create_clidriver().main(*cmd)

        # Deal with problems
        if exit_code > 0:
            raise RuntimeError(f"AWS CLI exited with code {exit_code}")
    finally:
        os.environ.clear()
        os.environ.update(old_env)