batch_clean_template_task.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 extensions.ext_storage import storage
  7. from models.dataset import Dataset
  8. from models.model import UploadFile
  9. @shared_task(queue="dataset")
  10. def batch_clean_template_task(template_ids: list[str], dataset_id: str, doc_form: str, file_ids: list[str]):
  11. """
  12. Clean template when template deleted.
  13. :param template_ids: template ids
  14. :param dataset_id: dataset id
  15. :param doc_form: doc_form
  16. :param file_ids: file ids
  17. Usage: batch_clean_template_task.delay(template_ids, dataset_id)
  18. """
  19. logging.info(click.style("Start batch clean templates when templates deleted", fg="green"))
  20. start_at = time.perf_counter()
  21. try:
  22. dataset = db.session.query(Dataset).filter(Dataset.id == dataset_id).first()
  23. if not dataset:
  24. raise Exception("template has no dataset")
  25. if file_ids:
  26. files = db.session.query(UploadFile).filter(UploadFile.id.in_(file_ids)).all()
  27. for file in files:
  28. try:
  29. storage.delete(file.key)
  30. except Exception:
  31. logging.exception("Delete file failed when template deleted, file_id: {}".format(file.id))
  32. db.session.delete(file)
  33. db.session.commit()
  34. end_at = time.perf_counter()
  35. logging.info(
  36. click.style(
  37. "Cleaned templates when templates deleted latency: {}".format(end_at - start_at),
  38. fg="green",
  39. )
  40. )
  41. except Exception:
  42. logging.exception("Cleaned templates when templates deleted failed")