allow subclasses to modify the parents model hooks
fixes bug 1210387 This change modifies the model hook processing to call the method on the instance if a hook is registered as a string. If the hook is a callable, then callable is called with the hook arguments. Change-Id: Id14ae89f3f12a500920d248226e0ecba8e35e74c
This commit is contained in:
parent
1d94f1bfee
commit
5e33f35c23
@ -100,11 +100,16 @@ class CommonDbMixin(object):
|
||||
for _name, hooks in self._model_query_hooks.get(model,
|
||||
{}).iteritems():
|
||||
query_hook = hooks.get('query')
|
||||
filter_hook = hooks.get('filter')
|
||||
if isinstance(query_hook, basestring):
|
||||
query_hook = getattr(self, query_hook, None)
|
||||
if query_hook:
|
||||
query = query_hook(self, context, model, query)
|
||||
query = query_hook(context, model, query)
|
||||
|
||||
filter_hook = hooks.get('filter')
|
||||
if isinstance(filter_hook, basestring):
|
||||
filter_hook = getattr(self, filter_hook, None)
|
||||
if filter_hook:
|
||||
query_filter = filter_hook(self, context, model, query_filter)
|
||||
query_filter = filter_hook(context, model, query_filter)
|
||||
|
||||
# NOTE(salvatore-orlando): 'if query_filter' will try to evaluate the
|
||||
# condition, raising an exception
|
||||
@ -142,8 +147,11 @@ class CommonDbMixin(object):
|
||||
for _name, hooks in self._model_query_hooks.get(model,
|
||||
{}).iteritems():
|
||||
result_filter = hooks.get('result_filters', None)
|
||||
if isinstance(result_filter, basestring):
|
||||
result_filter = getattr(self, result_filter, None)
|
||||
|
||||
if result_filter:
|
||||
query = result_filter(self, query, filters)
|
||||
query = result_filter(query, filters)
|
||||
return query
|
||||
|
||||
def _get_collection_query(self, context, model, filters=None,
|
||||
|
@ -120,9 +120,9 @@ class L3_NAT_db_mixin(l3.RouterPluginBase):
|
||||
db_base_plugin_v2.NeutronDbPluginV2.register_model_query_hook(
|
||||
models_v2.Network,
|
||||
"external_net",
|
||||
_network_model_hook,
|
||||
_network_filter_hook,
|
||||
_network_result_filter_hook)
|
||||
'_network_model_hook',
|
||||
'_network_filter_hook',
|
||||
'_network_result_filter_hook')
|
||||
|
||||
def _get_router(self, context, id):
|
||||
try:
|
||||
|
@ -61,9 +61,9 @@ class PortBindingMixin(portbindings_base.PortBindingBaseMixin):
|
||||
db_base_plugin_v2.NeutronDbPluginV2.register_model_query_hook(
|
||||
models_v2.Port,
|
||||
"portbindings_port",
|
||||
_port_model_hook,
|
||||
'_port_model_hook',
|
||||
None,
|
||||
_port_result_filter_hook)
|
||||
'_port_result_filter_hook')
|
||||
|
||||
def _process_portbindings_create_and_update(self, context, port_data,
|
||||
port):
|
||||
|
Loading…
Reference in New Issue
Block a user