From: Guillaume Pellerin Date: Sun, 5 May 2019 15:07:36 +0000 (+0200) Subject: Add timeside run command X-Git-Tag: 1.7.4~5^2~22 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=2af0c5c62811871e273003ff395bee71970fe0ce;p=telemeta.git Add timeside run command --- diff --git a/.gitignore b/.gitignore index b6a4544c..dc5e19ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.py[co] *~ +*.swp # Packages *.egg diff --git a/telemeta/management/commands/telemeta-run-timeside-experience.py b/telemeta/management/commands/telemeta-run-timeside-experience.py new file mode 100644 index 00000000..2b1d084c --- /dev/null +++ b/telemeta/management/commands/telemeta-run-timeside-experience.py @@ -0,0 +1,131 @@ +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.exceptions import MultipleObjectsReturned + +import os + +from telemeta.models import MediaItem, MediaCollection + +import timeside.core +from timeside.server.models import Selection, Item, Processor, Preset, Experience, Task, Analysis, SubProcessor +from timeside.server.models import _PENDING, _DONE +from timeside.core.tools.test_samples import generateSamples +import simplejson as json + + +class Command(BaseCommand): + help = "Run a list of timeside plugins on all telemeta items" + + media_root = os.path.normpath(settings.MEDIA_ROOT) + processor_blacklist = [] + + def add_arguments(self, parser): + parser.add_argument('-s', '--selection_title', + dest='selection_title', + help='define the title of the selection') + + parser.add_argument('-e', '--experience_title', + dest='experience_title', + help='define the title of the experience') + + parser.add_argument('-m', '--media_directory', + dest='media_directory', + help='define the media directory') + + parser.add_argument('-l', '--log', + dest='log', + help='define log file') + + parser.add_argument('-f', '--force', + action='store_true', + dest='force', + help='Force overwrite data') + + parser.add_argument('-c', '--cleanup', + action='store_true', + dest='cleanup', + help='Cleanup result data') + + parser.add_argument('-t', '--test', + action='store_true', + dest='test', + help='test mode') + + parser.add_argument('--pid', + nargs='+', + type=str, + help='Processor ID') + + parser.add_argument('--collection_code', + dest='collection_code', + help='define the telemeta collection code') + + def create_selection(self): + if self.collection_code: + selection_title = self.collection_code + collection = MediaCollection.objects.get(code=self.collection_code) + tm_items = collection.items.all() + else: + selection_title = self.selection_title + tm_items = MediaItem.objects.all() + + self.selection, c = Selection.objects.get_or_create(title=selection_title) + items = self.selection.items.all() + + for tm_item in tm_items: + if tm_item.file: + path = os.sep.join([self.media_root, tm_item.file]) + item, c = Item.objects.get_or_create(title=tm_item.title, + source_file=path) + if not item in items: + self.selection.items.add(item) + + if self.cleanup: + for result in item.results.all(): + result.delete() + + def create_experience(self): + presets = [] + processors = timeside.core.processor.processors(timeside.core.api.IProcessor) + for proc in processors: + trig = True + # print(proc.id()) + if proc.id() in self.pid: + for processor in self.processor_blacklist: + if processor in proc.id(): + trig = False + if trig: + processor, c = Processor.objects.get_or_create(pid=proc.id()) + try: + preset, c = Preset.objects.get_or_create(processor=processor, parameters='{}') + presets.append(preset) + except Preset.MultipleObjectsReturned: + print(Preset.objects.filter(processor=processor, parameters='{}')) + + self.experience, c = Experience.objects.get_or_create(title=self.experience_title) + for preset in presets: + if not preset in self.experience.presets.all(): + self.experience.presets.add(preset) + + def handle(self, *args, **options): + self.selection_title = options.get('selection_title') + self.experience_title = options.get('experience_title') + self.media_directory = options.get('media_directory') + self.force = options.get('force') + self.test = options.get('test') + self.cleanup = options.get('cleanup') + self.pid = options.get('pid') + self.collection_code = options.get('collection_code') + + self.create_selection() + self.create_experience() + + task, c = Task.objects.get_or_create(experience=self.experience, selection=self.selection) + if c or task.status != _DONE or self.force: + task.status = _PENDING + task.save() + +