disable signal refactoring

This commit is contained in:
Markos Gogoulos
2025-05-15 18:31:57 +03:00
parent a833b606f1
commit d940cad56b
3 changed files with 43 additions and 44 deletions

View File

@ -16,15 +16,24 @@ from django.core.files import File
from django.core.mail import EmailMessage
from django.db.models import Q
from django.utils import timezone
from contextlib import contextmanager
from django.db.models.signals import post_save
from cms import celery_app
from . import helpers, models
from .models import Encoding
from .helpers import mask_ip
logger = logging.getLogger(__name__)
@contextmanager
def disable_signal(signal, receiver, sender):
signal.disconnect(receiver, sender=sender)
try:
yield
finally:
signal.connect(receiver, sender=sender)
def get_user_or_session(request):
"""Return a dictionary with user info
@ -415,36 +424,38 @@ def copy_video(original_media, copy_encodings=True, title_suffix="(Trimmed)"):
New Media object
"""
with open(original_media.media_file.path, "rb") as f:
myfile = File(f)
new_media = models.Media.objects.create(
media_file=myfile,
title=f"{original_media.title} {title_suffix}",
description=original_media.description,
user=original_media.user,
media_type="video",
enable_comments=original_media.enable_comments,
allow_download=original_media.allow_download,
state=original_media.state,
is_reviewed=original_media.is_reviewed,
add_date=timezone.now()
)
with disable_signal(post_save, models.media_save, models.Media):
with open(original_media.media_file.path, "rb") as f:
myfile = File(f)
new_media = models.Media.objects.create(
media_file=myfile,
title=f"{original_media.title} {title_suffix}",
description=original_media.description,
user=original_media.user,
media_type="video",
enable_comments=original_media.enable_comments,
allow_download=original_media.allow_download,
state=original_media.state,
is_reviewed=original_media.is_reviewed,
add_date=timezone.now()
)
if copy_encodings:
for encoding in original_media.encodings.filter(status="success", chunk=False):
if encoding.media_file:
with open(encoding.media_file.path, "rb") as f:
myfile = File(f)
new_encoding = Encoding.objects.create(
media_file=myfile,
media=new_media,
profile=encoding.profile,
status="success",
progress=100,
chunk=False,
logs=f"Copied from encoding {encoding.id}"
)
new_encoding.save()
with disable_signal(post_save, models.encoding_file_save, models.Encoding):
with open(encoding.media_file.path, "rb") as f:
myfile = File(f)
new_encoding = models.Encoding.objects.create(
media_file=myfile,
media=new_media,
profile=encoding.profile,
status="success",
progress=100,
chunk=False,
logs=f"Copied from encoding {encoding.id}"
)
new_encoding.save()
# Copy categories and tags
for category in original_media.category.all():

View File

@ -84,6 +84,7 @@ ENCODE_EXTENSIONS_KEYS = [extension for extension, name in ENCODE_EXTENSIONS]
ENCODE_RESOLUTIONS_KEYS = [resolution for resolution, name in ENCODE_RESOLUTIONS]
def generate_uid():
return get_random_string(length=16)

View File

@ -17,8 +17,6 @@ from django.conf import settings
from django.core.cache import cache
from django.core.files import File
from django.db.models import Q
from django.db.models.signals import post_save
from contextlib import contextmanager
from actions.models import USER_MEDIA_ACTIONS, MediaAction
from users.models import User
@ -48,8 +46,7 @@ from .models import (
Rating,
Tag,
VideoChapterData,
VideoTrimRequest,
media_save
VideoTrimRequest
)
logger = get_task_logger(__name__)
@ -63,14 +60,6 @@ ERRORS_LIST = [
]
@contextmanager
def disable_signal(signal, receiver, sender):
signal.disconnect(receiver, sender=sender)
try:
yield
finally:
signal.connect(receiver, sender=sender)
@task(name="chunkize_media", bind=True, queue="short_tasks", soft_time_limit=60 * 30 * 4)
def chunkize_media(self, friendly_token, profiles, force=True):
@ -854,7 +843,7 @@ def produce_video_chapters(chapter_id):
return True
@task(name="video_trim_task", bind=True, queue="short_tasks")
@task(name="video_trim_task", bind=True, queue="short_tasks", soft_time_limit=600)
def video_trim_task(self, trim_request_id):
# SOS: if at some point we move from ffmpeg copy, then this need be changed
# to long_tasks
@ -891,8 +880,7 @@ def video_trim_task(self, trim_request_id):
if proceed_with_single_file:
if trim_request.video_action == "save_new" or trim_request.video_action == "create_segments" and len(timestamps_encodings) == 1:
with disable_signal(post_save, media_save, Media):
new_media = copy_video(original_media, copy_encodings=True)
new_media = copy_video(original_media, copy_encodings=True)
target_media = new_media
trim_request.media = new_media
@ -924,8 +912,7 @@ def video_trim_task(self, trim_request_id):
else:
for i, timestamp in enumerate(timestamps_encodings, start=1):
with disable_signal(post_save, media_save, Media):
new_media = copy_video(original_media, title_suffix=f"(Trimmed) {i}", copy_encodings=True)
new_media = copy_video(original_media, title_suffix=f"(Trimmed) {i}", copy_encodings=True)
original_trim_result = trim_video_method(new_media.media_file.path, [timestamp])
encodings = new_media.encodings.filter(status="success", profile__extension='mp4', chunk=False)