Use context.from_dict to determine available arguments
RequestContext.__init__ takes and ignores arbitrary keyword arguments. This leads to mistakes such as those changed in tests and will prevent cinder from passing those keyword arguments to the base oslo_context class. The ignored arguments are generally made up of things that oslo_context added to the to_dict that cinder doesn't handle. Instead of accepting and ignoring those arguments make from_dict smart enough to construct the correct arguments to the class. Related-Bug: #1602081 Change-Id: Iaf37e38ddc368a6f504bab17163d7f0ba21f5029
This commit is contained in:
parent
a76f4a1b94
commit
842d95bb68
@ -53,8 +53,7 @@ class RequestContext(context.RequestContext):
|
|||||||
roles=None, project_name=None, remote_address=None,
|
roles=None, project_name=None, remote_address=None,
|
||||||
timestamp=None, request_id=None, auth_token=None,
|
timestamp=None, request_id=None, auth_token=None,
|
||||||
overwrite=True, quota_class=None, service_catalog=None,
|
overwrite=True, quota_class=None, service_catalog=None,
|
||||||
domain=None, user_domain=None, project_domain=None,
|
domain=None, user_domain=None, project_domain=None):
|
||||||
**kwargs):
|
|
||||||
"""Initialize RequestContext.
|
"""Initialize RequestContext.
|
||||||
|
|
||||||
:param read_deleted: 'no' indicates deleted records are hidden, 'yes'
|
:param read_deleted: 'no' indicates deleted records are hidden, 'yes'
|
||||||
@ -63,9 +62,6 @@ class RequestContext(context.RequestContext):
|
|||||||
|
|
||||||
:param overwrite: Set to False to ensure that the greenthread local
|
:param overwrite: Set to False to ensure that the greenthread local
|
||||||
copy of the index is not overwritten.
|
copy of the index is not overwritten.
|
||||||
|
|
||||||
:param kwargs: Extra arguments that might be present, but we ignore
|
|
||||||
because they possibly came in from older rpc messages.
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
super(RequestContext, self).__init__(auth_token=auth_token,
|
super(RequestContext, self).__init__(auth_token=auth_token,
|
||||||
@ -137,7 +133,21 @@ class RequestContext(context.RequestContext):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls, values):
|
def from_dict(cls, values):
|
||||||
return cls(**values)
|
return cls(user_id=values.get('user_id'),
|
||||||
|
project_id=values.get('project_id'),
|
||||||
|
project_name=values.get('project_name'),
|
||||||
|
domain=values.get('domain'),
|
||||||
|
read_deleted=values.get('read_deleted'),
|
||||||
|
remote_address=values.get('remote_address'),
|
||||||
|
timestamp=values.get('timestamp'),
|
||||||
|
quota_class=values.get('quota_class'),
|
||||||
|
service_catalog=values.get('service_catalog'),
|
||||||
|
request_id=values.get('request_id'),
|
||||||
|
is_admin=values.get('is_admin'),
|
||||||
|
roles=values.get('roles'),
|
||||||
|
auth_token=values.get('auth_token'),
|
||||||
|
user_domain=values.get('user_domain'),
|
||||||
|
project_domain=values.get('project_domain'))
|
||||||
|
|
||||||
def elevated(self, read_deleted=None, overwrite=False):
|
def elevated(self, read_deleted=None, overwrite=False):
|
||||||
"""Return a version of this context with admin flag set."""
|
"""Return a version of this context with admin flag set."""
|
||||||
|
@ -40,7 +40,7 @@ class VolumeTransferAPITestCase(test.TestCase):
|
|||||||
self.volume_transfer_api = cinder.transfer.API()
|
self.volume_transfer_api = cinder.transfer.API()
|
||||||
self.controller = volume_transfer.VolumeTransferController()
|
self.controller = volume_transfer.VolumeTransferController()
|
||||||
self.user_ctxt = context.RequestContext(
|
self.user_ctxt = context.RequestContext(
|
||||||
fake.USER_ID, fake.PROJECT_ID, auth_token=True, admin=True)
|
fake.USER_ID, fake.PROJECT_ID, auth_token=True, is_admin=True)
|
||||||
|
|
||||||
def _create_transfer(self, volume_id=fake.VOLUME_ID,
|
def _create_transfer(self, volume_id=fake.VOLUME_ID,
|
||||||
display_name='test_transfer'):
|
display_name='test_transfer'):
|
||||||
|
@ -58,7 +58,7 @@ class ContextTestCase(test.TestCase):
|
|||||||
|
|
||||||
def test_request_context_elevated(self):
|
def test_request_context_elevated(self):
|
||||||
user_context = context.RequestContext(
|
user_context = context.RequestContext(
|
||||||
'fake_user', 'fake_project', admin=False)
|
'fake_user', 'fake_project', is_admin=False)
|
||||||
self.assertFalse(user_context.is_admin)
|
self.assertFalse(user_context.is_admin)
|
||||||
admin_context = user_context.elevated()
|
admin_context = user_context.elevated()
|
||||||
self.assertFalse(user_context.is_admin)
|
self.assertFalse(user_context.is_admin)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user