Change experiments.FileType.regex to a text field so it can be arbitrarily long.
[htsworkflow.git] / htsworkflow / frontend / experiments / models.py
index 6c952db1bb431b9f136600e3ec5849f25ebcf78a..2da1fcf120228a2e46312a355066ddf1488aaba7 100644 (file)
@@ -3,6 +3,7 @@ import glob
 import logging
 import os
 import re
+import sre_constants
 import types
 import uuid
 
@@ -128,6 +129,33 @@ class Sequencer(models.Model):
 
 pre_save.connect(Sequencer.update_isdefault, sender=Sequencer)
 
+class FlowCellModel(models.Model):
+    name = models.TextField()
+    fixed_time = models.IntegerField(default=0, help_text='(seconds)')
+    per_cycle_time = models.IntegerField(default=0, help_text='(seconds)')
+    isdefault = models.BooleanField(default=False)
+
+    def __unicode__(self):
+        return unicode(self.name)
+
+    @classmethod
+    def default(cls):
+        d = cls.objects.filter(isdefault=True).all()
+        if len(d) > 0:
+            return d[-1]
+        return None
+
+    @staticmethod
+    def update_isdefault(sender, instance, **kwargs):
+        """Clear default if needed
+        """
+        if instance.isdefault:
+            for s in FlowCellType.objects.filter(isdefault=True).all():
+                if s.id != instance.id:
+                    s.isdefault = False
+                    s.save()
+
+pre_save.connect(FlowCellModel.update_isdefault, sender=FlowCellModel)
 
 class FlowCell(models.Model):
     flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
@@ -149,6 +177,7 @@ class FlowCell(models.Model):
 
     cluster_station = models.ForeignKey(ClusterStation, default=ClusterStation.default)
     sequencer = models.ForeignKey(Sequencer, default=Sequencer.default)
+    flowcell_model = models.ForeignKey(FlowCellModel, default=FlowCellModel.default)
 
     notes = models.TextField(blank=True)
 
@@ -427,6 +456,12 @@ class FileType(models.Model):
         #return u"<FileType: %s>" % (self.name,)
         return self.name
 
+    def regex_is_valid(self):
+        try:
+            regex = re.compile(self.regex)
+        except sre_constants.error as e:
+            return False
+        return re.compile(self.regex) is not None
 
 def str_uuid():
     """Helper function to set default UUID in DataFile"""