From 15a975db89944d38dfb338c7406ca77cb392f250 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 5 Aug 2026 18:08:06 +0200 Subject: [PATCH] add command to exported conf to s3 --- .../teleforma-export-conferences-s3.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 teleforma/management/commands/teleforma-export-conferences-s3.py diff --git a/teleforma/management/commands/teleforma-export-conferences-s3.py b/teleforma/management/commands/teleforma-export-conferences-s3.py new file mode 100644 index 00000000..5cdf5415 --- /dev/null +++ b/teleforma/management/commands/teleforma-export-conferences-s3.py @@ -0,0 +1,75 @@ +from optparse import make_option +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.contrib.auth.models import User +from django.template.defaultfilters import slugify +from django.core.files import File +from django.core.files.base import ContentFile +from teleforma.models import * +import logging +import os + + +class Logger: + """A logging object""" + + def __init__(self, file): + self.logger = logging.getLogger('myapp') + self.hdlr = logging.FileHandler(file) + self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + self.hdlr.setFormatter(self.formatter) + self.logger.addHandler(self.hdlr) + self.logger.setLevel(logging.INFO) + + +class Command(BaseCommand): + help = "Export old conferences to S3 and delete local conf dir" + admin_email = 'webmaster@parisson.com' + args = 'organization department period log_file' + spacer = '_-_' + media_formats = ['mp4', 'mp3'] + image_formats = ['png', 'jpg'] + webm_pattern = "_0.webm" + mp3_pattern = ".mp3-" + + def add_arguments(self, parser): + parser.add_argument('args', nargs='*') + + def handle(self, *args, **options): + organization_name = args[0] + department_name = args[1] + period_name = args[2] + log_file = args[3] + logger = Logger(log_file) + + organization = Organization.objects.get(name=organization_name) + department = Department.objects.get(name=department_name, + organization=organization) + period = Period.objects.get(name=period_name) + media_dir = settings.MEDIA_ROOT + organization.name + os.sep + department_name + conferences = Conference.objects.filter( + department=department, + period=period, + ) + + for conference in conferences: + for media in conference.media.all(): + + media_file = media.file.path + filename = os.path.split(media_file)[1] + with open(media_file, 'rb') as f: + media.file_s3.save(filename, File(f)) + media.set_mime_type() + media.save() + logger.logger.info(media_file) + + poster_file = media.poster_file.path + filename = os.path.split(poster_file)[1] + with open(poster_file, 'rb') as f: + media.poster_file_s3.save(filename, File(f)) + media.save() + logger.logger.info(poster_file) + + conference.s3_exported = True + conference.save() + -- 2.47.3