Add: task for generating md5 & blur hashes
This commit is contained in:
parent
4f967020da
commit
4eb22bd0b8
1 changed files with 54 additions and 0 deletions
54
backend/apps/files/tasks.py
Normal file
54
backend/apps/files/tasks.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import io
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
|
from celery import shared_task
|
||||||
|
from celery.exceptions import Retry
|
||||||
|
from PIL import Image as PillowImage
|
||||||
|
import blurhash
|
||||||
|
|
||||||
|
from .models import PostFileModel
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task(autoretry_for=(Exception,), retry_backoff=True, max_retries=5)
|
||||||
|
def generate_blur_hash_PostFile(file_id):
|
||||||
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
|
img = PostFileModel.objects.select_for_update().get(id=file_id)
|
||||||
|
image_data = io.BytesIO(img.file.read())
|
||||||
|
pil_img = PillowImage.open(image_data)
|
||||||
|
|
||||||
|
blurhash_string = blurhash.encode(pil_img, 4, 3)
|
||||||
|
|
||||||
|
img.refresh_from_db()
|
||||||
|
img.blur_hash = blurhash_string
|
||||||
|
img.save()
|
||||||
|
return f"Successfully generated blur hash for file {file_id}" # Success message
|
||||||
|
except Exception as e:
|
||||||
|
error_message = f"Error generating blur hash for file {file_id}: {e}"
|
||||||
|
print(error_message)
|
||||||
|
raise Retry(exc=e) # Retry on exception
|
||||||
|
return error_message # This ensures the error message is stored in the results
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task(autoretry_for=(Exception,), retry_backoff=True, max_retries=5)
|
||||||
|
def generate_md5_hash_PostFile(file_id):
|
||||||
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
|
pstfile = PostFileModel.objects.select_for_update().get(id=file_id)
|
||||||
|
hash_md5 = hashlib.md5()
|
||||||
|
with open(pstfile.file.path, "rb") as f:
|
||||||
|
for chunk in iter(lambda: f.read(4096), b""):
|
||||||
|
hash_md5.update(chunk)
|
||||||
|
md5_hash = hash_md5.hexdigest()
|
||||||
|
|
||||||
|
pstfile.refresh_from_db()
|
||||||
|
pstfile.hash_md5 = md5_hash
|
||||||
|
pstfile.save()
|
||||||
|
return f"Successfully generated MD5 hash for file {file_id}" # Success message
|
||||||
|
except Exception as e:
|
||||||
|
error_message = f"Error generating MD5 hash for file {file_id}: {e}"
|
||||||
|
print(error_message)
|
||||||
|
raise Retry(exc=e) # Retry on exception
|
||||||
|
return error_message # This ensures the error message is stored in the results
|
Loading…
Add table
Reference in a new issue