]> git.parisson.com Git - teleforma.git/commitdiff
add new conf import script
authorGuillaume Pellerin <guillaume.pellerin@parisson.com>
Fri, 29 May 2026 07:53:53 +0000 (09:53 +0200)
committerGuillaume Pellerin <guillaume.pellerin@parisson.com>
Fri, 29 May 2026 07:53:53 +0000 (09:53 +0200)
teleforma/management/commands/teleforma-import-conferences-4.py [new file with mode: 0644]

diff --git a/teleforma/management/commands/teleforma-import-conferences-4.py b/teleforma/management/commands/teleforma-import-conferences-4.py
new file mode 100644 (file)
index 0000000..bb90ac6
--- /dev/null
@@ -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
+