From 608901a260df82d6ace7968a5246c3c5813c12b3 Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Wed, 25 Jan 2023 09:32:59 +0300 Subject: [PATCH] hotfixes: migration logs, recipients online status --- migration/tables/content_items.py | 40 +++++++++++++++++++------------ orm/reaction.py | 6 ++--- resolvers/inbox/chats.py | 2 +- resolvers/inbox/load.py | 14 +++++++++-- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/migration/tables/content_items.py b/migration/tables/content_items.py index f386e484..7d462f20 100644 --- a/migration/tables/content_items.py +++ b/migration/tables/content_items.py @@ -47,18 +47,27 @@ def create_author_from_app(app): if not user: print('[migration] creating user...') name = app.get('name') - slug = translit(name, "ru", reversed=True).lower() - slug = re.sub('[^0-9a-zA-Z]+', '-', slug) - # check if nameslug is used - user = session.query(User).where(User.slug == slug).first() - # get slug from email - if user: - slug = app['email'].split('@')[0] - user = session.query(User).where(User.slug == slug).first() - # one more try - if user: - slug += '-author' - user = session.query(User).where(User.slug == slug).first() + if name: + slug = translit(name, "ru", reversed=True).lower() + slug = re.sub('[^0-9a-zA-Z]+', '-', slug) + # check if slug is used + if slug: + user = session.query(User).where(User.slug == slug).first() + + # get slug from email + if user: + slug = app['email'].split('@')[0] + user = session.query(User).where(User.slug == slug).first() + # one more try + if user: + slug += '-author' + user = session.query(User).where(User.slug == slug).first() + else: + print(f'[migration] author @{slug} is found by email') + + else: + print(f'[migration] author @{slug} is found') + # create user with application data if not user: @@ -84,7 +93,7 @@ def create_author_from_app(app): async def create_shout(shout_dict): s = Shout.create(**shout_dict) - author = shout_dict['authors'][0] + author = s.authors[0] with local_session() as session: srf = session.query(ShoutReactionsFollower).where( ShoutReactionsFollower.shout == s.id @@ -109,8 +118,9 @@ async def get_user(entry, storage): userdata = anondict # cleanup slug slug = userdata.get("slug", "") - slug = re.sub('[^0-9a-zA-Z]+', '-', slug) - userdata["slug"] = slug + if slug: + slug = re.sub('[^0-9a-zA-Z]+', '-', slug) + userdata["slug"] = slug user = await process_user(userdata, storage, user_oid) return user, user_oid diff --git a/orm/reaction.py b/orm/reaction.py index c2b43856..3ff769cd 100644 --- a/orm/reaction.py +++ b/orm/reaction.py @@ -11,7 +11,7 @@ class ReactionKind(Enumeration): DISAGREE = 2 # -1 PROOF = 3 # +1 DISPROOF = 4 # -1 - ASK = 5 # +0 bookmark + ASK = 5 # +0 PROPOSE = 6 # +0 QUOTE = 7 # +0 bookmark COMMENT = 8 # +0 @@ -19,8 +19,8 @@ class ReactionKind(Enumeration): REJECT = 0 # -1 LIKE = 11 # +1 DISLIKE = 12 # -1 - REMARK = 13 - FOOTNOTE = 14 + REMARK = 13 # 0 + FOOTNOTE = 14 # 0 # TYPE = # rating diff diff --git a/resolvers/inbox/chats.py b/resolvers/inbox/chats.py index 828f769c..853defab 100644 --- a/resolvers/inbox/chats.py +++ b/resolvers/inbox/chats.py @@ -75,7 +75,7 @@ async def create_chat(_, info, title="", members=[]): if chat: chat = json.loads(chat) if chat['title'] == "": - print('[inbox] craeteChat found old chat') + print('[inbox] createChat found old chat') print(chat) break if chat: diff --git a/resolvers/inbox/load.py b/resolvers/inbox/load.py index fd746df9..b5909d8c 100644 --- a/resolvers/inbox/load.py +++ b/resolvers/inbox/load.py @@ -124,15 +124,25 @@ async def load_messages_by(_, info, by, limit: int = 10, offset: int = 0): async def load_recipients(_, info, limit=50, offset=0): chat_users = [] auth: AuthCredentials = info.context["request"].auth - try: + onliners = await redis.execute("SMEMBERS", "users-online") chat_users += await followed_authors(auth.user_id) limit = limit - len(chat_users) except Exception: pass with local_session() as session: chat_users += session.query(User).where(User.emailConfirmed).limit(limit).offset(offset) + members = [] + for a in chat_users: + members.append({ + "id": a.id, + "slug": a.slug, + "userpic": a.userpic, + "name": a.name, + "lastSeen": a.lastSeen, + "online": a.id in onliners + }) return { - "members": chat_users, + "members": members, "error": None }