Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add profile_name option to sessions #69

Closed
wants to merge 1 commit into from
Closed

Commits on Feb 26, 2015

  1. Add profile_name option to sessions

    This change makes it possible to create a session using a profile name, which
    was previously only possible via an environment variable. It allows you to
    create clients and resources from any number of sessions using any number of
    profiles.
    
    Given that we have the following `~/.aws/credentials`:
    
    ```ini
    [default]
    aws_access_key_id = DEFAULT
    aws_secret_access_key = SECRET1
    
    [dev]
    aws_access_key_id = DEV
    aws_secret_access_key = SECRET2
    
    [prod]
    aws_access_key_id = PROD
    aws_secret_access_key = SECRET3
    ```
    
    You can do the following:
    
    ```python
    import boto3.session
    
    dev = boto3.session.Session(profile_name='dev')
    prod = boto3.session.Session(profile_name='prod')
    
    s3dev = dev.resource('s3')
    s3prod = prod.resource('s3')
    
    for resource in [s3dev, s3prod]:
        print('Profile: ' + resource.profile)
        for bucket in resource.buckets.all():
            print(bucket.name)
        print('')
    ```
    
    It is also possible to setup the default session with a profile:
    
    ```python
    import boto3
    
    boto3.setup_default_session(profile_name='dev')
    
    s3 = boto3.resource('s3')
    ```
    
    And of course you can still use the environment variable:
    
    ```bash
    $ BOTO_DEFAULT_PROFILE=dev ipython
    >>> import boto3
    >>> s3dev = boto3.resource('s3')
    ```
    
    Once a session is created, the profile is immutable. The `profile_name`
    property is provided for convenience and just surfaces the underlying
    Botocore session's profile property.
    
    Why not provide a profile name to the `client` and `resource` methods?
    Currently there is no easy way to clone a session, and the behavior of
    creating a new blank session (from one which may have customizations)
    leads to possibly unintended side-effects like clients without the
    proper event handlers registered. This would be an additive change
    should we want to revisit in the future. At this point, the change
    in this commit provides a way for Boto 3 users to use multiple profiles
    without resorting to creating their own Botocore sessions.
    
    I'm definitely open to suggestions and counter-arguments.
    danielgtaylor committed Feb 26, 2015
    Configuration menu
    Copy the full SHA
    2a10ea6 View commit details
    Browse the repository at this point in the history