From 52103dfa2ae0b4eb413a3f9c7a2c1341e95cae0b Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Tue, 26 Aug 2014 10:34:05 +1000 Subject: [PATCH] Allow passing None for username in v2.Password None must be an acceptable parameter for username in password due to tests in other libraries, however we should still raise an error if neither username or user_id is passed. Use and check a sentinel value instead of None. Change-Id: Id61cfd1423afa8f9dd964fda278f4fab40887512 Closes-Bug: #1361444 --- keystoneclient/auth/identity/v2.py | 14 +++++++++++--- keystoneclient/tests/auth/test_identity_v2.py | 4 ++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/keystoneclient/auth/identity/v2.py b/keystoneclient/auth/identity/v2.py index 174f89937..1668a825f 100644 --- a/keystoneclient/auth/identity/v2.py +++ b/keystoneclient/auth/identity/v2.py @@ -95,11 +95,14 @@ class Auth(base.BaseIdentityPlugin): """ +_NOT_PASSED = object() + + class Password(Auth): @utils.positional(4) - def __init__(self, auth_url, username=None, password=None, user_id=None, - **kwargs): + def __init__(self, auth_url, username=_NOT_PASSED, password=None, + user_id=_NOT_PASSED, **kwargs): """A plugin for authenticating with a username and password. A username or user_id must be provided. @@ -113,10 +116,15 @@ class Password(Auth): """ super(Password, self).__init__(auth_url, **kwargs) - if not (user_id or username): + if username is _NOT_PASSED and user_id is _NOT_PASSED: msg = 'You need to specify either a username or user_id' raise TypeError(msg) + if username is _NOT_PASSED: + username = None + if user_id is _NOT_PASSED: + user_id = None + self.user_id = user_id self.username = username self.password = password diff --git a/keystoneclient/tests/auth/test_identity_v2.py b/keystoneclient/tests/auth/test_identity_v2.py index 52e178bd0..d832f1403 100644 --- a/keystoneclient/tests/auth/test_identity_v2.py +++ b/keystoneclient/tests/auth/test_identity_v2.py @@ -100,6 +100,7 @@ class V2IdentityPlugin(utils.TestCase): self.stub_auth(json=self.TEST_RESPONSE_DICT) a = v2.Password(self.TEST_URL, username=self.TEST_USER, password=self.TEST_PASS) + self.assertIsNone(a.user_id) s = session.Session(a) s.get_token() @@ -114,6 +115,7 @@ class V2IdentityPlugin(utils.TestCase): self.stub_auth(json=self.TEST_RESPONSE_DICT) a = v2.Password(self.TEST_URL, user_id=self.TEST_USER, password=self.TEST_PASS) + self.assertIsNone(a.username) s = session.Session(a) s.get_token() @@ -128,6 +130,7 @@ class V2IdentityPlugin(utils.TestCase): self.stub_auth(json=self.TEST_RESPONSE_DICT) a = v2.Password(self.TEST_URL, username=self.TEST_USER, password=self.TEST_PASS, tenant_id=self.TEST_TENANT_ID) + self.assertIsNone(a.user_id) s = session.Session(a) s.get_token() @@ -141,6 +144,7 @@ class V2IdentityPlugin(utils.TestCase): self.stub_auth(json=self.TEST_RESPONSE_DICT) a = v2.Password(self.TEST_URL, user_id=self.TEST_USER, password=self.TEST_PASS, tenant_id=self.TEST_TENANT_ID) + self.assertIsNone(a.username) s = session.Session(a) s.get_token()