From: Guillaume Pellerin Date: Fri, 29 May 2026 07:53:53 +0000 (+0200) Subject: add new conf import script X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=713cf0e1ad7bf0d266d81a00be3ad0a5a2d5b084;p=teleforma.git add new conf import script --- diff --git a/teleforma/management/commands/teleforma-import-conferences-4.py b/teleforma/management/commands/teleforma-import-conferences-4.py new file mode 100644 index 00000000..bb90ac69 --- /dev/null +++ b/teleforma/management/commands/teleforma-import-conferences-4.py @@ -0,0 +1,98 @@ +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 = "Import conferences from the MEDIA_ROOT directory " + admin_email = 'webmaster@parisson.com' + args = 'organization log_file' + spacer = '_-_' + media_formats = ['mp4', 'mp3'] + image_formats = ['png', 'jpg'] + + def add_arguments(self, parser): + parser.add_argument('args', nargs='*') + + def handle(self, *args, **options): + organization_name = args[0] + department_name = args[1] + log_file = args[2] + logger = Logger(log_file) + file_list = [] + i = 1 + + organization = Organization.objects.get(name=organization_name) + department = Department.objects.get(name=department_name, + organization=organization) + media_dir = settings.MEDIA_ROOT + organization.name + os.sep + department_name + conferences = Conference.objects.filter( + department=department, + imported=False, + streaming=False) + + for conference in conferences: + conf_dir = os.sep.join([ + media_dir, + str(conference.date_begin.year), + self.spacer.join([ + conference.course.code, + conference.course.course_type]), + conference.public_id]) + + if os.path.exists(conf_dir): + files = os.listdir(conf_dir) + + for media_format in media_formats: + media = Media(conference=conference) + media.course = conference.course + media.period = conference.period + media.course_type = conference.course_type + media.type = media_format + media.is_published = False + + for file in files: + name, ext = os.path.splitext(file) + full_path = conf_dir + os.sep + file + rel_path = full_path.replace(settings.MEDIA_ROOT, "") + + # POSTER + if ext[1:] in self.image_formats: + media.poster_file = rel_path + break + + # MEDIA FILE + if ext[1:] in self.media_formats: + media.file = rel_path + media.save() + filename = os.path.split(full_path)[1] + with open(full_path, 'rb') as f: + media.file_s3.save(filename, File(f)) + media.set_mime_type() + media.save() + + conference.imported = True + conference.save() + + logger.logger.info(path) + i += 1 +