]> git.parisson.com Git - teleforma.git/commitdiff
update conf import from dev
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 10 Nov 2023 21:16:43 +0000 (22:16 +0100)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Fri, 10 Nov 2023 21:16:43 +0000 (22:16 +0100)
teleforma/management/commands/teleforma-import-conferences-2.py

index 9b8d6d8b91d3aeb074c9286dfe84d4f435a2d221..d964bb7d8827745569d1b1c16474f94d332a6a65 100644 (file)
@@ -3,18 +3,16 @@ 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 teleforma.models import *
 import logging
-import os, sys, time, datetime
-import timeside
+import os
 
 
 class Logger:
     """A logging object"""
 
     def __init__(self, file):
-        self.logger = logging.getLogger('teleforma')
+        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)
@@ -23,59 +21,37 @@ class Logger:
 
 
 class Command(BaseCommand):
-    help = "Import original and transcoded conference media from the MEDIA_ROOT directory "
+    help = "Import conferences from the MEDIA_ROOT directory "
     admin_email = 'webmaster@parisson.com'
     args = 'organization log_file'
     spacer = '_-_'
-    original_format = 'webm'
-    transcoded_formats = ['mp4', 'ogg', 'mp3']
+    original_format = ['mp4']
+    transcoded_formats = ['mp3']
     image_formats = ['png', 'jpg']
-    ffmpeg_args = {'mp3' : ' -vn -acodec libmp3lame -aq 6 -ac 2 ',
-                    'ogg' : ' -vn -acodec copy ',
-                    'mp4' : ' -vcodec libx264 -r 24 -b 512k -threads 4 -acodec libfaac -ar 48000 -ab 96k -ac 2 ',
-              }
-
-    def cleanup(self):
-        items  = MediaItemTranscoded.objects.all()
-        for item in items:
-            item.delete()
-        items = Media.objects.all()
-        for item in items:
-            item.delete()
-        items = MediaItem.objects.all()
-        for item in items:
-            item.delete()
-        items  = MediaCollection.objects.all()
-        for i in items :
-            i.delete()
-        
-    def get_duration(self, file):
-        decoder = timeside.decoder.FileDecoder(file)
-        decoder.setup()
-        # time.sleep(0.5)
-        value = str(datetime.timedelta(0,decoder.input_duration))
-        t = value.split(':')
-        t[2] = t[2].split('.')[0]
-        return ':'.join(t)
 
+    def add_arguments(self, parser):
+        parser.add_argument('args', nargs='*')
 
     def handle(self, *args, **options):
         organization_name = args[0]
-        log_file = args[1]
+        department_name = args[1]
+        log_file = args[2]
         logger = Logger(log_file)
 
         organization = Organization.objects.get(name=organization_name)
-        self.media_dir = settings.MEDIA_ROOT + organization.name
+        department = Department.objects.get(name=department_name,
+                                            organization=organization)
+        self.media_dir = settings.MEDIA_ROOT + organization.name + os.sep + department_name
         file_list = []
+        all_conferences = Conference.objects.all()
+        i = 1
 
-#        self.cleanup()
-
-        for root, dirs, files in os.walk(self.media_dir, followlinks=True):
+        for root, dirs, files in os.walk(self.media_dir):
             for filename in files:
                 name = os.path.splitext(filename)[0]
                 ext = os.path.splitext(filename)[1][1:]
 
-                if ext and ext in self.original_format and name[0] != '.':
+                if ext and (ext in self.original_format or ext in self.transcoded_formats) and name[0] != '.':
                     root_list = root.split(os.sep)
                     public_id = root_list[-1]
                     course = root_list[-2]
@@ -86,18 +62,15 @@ class Command(BaseCommand):
                     organization_name = root_list[-5]
                     dir = os.sep.join(root_list[-5:])
                     path = dir + os.sep + filename
-                    collection_id = '_'.join([department_name, course_id, course_type])
-
-                    department, c = Department.objects.get_or_create(name=department_name,
-                                                                     organization=organization)
-                    conferences = Conference.objects.filter(public_id=public_id)
-                    if conferences:
-                        conference = conferences[0]
 
+                    if Conference.objects.filter(public_id=public_id) and department:
+                        conference = Conference.objects.get(public_id=public_id)
+                        department = Department.objects.get(name=department_name,
+                                                            organization=organization)
                         exist = False
                         medias = conference.media.all()
                         for media in medias:
-                            if media.item.file == path:
+                            if media.file == path:
                                 exist = True
                                 break
 
@@ -110,45 +83,35 @@ class Command(BaseCommand):
                             pass
 
                         if not exist and not streaming:
-
                             # ORIGINAL MEDIA
-                            collection = MediaCollection.objects.get_or_create(code=collection_id, title=collection_id)
-                            code = '_'.join([collection_id, public_id, ext])
-                            item = MediaItem.objects.get_or_create(collection=collection, code=code)
-                            item.title = name
-                            item.file = path
-                            item.approx_duration = self.get_duration(root+os.sep+filename)
-                            item.save()
-
-                            # IMAGES
+                            media = Media(conference=conference)
+                            media.file = path
+                            media.course = conference.course
+                            media.period = conference.period
+                            media.course_type = conference.course_type
+                            media.type = ext
+                            media.is_published = False
+                            media.set_mime_type()
+
                             files = os.listdir(root)
+
+                            # TRANSCODED MEDIA
+                            for file in files:
+                                filename, extension = os.path.splitext(file)
+                                if extension[1:] in self.transcoded_formats:
+                                    r_path = dir + os.sep + file
+                                    t, c = MediaTranscoded.objects.get_or_create(item=media, file=r_path)
+
+                            # POSTER
                             for file in files:
                                 filename, extension = os.path.splitext(file)
                                 if extension[1:] in self.image_formats:
-                                    related = MediaItemRelated(item=item)
-                                    related.file = dir + os.sep + file
-                                    related.title = 'preview'
-                                    related.set_mime_type()
-                                    related.save()
+                                    media.poster_file = dir + os.sep + file
                                     break
 
-                            # TRANSCODED MEDIA
-                            for format in ffmpeg_args.keys():
-                                filename = name + '.' + format
-                                dest = os.path.abspath(root + os.sep + filename)
-                                r_path = dir + os.sep + filename
-                                # if not os.path.exists(dest):
-                                #     command = 'ffmpeg -i ' + path + ffmpeg_args[format] + ' -y ' + dest
-                                #     os.system(command)
-                                t, c = MediaItemTranscoded.objects.get_or_create(item=item, file=r_path)
-
-                            media = Media(conference=conference)
-                            media.item = item
-                            media.course = conference.course
-                            media.course_type = conference.course_type
-                            media.period = conference.period
-                            media.type = ext
-                            media.set_mime_type()
                             media.save()
                             conference.save()
+
                             logger.logger.info(path)
+                            i += 1
+