summaryrefslogtreecommitdiff
path: root/examples/dogpile_caching/caching_query.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dogpile_caching/caching_query.py')
-rw-r--r--examples/dogpile_caching/caching_query.py50
1 files changed, 29 insertions, 21 deletions
diff --git a/examples/dogpile_caching/caching_query.py b/examples/dogpile_caching/caching_query.py
index 6ad2dba4d..060c14613 100644
--- a/examples/dogpile_caching/caching_query.py
+++ b/examples/dogpile_caching/caching_query.py
@@ -59,7 +59,7 @@ class CachingQuery(Query):
"""
super_ = super(CachingQuery, self)
- if hasattr(self, '_cache_region'):
+ if hasattr(self, "_cache_region"):
return self.get_value(createfunc=lambda: list(super_.__iter__()))
else:
return super_.__iter__()
@@ -78,13 +78,11 @@ class CachingQuery(Query):
"""
super_ = super(CachingQuery, self)
- if context.query is not self and hasattr(self, '_cache_region'):
+ if context.query is not self and hasattr(self, "_cache_region"):
# special logic called when the Query._execute_and_instances()
# method is called directly from the baked query
return self.get_value(
- createfunc=lambda: list(
- super_._execute_and_instances(context)
- )
+ createfunc=lambda: list(super_._execute_and_instances(context))
)
else:
return super_._execute_and_instances(context)
@@ -105,8 +103,13 @@ class CachingQuery(Query):
dogpile_region, cache_key = self._get_cache_plus_key()
dogpile_region.delete(cache_key)
- def get_value(self, merge=True, createfunc=None,
- expiration_time=None, ignore_expiration=False):
+ def get_value(
+ self,
+ merge=True,
+ createfunc=None,
+ expiration_time=None,
+ ignore_expiration=False,
+ ):
"""Return the value from the cache for this query.
Raise KeyError if no value present and no
@@ -119,19 +122,20 @@ class CachingQuery(Query):
# but is expired, return it anyway. This doesn't make sense
# with createfunc, which says, if the value is expired, generate
# a new value.
- assert not ignore_expiration or not createfunc, \
- "Can't ignore expiration and also provide createfunc"
+ assert (
+ not ignore_expiration or not createfunc
+ ), "Can't ignore expiration and also provide createfunc"
if ignore_expiration or not createfunc:
- cached_value = dogpile_region.get(cache_key,
- expiration_time=expiration_time,
- ignore_expiration=ignore_expiration)
+ cached_value = dogpile_region.get(
+ cache_key,
+ expiration_time=expiration_time,
+ ignore_expiration=ignore_expiration,
+ )
else:
cached_value = dogpile_region.get_or_create(
- cache_key,
- createfunc,
- expiration_time=expiration_time
- )
+ cache_key, createfunc, expiration_time=expiration_time
+ )
if cached_value is NO_VALUE:
raise KeyError(cache_key)
if merge:
@@ -144,11 +148,14 @@ class CachingQuery(Query):
dogpile_region, cache_key = self._get_cache_plus_key()
dogpile_region.set(cache_key, value)
+
def query_callable(regions, query_cls=CachingQuery):
def query(*arg, **kw):
return query_cls(regions, *arg, **kw)
+
return query
+
def _key_from_query(query, qualifier=None):
"""Given a Query, create a cache key.
@@ -168,9 +175,8 @@ def _key_from_query(query, qualifier=None):
# here we return the key as a long string. our "key mangler"
# set up with the region will boil it down to an md5.
- return " ".join(
- [str(compiled)] +
- [str(params[k]) for k in sorted(params)])
+ return " ".join([str(compiled)] + [str(params[k]) for k in sorted(params)])
+
class FromCache(MapperOption):
"""Specifies that a Query should load results from a cache."""
@@ -198,6 +204,7 @@ class FromCache(MapperOption):
"""Process a Query during normal loading operation."""
query._cache_region = self
+
class RelationshipCache(MapperOption):
"""Specifies that a Query as called within a "lazy load"
should load results from a cache."""
@@ -237,7 +244,9 @@ class RelationshipCache(MapperOption):
for cls in mapper.class_.__mro__:
if (cls, key) in self._relationship_options:
- relationship_option = self._relationship_options[(cls, key)]
+ relationship_option = self._relationship_options[
+ (cls, key)
+ ]
query._cache_region = relationship_option
break
@@ -264,4 +273,3 @@ class RelationshipCache(MapperOption):
"""
return None
-