From 3ab42ecb7256d6b0e96c028a2642a0d24c757742 Mon Sep 17 00:00:00 2001 From: Untone Date: Sun, 5 May 2024 20:16:45 +0300 Subject: [PATCH] following-cache-anyway-found --- resolvers/author.py | 8 ++++---- resolvers/follower.py | 7 ++----- services/cache.py | 4 ++-- services/triggers.py | 11 ++++++----- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/resolvers/author.py b/resolvers/author.py index a7331085..743a7aac 100644 --- a/resolvers/author.py +++ b/resolvers/author.py @@ -156,7 +156,7 @@ async def load_authors_by(_, _info, by, limit, offset): for [a] in authors_nostat: if isinstance(a, Author): author_id = a.id - if author_id: + if bool(author_id): cached_result = await redis.execute("GET", f"author:{author_id}") if isinstance(cached_result, str): author_dict = json.loads(cached_result) @@ -187,12 +187,12 @@ async def get_author_follows(_, _info, slug="", user=None, author_id=0): author_id = author.id if not author_id else author_id topics = [] authors = [] - if author_id: + if bool(author_id): rkey = f"author:{author_id}:follows-authors" logger.debug(f"getting {author_id} follows authors") cached = await redis.execute("GET", rkey) if not cached: - authors = author_follows_authors(author_id) + authors = author_follows_authors(author_id) # type: ignore prepared = [author.dict() for author in authors] await redis.execute( "SET", rkey, json.dumps(prepared, cls=CustomJSONEncoder) @@ -205,7 +205,7 @@ async def get_author_follows(_, _info, slug="", user=None, author_id=0): if cached and isinstance(cached, str): topics = json.loads(cached) if not cached: - topics = author_follows_topics(author_id) + topics = author_follows_topics(author_id) # type: ignore prepared = [topic.dict() for topic in topics] await redis.execute( "SET", rkey, json.dumps(prepared, cls=CustomJSONEncoder) diff --git a/resolvers/follower.py b/resolvers/follower.py index 5ab7abfa..c826e4e4 100644 --- a/resolvers/follower.py +++ b/resolvers/follower.py @@ -51,10 +51,7 @@ async def follow(_, info, what, slug): follows = [] follows_str = await redis.execute("GET", f"author:{follower_id}:follows-{entity}s") if isinstance(follows_str, str): - follows = json.loads(follows_str) - - if not follows: - return {"error": "cant find following cache"} + follows = json.loads(follows_str) or [] if what == "AUTHOR": follower_id = int(follower_id) @@ -105,7 +102,7 @@ async def unfollow(_, info, what, slug): follows = [] follows_str = await redis.execute("GET", f"author:{follower_id}:follows-{entity}s") if isinstance(follows_str, str): - follows = json.loads(follows_str) + follows = json.loads(follows_str) or [] if what == "AUTHOR": error = author_unfollow(follower_id, slug) diff --git a/services/cache.py b/services/cache.py index f8ceeb54..710a7c60 100644 --- a/services/cache.py +++ b/services/cache.py @@ -137,7 +137,7 @@ async def cache_topic(topic_dict: dict): follower_follows_topics_str = await redis.execute( "GET", f"author:{follower_id}:follows-topics" ) - if isinstance(follower_follows_topics, str): + if isinstance(follower_follows_topics_str, str): follower_follows_topics = json.loads(follower_follows_topics_str) c = 0 for old_topic in follower_follows_topics: @@ -149,7 +149,7 @@ async def cache_topic(topic_dict: dict): # topic not found in the list, so add the new topic with the updated stat field follower_follows_topics.append(topic_dict) - await redis.set( + await redis.execute('SET', "SET", f"author:{follower_id}:follows-topics", json.dumps(follower_follows_topics), diff --git a/services/triggers.py b/services/triggers.py index 6489fd2c..70e0c353 100644 --- a/services/triggers.py +++ b/services/triggers.py @@ -109,34 +109,35 @@ def after_author_update(_mapper, _connection, author: Author): result = get_with_stat(q) if result: [author_with_stat] = result - asyncio.create_task(cache_author(author_with_stat.dict())) + if author_with_stat: + _task = asyncio.create_task(cache_author(author_with_stat.dict())) def after_topic_follower_insert(_mapper, _connection, target: TopicFollower): logger.info(target) asyncio.create_task( - handle_topic_follower_change(target.topic, target.follower, True) + handle_topic_follower_change(target.topic, target.follower, True) # type: ignore ) def after_topic_follower_delete(_mapper, _connection, target: TopicFollower): logger.info(target) asyncio.create_task( - handle_topic_follower_change(target.topic, target.follower, False) + handle_topic_follower_change(target.topic, target.follower, False) # type: ignore ) def after_author_follower_insert(_mapper, _connection, target: AuthorFollower): logger.info(target) asyncio.create_task( - handle_author_follower_change(target.author, target.follower, True) + handle_author_follower_change(target.author, target.follower, True) # type: ignore ) def after_author_follower_delete(_mapper, _connection, target: AuthorFollower): logger.info(target) asyncio.create_task( - handle_author_follower_change(target.author, target.follower, False) + handle_author_follower_change(target.author, target.follower, False) # type: ignore )