author-with-stat-cache-nonblock-2
Some checks failed
Deploy on push / deploy (push) Failing after 9s

This commit is contained in:
Untone 2024-06-11 17:51:34 +03:00
parent b2fdc9a453
commit 04e20b29ee
4 changed files with 30 additions and 14 deletions

View File

@ -1,3 +1,5 @@
import asyncio
from sqlalchemy import and_, distinct, func, join, select
from sqlalchemy.orm import aliased
@ -260,9 +262,12 @@ def author_follows_topics(author_id: int):
async def update_author_stat(author_id: int):
author_query = select(Author).where(Author.id == author_id)
try:
[author_with_stat] = get_with_stat(author_query)
if isinstance(author_with_stat, Author):
author_dict = author_with_stat.dict()
await cache_author(author_dict)
result = get_with_stat(author_query)
if result and len(result) == 1:
author_with_stat = result[0]
if isinstance(author_with_stat, Author):
author_dict = author_with_stat.dict()
# await cache_author(author_dict)
asyncio.create_task(cache_author(author_dict))
except Exception as exc:
logger.error(exc, exc_info=True)

View File

@ -1,3 +1,4 @@
import asyncio
import json
from typing import List
@ -81,11 +82,12 @@ async def get_cached_author_by_user_id(user_id: str, get_with_stat) -> dict:
if not author_id:
author_query = select(Author).filter(Author.user == user_id)
result = get_with_stat(author_query)
if result:
[author_with_stat] = result
if author_with_stat:
await cache_author(author_with_stat.dict())
if result and len(result) == 1:
author_with_stat = result[0]
if isinstance(author_with_stat, Author):
author_dict = author_with_stat.dict()
# await cache_author(author_dict)
asyncio.create_task(cache_author(author_dict))
else:
author_str = await redis.execute("GET", f"author:id:{author_id}")
if author_str:

View File

@ -66,9 +66,14 @@ def after_reaction_update(mapper, connection, reaction: Reaction):
try:
# reaction author
author_subquery = select(Author).where(Author.id == reaction.created_by)
[author_with_stat] = get_with_stat(author_subquery)
if isinstance(author_with_stat, Author):
asyncio.create_task(cache_author(author_with_stat.dict()))
result = get_with_stat(author_subquery)
if result and len(result) == 1:
author_with_stat = result[0]
if isinstance(author_with_stat, Author):
author_dict = author_with_stat.dict()
# await cache_author(author_dict)
asyncio.create_task(cache_author(author_dict))
# reaction repliers
replied_author_subquery = (

View File

@ -1,3 +1,4 @@
import asyncio
import os
import re
@ -50,9 +51,12 @@ class WebhookEndpoint(HTTPEndpoint):
session.add(author)
session.commit()
author_query = select(Author).filter(Author.user == user_id)
[author_with_stat] = get_with_stat(author_query)
if author_with_stat:
await cache_author(author_with_stat)
result = get_with_stat(author_query)
if result and len(result) == 1:
author_with_stat = result[0]
author_dict = author_with_stat.dict()
# await cache_author(author_with_stat)
asyncio.create_task(cache_author(author_dict))
return JSONResponse({"status": "success"})
except HTTPException as e: