From: Guillaume Pellerin Date: Fri, 10 Nov 2023 21:16:43 +0000 (+0100) Subject: update conf import from dev X-Git-Tag: 2.8.1-ae~31 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=1f0e8172df0245107e008ea89520d551b91f3768;p=teleforma.git update conf import from dev --- diff --git a/teleforma/management/commands/teleforma-import-conferences-2.py b/teleforma/management/commands/teleforma-import-conferences-2.py index 9b8d6d8b..d964bb7d 100644 --- a/teleforma/management/commands/teleforma-import-conferences-2.py +++ b/teleforma/management/commands/teleforma-import-conferences-2.py @@ -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 +