]> git.parisson.com Git - timeside.git/commitdiff
fix post save file properties detection
authorGuillaume Pellerin <yomguy@parisson.com>
Mon, 21 Apr 2014 13:20:42 +0000 (15:20 +0200)
committerGuillaume Pellerin <yomguy@parisson.com>
Mon, 21 Apr 2014 13:20:42 +0000 (15:20 +0200)
timeside/models.py

index 6479a870ca5f4a9fadaf0d9decd687b33a2ba5b6..ae0110de564b3e166bf75a8bbbe1b16087f15c65 100644 (file)
@@ -8,6 +8,7 @@ from timeside.decoder.utils import sha1sum_file
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from django.contrib.auth.models import User
+from django.db.models.signals import post_save
 
 app = 'timeside'
 
@@ -86,14 +87,6 @@ class Item(DocBaseResource):
         ordering = ['title']
         verbose_name = _('item')
 
-    def save(self, **kwargs):
-        if self.file:
-            if not self.mime_type:
-                self.mime_type = get_mime_type(self.file.path)
-            if not self.sha1:
-                self.sha1 = sha1sum_file(self.file.path)
-        super(Item, self).save(**kwargs)
-
     def results(self):
         return [result for result in self.results.all()]
 
@@ -101,6 +94,18 @@ class Item(DocBaseResource):
         self.lock = lock
         self.save()
 
+
+def update_file_properties(sender, **kwargs):
+    instance = kwargs['instance']
+    if instance.file:
+        if not instance.mime_type:
+            instance.mime_type = get_mime_type(instance.file.path)
+        if not instance.sha1:
+            instance.sha1 = sha1sum_file(instance.file.path)
+
+post_save.connect(update_file_properties, sender=Item)
+
+
 class Experience(DocBaseResource):
 
     processors = models.ManyToManyField('Processor', related_name="experiences", verbose_name=_('processors'), blank=True, null=True)
@@ -193,11 +198,17 @@ class Task(models.Model):
         self.save()
 
     def run(self):
+        results_root = settings.MEDIA_ROOT + 'results'
+        if not os.path.exists(results_root):
+            os.makedirs(results_root)
+
         self.status_setter(2)
 
         for item in self.selection.items:
+            path = results_root + os.sep + item.uuid + os.sep
             pipe = timeside.decoder.FileDecoder(item.file)
             proc_dict = {}
+
             for processor in self.experience.processors.all():
                 proc = get_processor(processor.id)
                 #TODO: add parameters
@@ -207,7 +218,6 @@ class Task(models.Model):
             while item.lock:
                 time.sleep(30)
             
-            path = settings.MEDIA_ROOT + 'results' + os.sep + item.uuid + os.sep
             if not item.hdf5:
                 item.hdf5 =  path + item.uuid + '.hdf5'
                 item.save()
@@ -224,6 +234,7 @@ class Task(models.Model):
                     result.hdf5 = path + item.uuid + '_' + proc.UUID + '.hdf5'
                     proc.results.to_hdf5(result.hdf5)
                     result.save()
+            
             except:
                 self.status_setter(0)
                 item.lock_setter(False)