Issue with decorate>=5.0.5 in dogpile.cache.region
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.
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.
cc @4383
any help would be appreciated.