Gerald's time-stamp format was inconsistent.
[htsworkflow.git] / htsworkflow / pipelines / gerald.py
index aca994f4a8ac9c3e4cc24ccc674e8cf91ebef6df..75d7d2e514485503b0cca1a612a969ddc6e156e0 100644 (file)
@@ -104,7 +104,7 @@ class Gerald(Alignment):
 
         timestamp = self.tree.findtext('ChipWideRunParameters/TIME_STAMP')
         if timestamp is not None:
-            epochstamp = time.mktime(time.strptime(timestamp, '%c'))
+            epochstamp = time.mktime(time.strptime(timestamp))
             return datetime.fromtimestamp(epochstamp)
         return super(Gerald, self)._get_date()
     date = property(_get_date)
@@ -177,7 +177,7 @@ class CASAVA(Alignment):
         if self.tree is None:
             return
         if len(self.tree.xpath('TIME_STAMP')) == 0:
-            time_stamp = self.date.strftime('%c')
+            time_stamp = self.date.strftime("%a %b %d %H:%M:%S %Y")
             time_element = ElementTree.Element('TIME_STAMP')
             time_element.text = time_stamp
             self.tree.append(time_element)
@@ -187,7 +187,10 @@ class CASAVA(Alignment):
             return None
         time_element = self.tree.xpath('TIME_STAMP')
         if len(time_element) == 1:
-            return datetime.strptime(time_element[0].text, '%c')
+           timetuple = time.strptime(
+               time_element[0].text.strip(),
+               "%a %b %d %H:%M:%S %Y")
+           return datetime(*timetuple[:6])
         return super(CASAVA, self)._get_date()
     date = property(_get_date)
 
@@ -405,7 +408,9 @@ class LaneSpecificRunParameters(collections.MutableMapping):
         real_key = self._find_key(key)
         if real_key is not None:
             return self._lanes[real_key]
-        raise KeyError("%s not found" % (repr(key),))
+        raise KeyError("%s not found in %s" % (
+            repr(key),
+            ",".join((repr(k) for k in self._lanes.keys()))))
 
     def __setitem__(self, key, value):
         if len(self._lanes) > 100:
@@ -437,7 +442,10 @@ class LaneSpecificRunParameters(collections.MutableMapping):
             if k.matches(lookup_key):
                 results.append(k)
         if len(results) > 1:
-            raise ValueError("More than one key matched query %s" % (str(lookup_key),))
+            errmsg = "Key %s matched multiple keys: %s"
+            raise ValueError(errmsg % (str(lookup_key),
+                                       ",".join((str(x) for x in results))))
+
         elif len(results) == 1:
             return results[0]
         else: