"email": "pk5@example.com"
}
},
- {"pk": 1, "model": "experiments.clusterstation", "fields": {"name": "old"}},
- {"pk": 2, "model": "experiments.clusterstation", "fields": {"name": "loaner"}},
- {"pk": 3, "model": "experiments.clusterstation", "fields": {"name": "new"}},
+ {"pk": 1, "model": "experiments.clusterstation",
+ "fields": {"name": "old", "isdefault": false}},
+ {"pk": 2, "model": "experiments.clusterstation",
+ "fields": {"name": "loaner", "isdefault": true}},
+ {"pk": 3, "model": "experiments.clusterstation",
+ "fields": {"name": "new", "isdefault": false}},
{"pk": 1, "model": "experiments.sequencer",
- "fields": { "name": "Rotifer (HWI-EAS229)" }},
+ "fields": { "name": "Rotifer (HWI-EAS229)",
+ "model": "Illumina Genome Analyzer I",
+ "active": false,
+ "isdefault": false }},
{"pk": 2, "model": "experiments.sequencer",
"fields": {"name": "Tardigrade",
"instrument_name": "ILLUMINA-EC5D15",
- "model": "Illumina Genome Analyzer IIx"}
+ "model": "Illumina Genome Analyzer IIx",
+ "active": true,
+ "isdefault": true}
},
- {"pk": 3, "model": "experiments.sequencer", "fields": {"name": "Sequenced somewhere else."}},
+ {"pk": 3, "model": "experiments.sequencer",
+ "fields": {"name": "Sequenced somewhere else.",
+ "model": "Unknown",
+ "active": true,
+ "isdefault": false}},
{"pk": 153, "model": "experiments.flowcell",
"fields": {
"paired_end": true,
from django.core.exceptions import ObjectDoesNotExist
from django.core import urlresolvers
from django.db import models
-from django.db.models.signals import post_init
+from django.db.models.signals import post_init, pre_save
from htsworkflow.frontend.samples.models import Library
from htsworkflow.util.conversion import parse_flowcell_id
return d[0]
return None
+ @staticmethod
+ def update_isdefault(sender, instance, **kwargs):
+ """Clear default if needed
+ """
+ if instance.isdefault:
+ for c in ClusterStation.objects.all():
+ if c.id != instance.id:
+ c.isdefault = False
+ c.save()
+
+pre_save.connect(ClusterStation.update_isdefault, sender=ClusterStation)
class Sequencer(models.Model):
"""Sequencers we've owned
return d[0]
return None
+ @staticmethod
+ def update_isdefault(sender, instance, **kwargs):
+ """Clear default if needed
+ """
+ if instance.isdefault:
+ for s in Sequencer.objects.all():
+ if s.id != instance.id:
+ s.isdefault = False
+ s.save()
+
+pre_save.connect(Sequencer.update_isdefault, sender=Sequencer)
+
class FlowCell(models.Model):
flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
NSMAP = {'libns':'http://jumpgate.caltech.edu/wiki/LibraryOntology#'}
+class ClusterStationTestCases(TestCase):
+ fixtures = ['test_flowcells.json']
+
+ def test_default(self):
+ c = models.ClusterStation.default()
+ self.failUnlessEqual(c.id, 2)
+
+ c.isdefault = False
+ c.save()
+
+ total = models.ClusterStation.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 0)
+
+ other_default = models.ClusterStation.default()
+ self.failUnlessEqual(other_default.id, 3)
+
+
+ def test_update_default(self):
+ old_default = models.ClusterStation.default()
+
+ c = models.ClusterStation.objects.get(pk=3)
+ c.isdefault = True
+ c.save()
+
+ new_default = models.ClusterStation.default()
+
+ self.failUnless(old_default != new_default)
+ self.failUnlessEqual(new_default, c)
+
+ total = models.ClusterStation.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ def test_update_other(self):
+ old_default = models.ClusterStation.default()
+ total = models.ClusterStation.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ c = models.ClusterStation.objects.get(pk=1)
+ c.name = "Primary Key 1"
+ c.save()
+
+ total = models.ClusterStation.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ new_default = models.ClusterStation.default()
+ self.failUnlessEqual(old_default, new_default)
+
+
+class SequencerTestCases(TestCase):
+ fixtures = ['test_flowcells.json']
+
+ def test_default(self):
+ # starting with no default
+ s = models.Sequencer.default()
+ self.failUnlessEqual(s.id, 2)
+
+ total = models.Sequencer.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ s.isdefault = False
+ s.save()
+
+ total = models.Sequencer.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 0)
+
+ other_default = models.Sequencer.default()
+ self.failUnlessEqual(other_default.id, 7)
+
+ def test_update_default(self):
+ old_default = models.Sequencer.default()
+
+ s = models.Sequencer.objects.get(pk=1)
+ s.isdefault = True
+ s.save()
+
+ new_default = models.Sequencer.default()
+
+ self.failUnless(old_default != new_default)
+ self.failUnlessEqual(new_default, s)
+
+ total = models.Sequencer.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+
+ def test_update_other(self):
+ old_default = models.Sequencer.default()
+ total = models.Sequencer.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ s = models.Sequencer.objects.get(pk=1)
+ s.name = "Primary Key 1"
+ s.save()
+
+ total = models.Sequencer.objects.filter(isdefault=True).count()
+ self.failUnlessEqual(total, 1)
+
+ new_default = models.Sequencer.default()
+ self.failUnlessEqual(old_default, new_default)
+
+
class ExperimentsTestCases(TestCase):
fixtures = ['test_flowcells.json',
]