use make_weak_ref and resolve_ref from neutron-lib

The make_weak_ref and resolve_ref functions were rehomed into
neutron-lib with https://review.openstack.org/#/c/557809/
This patch consumes them by removing the functions and using lib's
version of them instead.

NeutronLibImpact

Change-Id: I41169ed0d93ea8caee530dcfc01a91271f02d538
This commit is contained in:
Boden R 2018-06-01 11:53:57 -06:00
parent 32b6846ae6
commit ce8b73ba87
3 changed files with 12 additions and 32 deletions

View File

@ -29,7 +29,6 @@ import sys
import threading
import time
import uuid
import weakref
import eventlet
from eventlet.green import subprocess
@ -777,27 +776,6 @@ def get_related_rand_device_names(prefixes):
max_length=n_const.DEVICE_NAME_MAX_LEN)
try:
# PY3
weak_method = weakref.WeakMethod
except AttributeError:
# PY2
import weakrefmethod
weak_method = weakrefmethod.WeakMethod
def make_weak_ref(f):
"""Make a weak reference to a function accounting for bound methods."""
return weak_method(f) if hasattr(f, '__self__') else weakref.ref(f)
def resolve_ref(ref):
"""Handles dereference of weakref."""
if isinstance(ref, weakref.ref):
ref = ref()
return ref
def bytes_to_bits(value):
return value * 8

View File

@ -18,11 +18,11 @@ NOTE: This module shall not be used by external projects. It will be moved
from neutron_lib.api import attributes
from neutron_lib.db import utils as db_utils
from neutron_lib.utils import helpers
from oslo_db.sqlalchemy import utils as sa_utils
from sqlalchemy import sql, or_, and_
from sqlalchemy.ext import associationproxy
from neutron.common import utils
from neutron.db import _utils as ndb_utils
from neutron.objects import utils as obj_utils
@ -108,11 +108,11 @@ def register_hook(model, name, query_hook, filter_hook,
"""
if callable(query_hook):
query_hook = utils.make_weak_ref(query_hook)
query_hook = helpers.make_weak_ref(query_hook)
if callable(filter_hook):
filter_hook = utils.make_weak_ref(filter_hook)
filter_hook = helpers.make_weak_ref(filter_hook)
if callable(result_filters):
result_filters = utils.make_weak_ref(result_filters)
result_filters = helpers.make_weak_ref(result_filters)
_model_query_hooks.setdefault(model, {})[name] = {
'query': query_hook,
'filter': filter_hook,
@ -153,11 +153,11 @@ def query_with_hooks(context, model):
query_filter = (model.tenant_id == context.tenant_id)
# Execute query hooks registered from mixins and plugins
for hook in get_hooks(model):
query_hook = utils.resolve_ref(hook.get('query'))
query_hook = helpers.resolve_ref(hook.get('query'))
if query_hook:
query = query_hook(context, model, query)
filter_hook = utils.resolve_ref(hook.get('filter'))
filter_hook = helpers.resolve_ref(hook.get('filter'))
if filter_hook:
query_filter = filter_hook(context, model, query_filter)
@ -245,7 +245,8 @@ def apply_filters(query, model, filters, context=None):
query = query.outerjoin(model.rbac_entries)
query = query.filter(is_shared)
for hook in get_hooks(model):
result_filter = utils.resolve_ref(hook.get('result_filters', None))
result_filter = helpers.resolve_ref(
hook.get('result_filters', None))
if result_filter:
query = result_filter(query, filters)
return query

View File

@ -18,7 +18,8 @@ NOTE: This module shall not be used by external projects. It will be moved
import collections
import inspect
from neutron.common import utils
from neutron_lib.utils import helpers
# This dictionary will store methods for extending API resources.
# Extensions can add their own methods by invoking register_funcs().
@ -50,7 +51,7 @@ def register_funcs(resource, funcs):
return foo_res
"""
funcs = [utils.make_weak_ref(f) if callable(f) else f
funcs = [helpers.make_weak_ref(f) if callable(f) else f
for f in funcs]
_resource_extend_functions.setdefault(resource, []).extend(funcs)
@ -70,7 +71,7 @@ def get_funcs(resource):
def apply_funcs(resource_type, response, db_object):
for func in get_funcs(resource_type):
resolved_func = utils.resolve_ref(func)
resolved_func = helpers.resolve_ref(func)
if resolved_func:
resolved_func(response, db_object)