Remove nova.context dependency from nova.rpc
Part of blueprint common-rpc. This patch removes the usage of nova.context from nova.rpc. Everything needed to implement RpcContext now exists within nova.rpc. Change-Id: I9e6ec0d22e55d3d4f38e12e0fdd2df745da496f5
This commit is contained in:
@@ -33,7 +33,6 @@ from eventlet import greenpool
|
|||||||
from eventlet import pools
|
from eventlet import pools
|
||||||
from eventlet import semaphore
|
from eventlet import semaphore
|
||||||
|
|
||||||
from nova import context
|
|
||||||
from nova import log as logging
|
from nova import log as logging
|
||||||
from nova.openstack.common import excutils
|
from nova.openstack.common import excutils
|
||||||
from nova.openstack.common import local
|
from nova.openstack.common import local
|
||||||
@@ -168,12 +167,12 @@ def msg_reply(conf, msg_id, connection_pool, reply=None, failure=None,
|
|||||||
conn.direct_send(msg_id, msg)
|
conn.direct_send(msg_id, msg)
|
||||||
|
|
||||||
|
|
||||||
class RpcContext(context.RequestContext):
|
class RpcContext(rpc_common.CommonRpcContext):
|
||||||
"""Context that supports replying to a rpc.call"""
|
"""Context that supports replying to a rpc.call"""
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.msg_id = kwargs.pop('msg_id', None)
|
self.msg_id = kwargs.pop('msg_id', None)
|
||||||
self.conf = kwargs.pop('conf')
|
self.conf = kwargs.pop('conf')
|
||||||
super(RpcContext, self).__init__(*args, **kwargs)
|
super(RpcContext, self).__init__(**kwargs)
|
||||||
|
|
||||||
def reply(self, reply=None, failure=None, ending=False,
|
def reply(self, reply=None, failure=None, ending=False,
|
||||||
connection_pool=None):
|
connection_pool=None):
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ from nova import log as logging
|
|||||||
from nova.openstack.common import cfg
|
from nova.openstack.common import cfg
|
||||||
from nova.openstack.common import importutils
|
from nova.openstack.common import importutils
|
||||||
from nova.openstack.common import jsonutils
|
from nova.openstack.common import jsonutils
|
||||||
|
from nova.openstack.common import local
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@@ -267,3 +268,46 @@ def deserialize_remote_exception(conf, data):
|
|||||||
# first exception argument.
|
# first exception argument.
|
||||||
failure.args = (message,) + failure.args[1:]
|
failure.args = (message,) + failure.args[1:]
|
||||||
return failure
|
return failure
|
||||||
|
|
||||||
|
|
||||||
|
class CommonRpcContext(object):
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.values = kwargs
|
||||||
|
|
||||||
|
def __getattr__(self, key):
|
||||||
|
try:
|
||||||
|
return self.values[key]
|
||||||
|
except KeyError:
|
||||||
|
raise AttributeError(key)
|
||||||
|
|
||||||
|
def to_dict(self):
|
||||||
|
return copy.deepcopy(self.values)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, values):
|
||||||
|
return cls(**values)
|
||||||
|
|
||||||
|
def update_store(self):
|
||||||
|
local.store.context = self
|
||||||
|
|
||||||
|
def elevated(self, read_deleted=None, overwrite=False):
|
||||||
|
"""Return a version of this context with admin flag set."""
|
||||||
|
# TODO(russellb) This method is a bit of a nova-ism. It makes
|
||||||
|
# some assumptions about the data in the request context sent
|
||||||
|
# across rpc, while the rest of this class does not. We could get
|
||||||
|
# rid of this if we changed the nova code that uses this to
|
||||||
|
# convert the RpcContext back to its native RequestContext doing
|
||||||
|
# something like nova.context.RequestContext.from_dict(ctxt.to_dict())
|
||||||
|
|
||||||
|
context = copy.deepcopy(self)
|
||||||
|
context.values['is_admin'] = True
|
||||||
|
|
||||||
|
context.values.setdefault('roles', [])
|
||||||
|
|
||||||
|
if 'admin' not in context.values['roles']:
|
||||||
|
context.values['roles'].append('admin')
|
||||||
|
|
||||||
|
if read_deleted is not None:
|
||||||
|
context.values['read_deleted'] = read_deleted
|
||||||
|
|
||||||
|
return context
|
||||||
|
|||||||
@@ -23,15 +23,14 @@ import time
|
|||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
|
|
||||||
from nova import context
|
|
||||||
from nova.rpc import common as rpc_common
|
from nova.rpc import common as rpc_common
|
||||||
|
|
||||||
CONSUMERS = {}
|
CONSUMERS = {}
|
||||||
|
|
||||||
|
|
||||||
class RpcContext(context.RequestContext):
|
class RpcContext(rpc_common.CommonRpcContext):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super(RpcContext, self).__init__(*args, **kwargs)
|
super(RpcContext, self).__init__(**kwargs)
|
||||||
self._response = []
|
self._response = []
|
||||||
self._done = False
|
self._done = False
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user