Pass the default_project_id when managing User.
User default_project_id for setting the default project of the User. Fixes bug 1205520 Change-Id: I176d88bb6897c36404d8915385cc791adf10c586
This commit is contained in:
@@ -14,9 +14,14 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
from keystoneclient import base
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class User(base.Resource):
|
||||
"""Represents an Identity user.
|
||||
|
||||
@@ -39,17 +44,32 @@ class UserManager(base.CrudManager):
|
||||
raise exceptions.ValidationError(msg)
|
||||
|
||||
def create(self, name, domain=None, project=None, password=None,
|
||||
email=None, description=None, enabled=True):
|
||||
email=None, description=None, enabled=True,
|
||||
default_project=None):
|
||||
"""Create a user.
|
||||
|
||||
.. warning::
|
||||
|
||||
The project argument is deprecated, use default_project instead.
|
||||
|
||||
If both default_project and project is provided, the default_project
|
||||
will be used.
|
||||
"""
|
||||
if project:
|
||||
LOG.warning("The project argument is deprecated, "
|
||||
"use default_project instead.")
|
||||
default_project_id = base.getid(default_project) or base.getid(project)
|
||||
return super(UserManager, self).create(
|
||||
name=name,
|
||||
domain_id=base.getid(domain),
|
||||
project_id=base.getid(project),
|
||||
default_project_id=default_project_id,
|
||||
password=password,
|
||||
email=email,
|
||||
description=description,
|
||||
enabled=enabled)
|
||||
|
||||
def list(self, project=None, domain=None, group=None, **kwargs):
|
||||
def list(self, project=None, domain=None, group=None, default_project=None,
|
||||
**kwargs):
|
||||
"""List users.
|
||||
|
||||
If project, domain or group are provided, then filter
|
||||
@@ -57,7 +77,18 @@ class UserManager(base.CrudManager):
|
||||
|
||||
If ``**kwargs`` are provided, then filter users with
|
||||
attributes matching ``**kwargs``.
|
||||
|
||||
.. warning::
|
||||
|
||||
The project argument is deprecated, use default_project instead.
|
||||
|
||||
If both default_project and project is provided, the default_project
|
||||
will be used.
|
||||
"""
|
||||
if project:
|
||||
LOG.warning("The project argument is deprecated, "
|
||||
"use default_project instead.")
|
||||
default_project_id = base.getid(default_project) or base.getid(project)
|
||||
if group:
|
||||
base_url = '/groups/%s' % base.getid(group)
|
||||
else:
|
||||
@@ -66,7 +97,7 @@ class UserManager(base.CrudManager):
|
||||
return super(UserManager, self).list(
|
||||
base_url=base_url,
|
||||
domain_id=base.getid(domain),
|
||||
project_id=base.getid(project),
|
||||
default_project_id=default_project_id,
|
||||
**kwargs)
|
||||
|
||||
def get(self, user):
|
||||
@@ -74,12 +105,26 @@ class UserManager(base.CrudManager):
|
||||
user_id=base.getid(user))
|
||||
|
||||
def update(self, user, name=None, domain=None, project=None, password=None,
|
||||
email=None, description=None, enabled=None):
|
||||
email=None, description=None, enabled=None,
|
||||
default_project=None):
|
||||
"""Update a user.
|
||||
|
||||
.. warning::
|
||||
|
||||
The project argument is deprecated, use default_project instead.
|
||||
|
||||
If both default_project and project is provided, the default_project
|
||||
will be used.
|
||||
"""
|
||||
if project:
|
||||
LOG.warning("The project argument is deprecated, "
|
||||
"use default_project instead.")
|
||||
default_project_id = base.getid(default_project) or base.getid(project)
|
||||
return super(UserManager, self).update(
|
||||
user_id=base.getid(user),
|
||||
name=name,
|
||||
domain_id=base.getid(domain),
|
||||
project_id=base.getid(project),
|
||||
default_project_id=default_project_id,
|
||||
password=password,
|
||||
email=email,
|
||||
description=description,
|
||||
|
@@ -39,7 +39,7 @@ class UserTests(utils.TestCase, utils.CrudTests):
|
||||
kwargs.setdefault('domain_id', uuid.uuid4().hex)
|
||||
kwargs.setdefault('enabled', True)
|
||||
kwargs.setdefault('name', uuid.uuid4().hex)
|
||||
kwargs.setdefault('project_id', uuid.uuid4().hex)
|
||||
kwargs.setdefault('default_project_id', uuid.uuid4().hex)
|
||||
return kwargs
|
||||
|
||||
def test_add_user_to_group(self):
|
||||
@@ -131,3 +131,145 @@ class UserTests(utils.TestCase, utils.CrudTests):
|
||||
self.mox.ReplayAll()
|
||||
|
||||
self.manager.remove_from_group(user=ref['id'], group=group_id)
|
||||
|
||||
def test_create_with_project(self):
|
||||
# Can create a user with the deprecated project option rather than
|
||||
# default_project_id.
|
||||
ref = self.new_ref()
|
||||
resp = utils.TestResponse({
|
||||
"status_code": 201,
|
||||
"text": self.serialize(ref),
|
||||
})
|
||||
|
||||
method = 'POST'
|
||||
req_ref = ref.copy()
|
||||
req_ref.pop('id')
|
||||
kwargs = copy.copy(self.TEST_REQUEST_BASE)
|
||||
kwargs['headers'] = self.headers[method]
|
||||
kwargs['data'] = self.serialize(req_ref)
|
||||
requests.request(
|
||||
method,
|
||||
urlparse.urljoin(
|
||||
self.TEST_URL,
|
||||
'v3/%s' % self.collection_key),
|
||||
**kwargs).AndReturn((resp))
|
||||
self.mox.ReplayAll()
|
||||
|
||||
param_ref = req_ref.copy()
|
||||
# Use deprecated project_id rather than new default_project_id.
|
||||
param_ref['project_id'] = param_ref.pop('default_project_id')
|
||||
params = utils.parameterize(param_ref)
|
||||
|
||||
returned = self.manager.create(**params)
|
||||
self.assertTrue(isinstance(returned, self.model))
|
||||
for attr in ref:
|
||||
self.assertEqual(
|
||||
getattr(returned, attr),
|
||||
ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
|
||||
def test_create_with_project_and_default_project(self):
|
||||
# Can create a user with the deprecated project and default_project_id.
|
||||
# The backend call should only pass the default_project_id.
|
||||
ref = self.new_ref()
|
||||
resp = utils.TestResponse({
|
||||
"status_code": 201,
|
||||
"text": self.serialize(ref),
|
||||
})
|
||||
|
||||
method = 'POST'
|
||||
req_ref = ref.copy()
|
||||
req_ref.pop('id')
|
||||
kwargs = copy.copy(self.TEST_REQUEST_BASE)
|
||||
kwargs['headers'] = self.headers[method]
|
||||
kwargs['data'] = self.serialize(req_ref)
|
||||
requests.request(
|
||||
method,
|
||||
urlparse.urljoin(
|
||||
self.TEST_URL,
|
||||
'v3/%s' % self.collection_key),
|
||||
**kwargs).AndReturn((resp))
|
||||
self.mox.ReplayAll()
|
||||
|
||||
param_ref = req_ref.copy()
|
||||
# Add the deprecated project_id in the call, the value will be ignored.
|
||||
param_ref['project_id'] = 'project'
|
||||
params = utils.parameterize(param_ref)
|
||||
|
||||
returned = self.manager.create(**params)
|
||||
self.assertTrue(isinstance(returned, self.model))
|
||||
for attr in ref:
|
||||
self.assertEqual(
|
||||
getattr(returned, attr),
|
||||
ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
|
||||
def test_update_with_project(self):
|
||||
# Can update a user with the deprecated project option rather than
|
||||
# default_project_id.
|
||||
ref = self.new_ref()
|
||||
req_ref = ref.copy()
|
||||
del req_ref['id']
|
||||
resp = utils.TestResponse({
|
||||
"status_code": 200,
|
||||
"text": self.serialize(ref),
|
||||
})
|
||||
|
||||
method = 'PATCH'
|
||||
kwargs = copy.copy(self.TEST_REQUEST_BASE)
|
||||
kwargs['headers'] = self.headers[method]
|
||||
kwargs['data'] = self.serialize(req_ref)
|
||||
requests.request(
|
||||
method,
|
||||
urlparse.urljoin(
|
||||
self.TEST_URL,
|
||||
'v3/%s/%s' % (self.collection_key, ref['id'])),
|
||||
**kwargs).AndReturn((resp))
|
||||
self.mox.ReplayAll()
|
||||
|
||||
param_ref = req_ref.copy()
|
||||
# Use deprecated project_id rather than new default_project_id.
|
||||
param_ref['project_id'] = param_ref.pop('default_project_id')
|
||||
params = utils.parameterize(param_ref)
|
||||
|
||||
returned = self.manager.update(ref['id'], **params)
|
||||
self.assertTrue(isinstance(returned, self.model))
|
||||
for attr in ref:
|
||||
self.assertEqual(
|
||||
getattr(returned, attr),
|
||||
ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
|
||||
def test_update_with_project_and_default_project(self, ref=None):
|
||||
ref = self.new_ref()
|
||||
req_ref = ref.copy()
|
||||
del req_ref['id']
|
||||
resp = utils.TestResponse({
|
||||
"status_code": 200,
|
||||
"text": self.serialize(ref),
|
||||
})
|
||||
|
||||
method = 'PATCH'
|
||||
kwargs = copy.copy(self.TEST_REQUEST_BASE)
|
||||
kwargs['headers'] = self.headers[method]
|
||||
kwargs['data'] = self.serialize(req_ref)
|
||||
requests.request(
|
||||
method,
|
||||
urlparse.urljoin(
|
||||
self.TEST_URL,
|
||||
'v3/%s/%s' % (self.collection_key, ref['id'])),
|
||||
**kwargs).AndReturn((resp))
|
||||
self.mox.ReplayAll()
|
||||
|
||||
param_ref = req_ref.copy()
|
||||
# Add the deprecated project_id in the call, the value will be ignored.
|
||||
param_ref['project_id'] = 'project'
|
||||
params = utils.parameterize(param_ref)
|
||||
|
||||
returned = self.manager.update(ref['id'], **params)
|
||||
self.assertTrue(isinstance(returned, self.model))
|
||||
for attr in ref:
|
||||
self.assertEqual(
|
||||
getattr(returned, attr),
|
||||
ref[attr],
|
||||
'Expected different %s' % attr)
|
||||
|
Reference in New Issue
Block a user