Switch to regular dictionary instead of ordered dictionary.
authorDiane Trout <diane@caltech.edu>
Fri, 6 Jul 2012 23:03:51 +0000 (16:03 -0700)
committerDiane Trout <diane@caltech.edu>
Fri, 6 Jul 2012 23:03:51 +0000 (16:03 -0700)
python 2.6 doesn't have ordered dictionary. So I switched to using
a regular dictionary and just sorting the returned keys.

htsworkflow/pipelines/eland.py
htsworkflow/pipelines/test/test_eland.py

index 87c6fb7bc4e972988149de833bd7cba1ee6dfaab..873dbefeb8d2e633a80500c632119b8451e26aed 100644 (file)
@@ -639,7 +639,7 @@ class ELAND(collections.MutableMapping):
 
     def __init__(self, xml=None):
         # we need information from the gerald config.xml
-        self.results = collections.OrderedDict()
+        self.results = {}
 
         if xml is not None:
             self.set_elements(xml)
@@ -658,7 +658,9 @@ class ELAND(collections.MutableMapping):
         del self.result[key]
 
     def __iter__(self):
-        return self.results.iterkeys()
+        keys = self.results.iterkeys()
+        for k in sorted(keys):
+            yield k
 
     def __len__(self):
         return len(self.results)
index 9c61269c4c24cec9afbd195cc0ffdf4fa2247ed1..688d00ef8fe988d3e9b65ad8b1150316405af342 100644 (file)
@@ -229,6 +229,21 @@ class ElandTests(unittest.TestCase):
         self.assertEqual(len(match_reads), 0)
         self.assertEqual(reads, 1)
 
+    def test_ordering(self):
+        e = ELAND()
+        sl3 = SampleKey(lane=3, read=1, sample='33333')
+        sl1 = SampleKey(lane=1, read=1, sample='11111')
+        sl5 = SampleKey(lane=5, read=1, sample='55555')
+        e.results[sl5] = 'Lane5'
+        e.results[sl3] = 'Lane3'
+        e.results[sl1] = 'Lane1'
+
+        e_list = e.values()
+        print e.items()
+        self.assertEqual(e_list[0], 'Lane1')
+        self.assertEqual(e_list[1], 'Lane3')
+        self.assertEqual(e_list[2], 'Lane5')
+
 class TestElandMatches(unittest.TestCase):
     def test_eland_replacing(self):
         key = SampleKey(1, 1, 's')