Merge branch 'main' into suggestions-redis

This commit is contained in:
Mouse Reeve
2021-04-26 10:40:19 -07:00
278 changed files with 9210 additions and 5868 deletions

View File

@ -10,16 +10,16 @@ r = redis.Redis(
class RedisStore(ABC):
""" sets of ranked, related objects, like statuses for a user's feed """
"""sets of ranked, related objects, like statuses for a user's feed"""
max_length = settings.MAX_STREAM_LENGTH
def get_value(self, obj):
""" the object and rank """
"""the object and rank"""
return {obj.id: self.get_rank(obj)}
def add_object_to_related_stores(self, obj, execute=True):
""" add an object to all suitable stores """
"""add an object to all suitable stores"""
value = self.get_value(obj)
# we want to do this as a bulk operation, hence "pipeline"
pipeline = r.pipeline()
@ -34,14 +34,14 @@ class RedisStore(ABC):
return pipeline.execute()
def remove_object_from_related_stores(self, obj):
""" remove an object from all stores """
"""remove an object from all stores"""
pipeline = r.pipeline()
for store in self.get_stores_for_object(obj):
pipeline.zrem(store, -1, obj.id)
pipeline.execute()
def bulk_add_objects_to_store(self, objs, store):
""" add a list of objects to a given store """
"""add a list of objects to a given store"""
pipeline = r.pipeline()
for obj in objs[: self.max_length]:
pipeline.zadd(store, self.get_value(obj))
@ -50,18 +50,18 @@ class RedisStore(ABC):
pipeline.execute()
def bulk_remove_objects_from_store(self, objs, store):
""" remoev a list of objects from a given store """
"""remoev a list of objects from a given store"""
pipeline = r.pipeline()
for obj in objs[: self.max_length]:
pipeline.zrem(store, -1, obj.id)
pipeline.execute()
def get_store(self, store, **kwargs): # pylint: disable=no-self-use
""" load the values in a store """
"""load the values in a store"""
return r.zrevrange(store, 0, -1, **kwargs)
def populate_store(self, store):
""" go from zero to a store """
"""go from zero to a store"""
pipeline = r.pipeline()
queryset = self.get_objects_for_store(store)
@ -75,12 +75,12 @@ class RedisStore(ABC):
@abstractmethod
def get_objects_for_store(self, store):
""" a queryset of what should go in a store, used for populating it """
"""a queryset of what should go in a store, used for populating it"""
@abstractmethod
def get_stores_for_object(self, obj):
""" the stores that an object belongs in """
"""the stores that an object belongs in"""
@abstractmethod
def get_rank(self, obj):
""" how to rank an object """
"""how to rank an object"""