Răsfoiți Sursa

use safe parse_timestamp to parse timestamps, fixes #2994

also: refactor so it is possible to get tz-unaware datetime
objects from parse_timestamp.
Thomas Waldmann 7 ani în urmă
părinte
comite
7996a87357
2 a modificat fișierele cu 6 adăugiri și 3 ștergeri
  1. 1 1
      src/borg/helpers/manifest.py
  2. 5 2
      src/borg/helpers/time.py

+ 1 - 1
src/borg/helpers/manifest.py

@@ -166,7 +166,7 @@ class Manifest:
 
 
     @property
     @property
     def last_timestamp(self):
     def last_timestamp(self):
-        return datetime.strptime(self.timestamp, ISO_FORMAT)
+        return parse_timestamp(self.timestamp, tzinfo=None)
 
 
     @classmethod
     @classmethod
     def load(cls, repository, operations, key=None, force_tam_not_required=False):
     def load(cls, repository, operations, key=None, force_tam_not_required=False):

+ 5 - 2
src/borg/helpers/time.py

@@ -10,10 +10,13 @@ def to_localtime(ts):
     return datetime(*time.localtime((ts - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds())[:6])
     return datetime(*time.localtime((ts - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds())[:6])
 
 
 
 
-def parse_timestamp(timestamp):
+def parse_timestamp(timestamp, tzinfo=timezone.utc):
     """Parse a ISO 8601 timestamp string"""
     """Parse a ISO 8601 timestamp string"""
     fmt = ISO_FORMAT if '.' in timestamp else ISO_FORMAT_NO_USECS
     fmt = ISO_FORMAT if '.' in timestamp else ISO_FORMAT_NO_USECS
-    return datetime.strptime(timestamp, fmt).replace(tzinfo=timezone.utc)
+    dt = datetime.strptime(timestamp, fmt)
+    if tzinfo is not None:
+        dt = dt.replace(tzinfo=tzinfo)
+    return dt
 
 
 
 
 def timestamp(s):
 def timestamp(s):