Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
Fix logic to raise error when nonexistant profile was passed
Browse files Browse the repository at this point in the history
  • Loading branch information
danielgtaylor committed May 28, 2014
1 parent 0654fc5 commit af80944
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 17 deletions.
42 changes: 28 additions & 14 deletions boto/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@
STORAGE_RESPONSE_ERROR = 'StorageResponseError'


class ProfileNotFoundError(ValueError): pass


class Provider(object):

CredentialMap = {
Expand Down Expand Up @@ -271,16 +274,23 @@ def get_credentials(self, access_key=None, secret_key=None,
elif access_key_name.upper() in os.environ:
self.access_key = os.environ[access_key_name.upper()]
boto.log.debug("Using access key found in environment variable.")
elif shared.has_option(profile_name, access_key_name):
self.access_key = shared.get(profile_name, access_key_name)
boto.log.debug("Using access key found in shared credential "
"file for profile %s." % profile_name)
elif profile_name is not None:
if shared.has_option(profile_name, access_key_name):
self.access_key = shared.get(profile_name, access_key_name)
boto.log.debug("Using access key found in shared credential "
"file for profile %s." % profile_name)
elif config.has_option("profile %s" % profile_name,
access_key_name):
self.access_key = config.get("profile %s" % profile_name,
access_key_name)
boto.log.debug("Using access key found in config file: "
"profile %s." % profile_name)
else:
raise ProfileNotFoundError('Profile "%s" not found!' %
profile_name)
elif shared.has_option('default', access_key_name):
self.access_key = shared.get('default', access_key_name)
boto.log.debug("Using access key found in shared credential file.")
elif config.has_option("profile %s" % profile_name, access_key_name):
self.access_key = config.get("profile %s" % profile_name, access_key_name)
boto.log.debug("Using access key found in config file: profile %s." % profile_name)
elif config.has_option('Credentials', access_key_name):
self.access_key = config.get('Credentials', access_key_name)
boto.log.debug("Using access key found in config file.")
Expand All @@ -291,16 +301,20 @@ def get_credentials(self, access_key=None, secret_key=None,
elif secret_key_name.upper() in os.environ:
self.secret_key = os.environ[secret_key_name.upper()]
boto.log.debug("Using secret key found in environment variable.")
elif shared.has_option(profile_name, secret_key_name):
self.secret_key = shared.get(profile_name, secret_key_name)
boto.log.debug("Using secret key found in shared credential "
"file for profile %s." % profile_name)
elif profile_name is not None:
if shared.has_option(profile_name, secret_key_name):
self.secret_key = shared.get(profile_name, secret_key_name)
boto.log.debug("Using secret key found in shared credential "
"file for profile %s." % profile_name)
elif config.has_option("profile %s" % profile_name, secret_key_name):
self.secret_key = config.get("profile %s" % profile_name, secret_key_name)
boto.log.debug("Using secret key found in config file: profile %s." % profile_name)
else:
raise ProfileNotFoundError('Profile "%s" not found!' %
profile_name)
elif shared.has_option('default', secret_key_name):
self.secret_key = shared.get('default', secret_key_name)
boto.log.debug("Using secret key found in shared credential file.")
elif config.has_option("profile %s" % profile_name, secret_key_name):
self.secret_key = config.get("profile %s" % profile_name, secret_key_name)
boto.log.debug("Using secret key found in config file: profile %s." % profile_name)
elif config.has_option('Credentials', secret_key_name):
self.secret_key = config.get('Credentials', secret_key_name)
boto.log.debug("Using secret key found in config file.")
Expand Down
20 changes: 17 additions & 3 deletions tests/unit/provider/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,23 @@ def test_config_profile_values_are_used(self):
q = provider.Provider('aws', profile_name='dev')
self.assertEqual(q.access_key, 'dev_access_key')
self.assertEqual(q.secret_key, 'dev_secret_key')
r = provider.Provider('aws', profile_name='doesntexist')
self.assertEqual(r.access_key, 'default_access_key')
self.assertEqual(r.secret_key, 'default_secret_key')

def test_config_missing_profile(self):
# None of these default profiles should be loaded!
self.shared_config = {
'default': {
'aws_access_key_id': 'shared_access_key',
'aws_secret_access_key': 'shared_secret_key',
}
}
self.config = {
'Credentials': {
'aws_access_key_id': 'default_access_key',
'aws_secret_access_key': 'default_secret_key'
}
}
with self.assertRaises(provider.ProfileNotFoundError):
provider.Provider('aws', profile_name='doesntexist')

def test_config_values_are_used(self):
self.config = {
Expand Down

0 comments on commit af80944

Please sign in to comment.