您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

delete_conversation_task.py 2.3KB

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