]> git.parisson.com Git - timeside.git/commitdiff
Merge Dev into current branch
authorThomas Fillon <thomas@parisson.com>
Tue, 27 May 2014 11:31:56 +0000 (13:31 +0200)
committerThomas Fillon <thomas@parisson.com>
Tue, 27 May 2014 11:31:56 +0000 (13:31 +0200)
1  2 
setup.py
timeside/core.py
timeside/server/models.py

diff --cc setup.py
Simple merge
Simple merge
index 0b39b646b7c3b173186d07949d9158a2fab38a5c,68c723ee61cf9478ab5da709fda45b1f3e2cf61c..731fdd0bdab73187b5d1e50a80133d39ac930f9c
  # Guillaume Pellerin <yomguy@parisson.com>
  # Thomas Fillon <thomas@parisson.com>
  
--import timeside, os, uuid, time, hashlib, mimetypes
++import timeside
++import os
++import uuid
++
++import mimetypes
  
--from timeside.analyzer.core import AnalyzerResultContainer, AnalyzerResult
  from timeside.decoder.utils import sha1sum_file
  
  from django.db import models
@@@ -73,7 -61,7 +76,8 @@@ class MetaCore
  class BaseResource(models.Model):
  
      date_added = models.DateTimeField(_('date added'), auto_now_add=True)
--    date_modified = models.DateTimeField(_('date modified'), auto_now=True, null=True)
++    date_modified = models.DateTimeField(_('date modified'), auto_now=True,
++                                         null=True)
      uuid = models.CharField(_('uuid'), unique=True, blank=True, max_length=512)
  
      class Meta(MetaCore):
@@@ -99,9 -87,9 +103,16 @@@ class DocBaseResource(BaseResource)
  
  class Selection(DocBaseResource):
  
--    items = models.ManyToManyField('Item', related_name="selections", verbose_name=_('items'), blank=True, null=True)
--    selections = models.ManyToManyField('Selection', related_name="other_selections", verbose_name=_('other selections'), blank=True, null=True)
--    author = models.ForeignKey(User, related_name="selections", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    items = models.ManyToManyField('Item', related_name="selections",
++                                   verbose_name=_('items'), blank=True,
++                                   null=True)
++    selections = models.ManyToManyField('Selection',
++                                        related_name="other_selections",
++                                        verbose_name=_('other selections'),
++                                        blank=True, null=True)
++    author = models.ForeignKey(User, related_name="selections",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
  
      class Meta(MetaCore):
          db_table = app + '_selections'
  
  class Item(DocBaseResource):
  
-     file = models.FileField(_('file'), upload_to='items/%Y/%m/%d', blank=True, max_length=1024)
+     element_type = 'timeside_item'
 -    file = models.FileField(_('file'), upload_to='items/%Y/%m/%d', blank=True, max_length=1024)
++    file = models.FileField(_('file'), upload_to='items/%Y/%m/%d',
++                            blank=True, max_length=1024)
      url = models.URLField(_('URL'), blank=True, max_length=1024)
      sha1 = models.CharField(_('sha1'), blank=True, max_length=512)
      mime_type = models.CharField(_('mime type'), blank=True, max_length=256)
--    hdf5 = models.FileField(_('HDF5 result file'), upload_to='results/%Y/%m/%d', blank=True, max_length=1024)
--    author = models.ForeignKey(User, related_name="items", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    hdf5 = models.FileField(_('HDF5 result file'),
++                            upload_to='results/%Y/%m/%d',
++                            blank=True, max_length=1024)
++    author = models.ForeignKey(User, related_name="items",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
      lock = models.BooleanField(default=False)
  
      class Meta(MetaCore):
  
  class Experience(DocBaseResource):
  
--    presets = models.ManyToManyField('Preset', related_name="experiences", verbose_name=_('presets'), blank=True, null=True)
--    experiences = models.ManyToManyField('Experience', related_name="other_experiences", verbose_name=_('other experiences'), blank=True, null=True)
--    author = models.ForeignKey(User, related_name="experiences", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    presets = models.ManyToManyField('Preset', related_name="experiences",
++                                     verbose_name=_('presets'), blank=True,
++                                     null=True)
++    experiences = models.ManyToManyField('Experience',
++                                         related_name="other_experiences",
++                                         verbose_name=_('other experiences'),
++                                         blank=True, null=True)
++    author = models.ForeignKey(User, related_name="experiences",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
      is_public = models.BooleanField(default=False)
  
      class Meta(MetaCore):
@@@ -163,9 -153,9 +188,13 @@@ class Processor(models.Model)
  
  class Preset(BaseResource):
  
--    processor = models.ForeignKey('Processor', related_name="presets", verbose_name=_('processor'), blank=True, null=True)
++    processor = models.ForeignKey('Processor', related_name="presets",
++                                  verbose_name=_('processor'), blank=True,
++                                  null=True)
      parameters = models.TextField(_('Parameters'), blank=True)
--    author = models.ForeignKey(User, related_name="presets", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    author = models.ForeignKey(User, related_name="presets",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
      is_public = models.BooleanField(default=False)
  
      class Meta(MetaCore):
  
  class Result(BaseResource):
  
--    item = models.ForeignKey('Item', related_name="results", verbose_name=_('item'), blank=True, null=True, on_delete=models.SET_NULL)
--    preset = models.ForeignKey('Preset', related_name="results", verbose_name=_('preset'), blank=True, null=True, on_delete=models.SET_NULL)
--    hdf5 = models.FileField(_('HDF5 result file'), upload_to='results/%Y/%m/%d', blank=True, max_length=1024)
--    file = models.FileField(_('Output file'), upload_to='results/%Y/%m/%d', blank=True, max_length=1024)
--    mime_type = models.CharField(_('Output file MIME type'), blank=True, max_length=256)
 -    status = models.IntegerField(_('status'), choices=STATUS, default=1)
 -    author = models.ForeignKey(User, related_name="results", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    item = models.ForeignKey('Item', related_name="results",
++                             verbose_name=_('item'), blank=True, null=True,
++                             on_delete=models.SET_NULL)
++    preset = models.ForeignKey('Preset', related_name="results",
++                               verbose_name=_('preset'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
++    hdf5 = models.FileField(_('HDF5 result file'),
++                            upload_to='results/%Y/%m/%d', blank=True,
++                            max_length=1024)
++    file = models.FileField(_('Output file'), upload_to='results/%Y/%m/%d',
++                            blank=True, max_length=1024)
++    mime_type = models.CharField(_('Output file MIME type'), blank=True,
++                                 max_length=256)
 +    status = models.IntegerField(_('status'), choices=STATUS, default=_DRAFT)
-     author = models.ForeignKey(User, related_name="results", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    author = models.ForeignKey(User, related_name="results",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
  
      class Meta(MetaCore):
          db_table = app + '_results'
  
  class Task(BaseResource):
  
--    experience = models.ForeignKey('Experience', related_name="task", verbose_name=_('experience'), blank=True, null=True)
--    selection = models.ForeignKey('Selection', related_name="task", verbose_name=_('selection'), blank=True, null=True)
 -    status = models.IntegerField(_('status'), choices=STATUS, default=1)
 -    author = models.ForeignKey(User, related_name="tasks", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    experience = models.ForeignKey('Experience', related_name="task",
++                                   verbose_name=_('experience'), blank=True,
++                                   null=True)
++    selection = models.ForeignKey('Selection', related_name="task",
++                                  verbose_name=_('selection'), blank=True,
++                                  null=True)
 +    status = models.IntegerField(_('status'), choices=STATUS, default=_DRAFT)
-     author = models.ForeignKey(User, related_name="tasks", verbose_name=_('author'), blank=True, null=True, on_delete=models.SET_NULL)
++    author = models.ForeignKey(User, related_name="tasks",
++                               verbose_name=_('author'), blank=True, null=True,
++                               on_delete=models.SET_NULL)
  
      class Meta(MetaCore):
          db_table = app + '_tasks'
          self.save()
  
      def run(self):
 -        self.status_setter(3)
 +        self.status_setter(_RUNNING)
  
          results_root = 'results'
--        if not os.path.exists(settings.MEDIA_ROOT + results_root):
--            os.makedirs(settings.MEDIA_ROOT + results_root)
++        results_path = os.path.join(settings.MEDIA_ROOT, results_root)
++        if not os.path.exists(results_path):
++            os.makedirs(results_path)
  
          for item in self.selection.items.all():
--            path = results_root + os.sep + item.uuid + os.sep
--            if not os.path.exists(settings.MEDIA_ROOT + os.sep + path):
--                os.makedirs(settings.MEDIA_ROOT + os.sep + path)
++            item_path = os.path.join(results_path, item.uuid)
++            if not os.path.exists(item_path):
++                os.makedirs(item_path)
  
-             pipe = timeside.decoder.file.FileDecoder(item.file.path, sha1=item.sha1)
 -            pipe = timeside.decoder.FileDecoder(item.file.path, sha1=item.sha1)
++            pipe = timeside.decoder.file.FileDecoder(item.file.path,
++                                                     sha1=item.sha1)
  
              presets = {}
              for preset in self.experience.presets.all():
                  proc = get_processor(preset.processor.pid)
                  if proc.type == 'encoder':
--                    result, c = Result.objects.get_or_create(preset=preset, item=item)
--                    result.file = path + str(result.uuid) + '.' + proc.file_extension()
++                    result, c = Result.objects.get_or_create(preset=preset,
++                                                             item=item)
++                    media_file = '.'.join([str(result.uuid),
++                                           proc.file_extension()])
++                    result.file = os.path.join(item_path, media_file)
                      result.save()
                      proc = proc(result.file.path, overwrite=True)
                  else:
                      proc = proc()
-                 proc.set_parameters(preset.parameters)
 -                #proc.set_parameters(preset.parameters)
++                if proc.type == 'analyzer':
++                    proc.set_parameters(preset.parameters)
                  presets[preset] = proc
                  pipe = pipe | proc
  
              #     time.sleep(30)
  
              if not item.hdf5:
--                item.hdf5 =  path + str(self.experience.uuid) + '.hdf5'
++                hdf5_file = str(self.experience.uuid) + '.hdf5'
++                item.hdf5 =  os.path.join(item_path, hdf5_file)
                  item.save()
 -
              pipe.run()
              item.lock_setter(True)
              pipe.results.to_hdf5(item.hdf5.path)
              for preset in presets.keys():
                  proc = presets[preset]
                  if proc.type == 'analyzer':
 -                    for processor_id in proc.results.keys():
 -                        parameters = proc.results[processor_id].parameters
 -                        preset, c = Preset.objects.get_or_create(processor=preset.processor, parameters=unicode(parameters))
 -                        result, c = Result.objects.get_or_create(preset=preset, item=item)
 -                        result.hdf5 = path + str(result.uuid) + '.hdf5'
 +                    for result_id in proc.results.keys():
 +                        parameters = proc.results[result_id].parameters
-                         preset, c = Preset.objects.get_or_create(processor=preset.processor, parameters=unicode(parameters))
-                         result, c = Result.objects.get_or_create(preset=preset, item=item)
-                         result.hdf5 = path + str(result.uuid) + '.hdf5'
++                        preset, c = Preset.objects.get_or_create(processor=preset.processor,
++                                                                 parameters=unicode(parameters))
++                        result, c = Result.objects.get_or_create(preset=preset,
++                                                                 item=item)
++                        hdf5_file = str(result.uuid) + '.hdf5'
++                        result.hdf5 = os.path.join(item_path, hdf5_file)
                          proc.results.to_hdf5(result.hdf5.path)
 -                        result.status_setter(4)
 +                        result.status_setter(_DONE)
                  elif proc.type == 'grapher':
                      parameters = {}
--                    result, c = Result.objects.get_or_create(preset=preset, item=item)
--                    result.file = path + str(result.uuid) + '.png'
++                    result, c = Result.objects.get_or_create(preset=preset,
++                                                             item=item)
++                    image_file = str(result.uuid) + '.png'
++                    result.file = os.path.join(item_path, image_file)
                      proc.render(output=result.file.path)
 -                    result.status_setter(4)
 +                    result.status_setter(_DONE)
                  elif proc.type == 'encoder':
                      result = Result.objects.get(preset=preset, item=item)
 -                    result.status_setter(4)
 +                    result.status_setter(_DONE)
                  del proc
  
              # except:
@@@ -294,12 -285,12 +351,14 @@@ def set_mimetype(sender, **kwargs)
          if not instance.mime_type:
              instance.mime_type = get_mime_type(instance.file.path)
  
++
  def set_hash(sender, **kwargs):
      instance = kwargs['instance']
      if instance.file:
          if not instance.sha1:
              instance.sha1 = sha1sum_file(instance.file.path)
  
++
  def run(sender, **kwargs):
      instance = kwargs['instance']
      if instance.status == 2:
@@@ -310,4 -301,4 +369,3 @@@ post_save.connect(set_mimetype, sender=
  post_save.connect(set_hash, sender=Item)
  post_save.connect(set_mimetype, sender=Result)
  post_save.connect(run, sender=Task)
--