38 lines
976 B
Python
38 lines
976 B
Python
import json
|
|
from typing import List, Dict
|
|
|
|
from orm.notification import Notification
|
|
from services.db import local_session
|
|
from services.rediscache import redis
|
|
|
|
|
|
def handle_reaction(notification: Dict[str, str | int | List[int]]):
|
|
"""создаеёт новое хранимое уведомление"""
|
|
try:
|
|
with local_session() as session:
|
|
n = Notification(**notification)
|
|
session.add(n)
|
|
session.commit(n)
|
|
except Exception as e:
|
|
session.rollback()
|
|
print(f"[listener.handle_reaction] error: {str(e)}")
|
|
|
|
|
|
def stop(pubsub):
|
|
pubsub.unsubscribe()
|
|
pubsub.close()
|
|
|
|
|
|
def start():
|
|
pubsub = redis.pubsub()
|
|
pubsub.subscribe("reaction")
|
|
try:
|
|
# Бесконечный цикл прослушивания
|
|
while True:
|
|
msg = pubsub.get_message()
|
|
handle_reaction(json.loads(msg["data"]))
|
|
except Exception:
|
|
pass
|
|
finally:
|
|
stop(pubsub)
|