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,
|
||||
timestamp=None, request_id=None, auth_token=None,
|
||||
overwrite=True, quota_class=None, service_catalog=None,
|
||||
domain=None, user_domain=None, project_domain=None,
|
||||
**kwargs):
|
||||
domain=None, user_domain=None, project_domain=None):
|
||||
"""Initialize RequestContext.
|
||||
|
||||
: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
|
||||
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,
|
||||
@ -137,7 +133,21 @@ class RequestContext(context.RequestContext):
|
||||
|
||||
@classmethod
|
||||
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):
|
||||
"""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.controller = volume_transfer.VolumeTransferController()
|
||||
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,
|
||||
display_name='test_transfer'):
|
||||
|
@ -58,7 +58,7 @@ class ContextTestCase(test.TestCase):
|
||||
|
||||
def test_request_context_elevated(self):
|
||||
user_context = context.RequestContext(
|
||||
'fake_user', 'fake_project', admin=False)
|
||||
'fake_user', 'fake_project', is_admin=False)
|
||||
self.assertFalse(user_context.is_admin)
|
||||
admin_context = user_context.elevated()
|
||||
self.assertFalse(user_context.is_admin)
|
||||
|
Loading…
x
Reference in New Issue
Block a user