diff --git a/resolvers/__init__.py b/resolvers/__init__.py index 913d899f..f313465a 100644 --- a/resolvers/__init__.py +++ b/resolvers/__init__.py @@ -1,7 +1,7 @@ from resolvers.auth import login, sign_out, is_email_free, register, confirm from resolvers.inbox import create_message, delete_message, update_message, get_messages from resolvers.zine import create_shout, get_shout_by_slug, top_month, top_overall, \ - recent_shouts, top_authors, top_viewed + recent_shouts, top_viewed #, top_authors from resolvers.profile import get_users_by_slugs, get_current_user from resolvers.topics import topic_subscribe, topic_unsubscribe, topics_by_author, \ topics_by_community, topics_by_slugs diff --git a/resolvers/zine.py b/resolvers/zine.py index ad7de6d6..ea91bc18 100644 --- a/resolvers/zine.py +++ b/resolvers/zine.py @@ -152,28 +152,30 @@ class ShoutsCache: shouts.append(shout) async with ShoutsCache.lock: ShoutsCache.top_viewed = shouts - - @staticmethod - async def prepare_top_authors(): - month_ago = datetime.now() - timedelta(days = 30) - with local_session() as session: - shout_with_view = select(Shout.slug, func.sum(ShoutViewByDay.value).label("view")).\ - join(ShoutViewByDay).\ - where(and_(ShoutViewByDay.day > month_ago, Shout.publishedAt != None)).\ - group_by(Shout.slug).\ - order_by(desc("view")).cte() - stmt = select(ShoutAuthor.user, func.sum(shout_with_view.c.view).label("view")).\ - join(shout_with_view, ShoutAuthor.shout == shout_with_view.c.slug).\ - group_by(ShoutAuthor.user).\ - order_by(desc("view")).\ - limit(ShoutsCache.limit) - authors = {} - for row in session.execute(stmt): - authors[row.user] = row.view - authors_ids = authors.keys() - authors = session.query(User).filter(User.id.in_(authors_ids)).all() - async with ShoutsCache.lock: - ShoutsCache.top_authors = authors + + ''' + @staticmethod + async def prepare_top_authors(): + month_ago = datetime.now() - timedelta(days = 30) + with local_session() as session: + shout_with_view = select(Shout.slug, func.sum(ShoutViewByDay.value).label("view")).\ + join(ShoutViewByDay).\ + where(and_(ShoutViewByDay.day > month_ago, Shout.publishedAt != None)).\ + group_by(Shout.slug).\ + order_by(desc("view")).cte() + stmt = select(ShoutAuthor.user, func.sum(shout_with_view.c.view).label("view")).\ + join(shout_with_view, ShoutAuthor.shout == shout_with_view.c.slug).\ + group_by(ShoutAuthor.user).\ + order_by(desc("view")).\ + limit(ShoutsCache.limit) + authors = {} + for row in session.execute(stmt): + authors[row.user] = row.view + authors_ids = authors.keys() + authors = session.query(User).filter(User.id.in_(authors_ids)).all() + async with ShoutsCache.lock: + ShoutsCache.top_authors = authors + ''' @staticmethod @@ -186,7 +188,7 @@ class ShoutsCache: await ShoutsCache.prepare_top_overall() await ShoutsCache.prepare_top_viewed() await ShoutsCache.prepare_recent_shouts() - await ShoutsCache.prepare_top_authors() + # await ShoutsCache.prepare_top_authors() print("shouts cache update finished") except Exception as err: print("shouts cache worker error = %s" % (err)) @@ -234,10 +236,10 @@ async def recent_shouts(_, info, limit): return ShoutsCache.recent_shouts[:limit] -@query.field("topAuthors") -async def top_authors(_, info, limit): - async with ShoutsCache.lock: - return ShoutsCache.top_authors[:limit] +# @query.field("topAuthors") +# async def top_authors(_, info, limit): +# async with ShoutsCache.lock: +# return ShoutsCache.top_authors[:limit] @mutation.field("createShout")