import os import logging from django.conf import settings from .models import Video, READY, FAIL from .s3_uploader import upload_file from .utils import add_video_to_playlist, generate_thumbnail, download_file from cp_video.celery import app from cp_video.utils import asset_upload log = logging.getLogger('send_video_to_s3') @app.task() def send_video_to_s3(video_id=None): if not video_id: return log.info(f'Uploading video id {video_id} to S3...') local_video = Video.objects.get(id=video_id) try: video_name = local_video.local_file.name.split('/')[-1] key = asset_upload(local_video, video_name) file_path = settings.DOMAIN_NAME + settings.MEDIA_URL + key log.info(f'File path: {file_path}') content = download_file(file_path) log.info('get content successfully!') try: log.info('Generating thumbnail...') thumbnail, thumbnail_name = generate_thumbnail(file_path, video_name) key_thumbnail = f'videos/thumbnail/{thumbnail_name}' local_video.thumbnail = upload_file(thumbnail, key_thumbnail, 'image/jpeg') log.info('Thumbnail generated successfully!') except Exception as e: log.error(e) log.info('Thumbnail generation failed!') local_video.s3_file = upload_file(content, key, 'video/mp4') local_video.status = READY local_video.local_file = None local_video.save() log.info(f'Video id {local_video.id} uploaded to S3...') add_video_to_playlist(local_video) os.remove(content) except Exception as e: log.error(e) local_video.status = FAIL local_video.save(update_fields=['status']) log.info(f'Video {video_id} upload failed!')