You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am writing a reports/calculations module and using ring to store the results of expensive calculations in redis.
I started with using classmethods and it worked as expected, I was able to access ring-specific attributes (has, key, etc) but with property I cannot seem to be able to.
Here is a simplified example:
fromdjango_redisimportget_redis_connectionredis_connection=get_redis_connection('default')
classProductCalculations:
""" Generate business intelligence from an organizations Product data. """def__init__(self, organization):
self.organization=organizationdef__ring_key__(self):
""" Required for setting a correct cache key. """returnself.organization@ring.redis(redis_connection, coder='pickle')@propertydefproducts(self) ->'QuerySet[Product]':
returnProduct.objects.filter(organization=self.organization)
@ring.redis(redis_connection, coder='pickle')@propertydefproduct_count(self) ->int:
returnself.products.count()
Upon inspecting the results, I can't seem to be able to access ring-specific attributes:
Yes, it is an expected behavior. We need Ring object to access to the ring attributes, but property returns the result of function instead of ring object.
Not very neat, but I sometimes used this kind of workaround for development:
That's what I suspected. Thanks for the proposed workaround @youknowone . Something like obtain_ring function would be really handy. Hoping to see it in the future.
@youknowone so if it's a property and I don't have access to ring methods, how do I force the recache? I do need access to .update() and, potentially, .delete(). Sometimes I know the code/logic changed and I need to recache otherwise i'd be getting stale results. But Ring just returns stored/stale results because the key exists.
I am writing a reports/calculations module and using ring to store the results of expensive calculations in redis.
I started with using classmethods and it worked as expected, I was able to access ring-specific attributes (has, key, etc) but with property I cannot seem to be able to.
Here is a simplified example:
Upon inspecting the results, I can't seem to be able to access ring-specific attributes:
Is this an expected behavior? How can I access ring-specific attributes on the cached property?
The text was updated successfully, but these errors were encountered: