Remove the unused inlineCallbacks code-paths in the caching code (#8119)

This commit is contained in:
Patrick Cloke 2020-08-19 07:09:07 -04:00 committed by GitHub
parent 76d21d14a0
commit d294f0e7e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 52 deletions

1
changelog.d/8119.misc Normal file
View File

@ -0,0 +1 @@
Convert various parts of the codebase to async/await.

View File

@ -285,16 +285,9 @@ class Cache(object):
class _CacheDescriptorBase(object): class _CacheDescriptorBase(object):
def __init__( def __init__(self, orig: _CachedFunction, num_args, cache_context=False):
self, orig: _CachedFunction, num_args, inlineCallbacks, cache_context=False
):
self.orig = orig self.orig = orig
if inlineCallbacks:
self.function_to_call = defer.inlineCallbacks(orig)
else:
self.function_to_call = orig
arg_spec = inspect.getfullargspec(orig) arg_spec = inspect.getfullargspec(orig)
all_args = arg_spec.args all_args = arg_spec.args
@ -364,7 +357,7 @@ class CacheDescriptor(_CacheDescriptorBase):
invalidated) by adding a special "cache_context" argument to the function invalidated) by adding a special "cache_context" argument to the function
and passing that as a kwarg to all caches called. For example:: and passing that as a kwarg to all caches called. For example::
@cachedInlineCallbacks(cache_context=True) @cached(cache_context=True)
def foo(self, key, cache_context): def foo(self, key, cache_context):
r1 = yield self.bar1(key, on_invalidate=cache_context.invalidate) r1 = yield self.bar1(key, on_invalidate=cache_context.invalidate)
r2 = yield self.bar2(key, on_invalidate=cache_context.invalidate) r2 = yield self.bar2(key, on_invalidate=cache_context.invalidate)
@ -382,17 +375,11 @@ class CacheDescriptor(_CacheDescriptorBase):
max_entries=1000, max_entries=1000,
num_args=None, num_args=None,
tree=False, tree=False,
inlineCallbacks=False,
cache_context=False, cache_context=False,
iterable=False, iterable=False,
): ):
super(CacheDescriptor, self).__init__( super().__init__(orig, num_args=num_args, cache_context=cache_context)
orig,
num_args=num_args,
inlineCallbacks=inlineCallbacks,
cache_context=cache_context,
)
self.max_entries = max_entries self.max_entries = max_entries
self.tree = tree self.tree = tree
@ -465,9 +452,7 @@ class CacheDescriptor(_CacheDescriptorBase):
observer = defer.succeed(cached_result_d) observer = defer.succeed(cached_result_d)
except KeyError: except KeyError:
ret = defer.maybeDeferred( ret = defer.maybeDeferred(preserve_fn(self.orig), obj, *args, **kwargs)
preserve_fn(self.function_to_call), obj, *args, **kwargs
)
def onErr(f): def onErr(f):
cache.invalidate(cache_key) cache.invalidate(cache_key)
@ -510,9 +495,7 @@ class CacheListDescriptor(_CacheDescriptorBase):
of results. of results.
""" """
def __init__( def __init__(self, orig, cached_method_name, list_name, num_args=None):
self, orig, cached_method_name, list_name, num_args=None, inlineCallbacks=False
):
""" """
Args: Args:
orig (function) orig (function)
@ -521,12 +504,8 @@ class CacheListDescriptor(_CacheDescriptorBase):
num_args (int): number of positional arguments (excluding ``self``, num_args (int): number of positional arguments (excluding ``self``,
but including list_name) to use as cache keys. Defaults to all but including list_name) to use as cache keys. Defaults to all
named args of the function. named args of the function.
inlineCallbacks (bool): Whether orig is a generator that should
be wrapped by defer.inlineCallbacks
""" """
super(CacheListDescriptor, self).__init__( super().__init__(orig, num_args=num_args)
orig, num_args=num_args, inlineCallbacks=inlineCallbacks
)
self.list_name = list_name self.list_name = list_name
@ -631,7 +610,7 @@ class CacheListDescriptor(_CacheDescriptorBase):
cached_defers.append( cached_defers.append(
defer.maybeDeferred( defer.maybeDeferred(
preserve_fn(self.function_to_call), **args_to_call preserve_fn(self.orig), **args_to_call
).addCallbacks(complete_all, errback) ).addCallbacks(complete_all, errback)
) )
@ -695,21 +674,7 @@ def cached(
) )
def cachedInlineCallbacks( def cachedList(cached_method_name, list_name, num_args=None):
max_entries=1000, num_args=None, tree=False, cache_context=False, iterable=False
):
return lambda orig: CacheDescriptor(
orig,
max_entries=max_entries,
num_args=num_args,
tree=tree,
inlineCallbacks=True,
cache_context=cache_context,
iterable=iterable,
)
def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=False):
"""Creates a descriptor that wraps a function in a `CacheListDescriptor`. """Creates a descriptor that wraps a function in a `CacheListDescriptor`.
Used to do batch lookups for an already created cache. A single argument Used to do batch lookups for an already created cache. A single argument
@ -725,8 +690,6 @@ def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=Fal
do batch lookups in the cache. do batch lookups in the cache.
num_args (int): Number of arguments to use as the key in the cache num_args (int): Number of arguments to use as the key in the cache
(including list_name). Defaults to all named parameters. (including list_name). Defaults to all named parameters.
inlineCallbacks (bool): Should the function be wrapped in an
`defer.inlineCallbacks`?
Example: Example:
@ -744,5 +707,4 @@ def cachedList(cached_method_name, list_name, num_args=None, inlineCallbacks=Fal
cached_method_name=cached_method_name, cached_method_name=cached_method_name,
list_name=list_name, list_name=list_name,
num_args=num_args, num_args=num_args,
inlineCallbacks=inlineCallbacks,
) )

View File

@ -366,11 +366,11 @@ class CachedListDescriptorTestCase(unittest.TestCase):
def fn(self, arg1, arg2): def fn(self, arg1, arg2):
pass pass
@descriptors.cachedList("fn", "args1", inlineCallbacks=True) @descriptors.cachedList("fn", "args1")
def list_fn(self, args1, arg2): async def list_fn(self, args1, arg2):
assert current_context().request == "c1" assert current_context().request == "c1"
# we want this to behave like an asynchronous function # we want this to behave like an asynchronous function
yield run_on_reactor() await run_on_reactor()
assert current_context().request == "c1" assert current_context().request == "c1"
return self.mock(args1, arg2) return self.mock(args1, arg2)
@ -416,10 +416,10 @@ class CachedListDescriptorTestCase(unittest.TestCase):
def fn(self, arg1, arg2): def fn(self, arg1, arg2):
pass pass
@descriptors.cachedList("fn", "args1", inlineCallbacks=True) @descriptors.cachedList("fn", "args1")
def list_fn(self, args1, arg2): async def list_fn(self, args1, arg2):
# we want this to behave like an asynchronous function # we want this to behave like an asynchronous function
yield run_on_reactor() await run_on_reactor()
return self.mock(args1, arg2) return self.mock(args1, arg2)
obj = Cls() obj = Cls()