From a1af35a05ac68ccbf30a9889055ab05bcd296adf Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 22 Jun 2021 13:50:57 +0200 Subject: [PATCH] update import conference command against new models without telemeta --- .../teleforma-import-conferences-2.py | 108 +++++------------- 1 file changed, 29 insertions(+), 79 deletions(-) diff --git a/teleforma/management/commands/teleforma-import-conferences-2.py b/teleforma/management/commands/teleforma-import-conferences-2.py index 9b8d6d8b..34d511fa 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,34 @@ 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' + original_format = ['webm', 'mp4'] transcoded_formats = ['mp4', 'ogg', '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 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] @@ -88,16 +61,14 @@ class Command(BaseCommand): 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 +81,24 @@ class Command(BaseCommand): pass if not exist and not streaming: + 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.set_mime_type() - # 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 files = os.listdir(root) 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 + -- 2.39.5