summaryrefslogtreecommitdiff
path: root/contrib/python/podman/libs/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/python/podman/libs/__init__.py')
-rw-r--r--contrib/python/podman/libs/__init__.py43
1 files changed, 5 insertions, 38 deletions
diff --git a/contrib/python/podman/libs/__init__.py b/contrib/python/podman/libs/__init__.py
index ab8fb94a8..7285921d7 100644
--- a/contrib/python/podman/libs/__init__.py
+++ b/contrib/python/podman/libs/__init__.py
@@ -1,7 +1,8 @@
"""Support files for podman API implementation."""
import datetime
-import re
import threading
+from dateutil.parser import parse as dateutil_parse
+
__all__ = [
'cached_property',
@@ -44,45 +45,11 @@ class cached_property(object):
def datetime_parse(string):
- """Convert timestamp to datetime.
-
- Because date/time parsing in python is still pedantically stupid,
- we rip the input string apart throwing out the stop characters etc;
- then rebuild a string strptime() can parse. Igit!
-
- - Python >3.7 will address colons in the UTC offset.
- - There is no ETA on microseconds > 6 digits.
- - And giving an offset and timezone name...
-
- # match: 2018-05-08T14:12:53.797795191-07:00
- # match: 2018-05-08T18:24:52.753227-07:00
- # match: 2018-05-08 14:12:53.797795191 -0700 MST
- # match: 2018-05-09T10:45:57.576002 (python isoformat())
+ """Convert timestamps to datetime.
- Some people, when confronted with a problem, think “I know,
- I'll use regular expressions.” Now they have two problems.
- -- Jamie Zawinski
+ tzinfo aware, if provided.
"""
- ts = re.compile(r'^(\d+)-(\d+)-(\d+)'
- r'[ T]?(\d+):(\d+):(\d+).(\d+)'
- r' *([-+][\d:]{4,5})? *')
-
- x = ts.match(string)
- if x is None:
- raise ValueError('Unable to parse {}'.format(string))
-
- # converting everything to int() not worth the readablity hit
- igit_proof = '{}T{}.{}{}'.format(
- '-'.join(x.group(1, 2, 3)),
- ':'.join(x.group(4, 5, 6)),
- x.group(7)[0:6],
- x.group(8).replace(':', '') if x.group(8) else '',
- )
-
- format = '%Y-%m-%dT%H:%M:%S.%f'
- if x.group(8):
- format += '%z'
- return datetime.datetime.strptime(igit_proof, format)
+ return dateutil_parse(string.upper(), fuzzy=True)
def datetime_format(dt):