Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

delete_conversation_task.py 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import logging
  2. import time
  3. import click
  4. from celery import shared_task # type: ignore
  5. from extensions.ext_database import db
  6. from models import ConversationVariable
  7. from models.model import Message, MessageAnnotation, MessageFeedback
  8. from models.tools import ToolConversationVariables, ToolFile
  9. from models.web import PinnedConversation
  10. @shared_task(queue="conversation")
  11. def delete_conversation_related_data(conversation_id: str) -> None:
  12. """
  13. Delete related data conversation in correct order from datatbase to respect foreign key constraints
  14. Args:
  15. conversation_id: conversation Id
  16. """
  17. logging.info(
  18. click.style(f"Starting to delete conversation data from db for conversation_id {conversation_id}", fg="green")
  19. )
  20. start_at = time.perf_counter()
  21. try:
  22. db.session.query(MessageAnnotation).where(MessageAnnotation.conversation_id == conversation_id).delete(
  23. synchronize_session=False
  24. )
  25. db.session.query(MessageFeedback).where(MessageFeedback.conversation_id == conversation_id).delete(
  26. synchronize_session=False
  27. )
  28. db.session.query(ToolConversationVariables).where(
  29. ToolConversationVariables.conversation_id == conversation_id
  30. ).delete(synchronize_session=False)
  31. db.session.query(ToolFile).where(ToolFile.conversation_id == conversation_id).delete(synchronize_session=False)
  32. db.session.query(ConversationVariable).where(ConversationVariable.conversation_id == conversation_id).delete(
  33. synchronize_session=False
  34. )
  35. db.session.query(Message).where(Message.conversation_id == conversation_id).delete(synchronize_session=False)
  36. db.session.query(PinnedConversation).where(PinnedConversation.conversation_id == conversation_id).delete(
  37. synchronize_session=False
  38. )
  39. db.session.commit()
  40. end_at = time.perf_counter()
  41. logging.info(
  42. click.style(
  43. f"Succeeded cleaning data from db for conversation_id {conversation_id} latency: {end_at - start_at}",
  44. fg="green",
  45. )
  46. )
  47. except Exception as e:
  48. logging.exception("Failed to delete data from db for conversation_id: %s failed", conversation_id)
  49. db.session.rollback()
  50. raise e
  51. finally:
  52. db.session.close()