dogpile.cache icon indicating copy to clipboard operation
dogpile.cache copied to clipboard

Issue with decorate>=5.0.5 in dogpile.cache.region

Open osfrickler opened this issue 4 years ago • 3 comments

The latest releases of decorate changed the handling of positional args in some cases, see https://github.com/micheles/decorator/commit/04bb6454ac4f7560759ec1a3e15756a5485067ac. This is triggering failures in some consumers, e.g. openstacksdk, see https://storyboard.openstack.org/#!/story/2009114 and https://github.com/micheles/decorator/issues/127. What works for me in local unit testing is adding the kwsyntax=True option like

diff --git a/dogpile/cache/region.py b/dogpile/cache/region.py
index ef0dbc4..561e208 100644
--- a/dogpile/cache/region.py
+++ b/dogpile/cache/region.py
@@ -1619,7 +1619,7 @@ class CacheRegion:
             # Use `decorate` to preserve the signature of :param:`user_func`.
 
             return decorate(
-                user_func, partial(get_or_create_for_user_func, key_generator)
+                user_func, partial(get_or_create_for_user_func, key_generator), kwsyntax=True
             )
 
         return cache_decorator
@@ -1859,7 +1859,7 @@ class CacheRegion:
             # Use `decorate` to preserve the signature of :param:`user_func`.
 
             return decorate(
-                user_func, partial(get_or_create_for_user_func, key_generator)
+                user_func, partial(get_or_create_for_user_func, key_generator), kwsyntax=True
             )
 
         return cache_decorator

But maybe there is also a way to adopt to the new behaviour more smoothly. The above patch will break when using an old version of decorate and I don't know whether there's a better solution then wrapping in a try block and repeating the call without the added option if necessary.

osfrickler avatar Aug 14 '21 06:08 osfrickler

Hmm, the above patch is breaking tests/cache/test_region.py::AsyncCreatorTest::test_fn_decorator_with_kw, so I would also not exclude the possibility that it's actually the code in openstacksdk that's broken.

osfrickler avatar Aug 14 '21 06:08 osfrickler

cc @4383

zzzeek avatar Aug 14 '21 15:08 zzzeek

any help would be appreciated.

zzzeek avatar Aug 14 '21 15:08 zzzeek