11907: Fix timezone handling for HTTP timestamps.
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 7 Jun 2018 19:26:36 +0000 (15:26 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Thu, 7 Jun 2018 19:30:52 +0000 (15:30 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

sdk/cwl/arvados_cwl/http.py

index 32fc1cf90de09dbfa7e357906fda3a1641102d83..4516de021b8522f25990cf2988b7b4345f13849d 100644 (file)
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
 import requests
 import email.utils
 import time
@@ -7,17 +11,23 @@ import arvados
 import arvados.collection
 import urlparse
 import logging
+import calendar
 
 logger = logging.getLogger('arvados.cwl-runner')
 
 def my_formatdate(dt):
-    return email.utils.formatdate(timeval=time.mktime(dt.timetuple()),
+    return email.utils.formatdate(timeval=calendar.timegm(dt.timetuple()),
                                   localtime=False, usegmt=True)
 
 def my_parsedate(text):
-    parsed = email.utils.parsedate(text)
+    parsed = email.utils.parsedate_tz(text)
     if parsed:
-        return datetime.datetime(*parsed[:6])
+        if parsed[9]:
+            # Adjust to UTC
+            return datetime.datetime(*parsed[:6]) + datetime.timedelta(seconds=parsed[9])
+        else:
+            # TZ is zero or missing, assume UTC.
+            return datetime.datetime(*parsed[:6])
     else:
         return datetime.datetime(1970, 1, 1)