backend/app/checker/signals.py

38 lines
1.3 KiB
Python

import magic
from django.db.models.signals import post_save
from django.core.files import File
from django.dispatch import receiver
from celery import chain
from checker.models import Docx, WordDocx
from checker.services.file import doc_to_docx, doc_to_odt
from checker.tasks import process_file, process_word, highlight_file
@receiver(post_save, sender=Docx)
def create_docs(sender, instance, created, **kwargs):
if created:
type = magic.from_file(instance.file.path, mime=True)
if type == "application/msword":
pth = doc_to_docx(instance.file.path)
with open(pth, 'rb') as f:
instance.file = File(f, name=pth.split("/")[-1])
instance.save(update_fields=["file"])
elif type == "application/vnd.oasis.opendocument.text":
pth = doc_to_odt(instance.file.path)
with open(pth, 'rb') as f:
instance.file = File(f, name=pth.split("/")[-1])
instance.save(update_fields=["file"])
chain(process_file.s(instance.pk), highlight_file.s()).apply_async()
return
@receiver(post_save, sender=WordDocx)
def create_docs(sender, instance, created, **kwargs):
if created:
process_word.apply_async(kwargs={"pk": instance.pk})
return