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()