mirror of
https://github.com/containers/podman.git
synced 2025-06-27 21:50:18 +08:00
Add support for Zulu timestamp parsing
- Improve error message when podman varlink service is not running Signed-off-by: Jhon Honce <jhonce@redhat.com> Closes: #800 Approved by: rhatdan
This commit is contained in:
@ -53,9 +53,14 @@ class Client(object):
|
||||
self._client = functools.partial(_podman, uri, interface)
|
||||
|
||||
# Quick validation of connection data provided
|
||||
if not System(self._client).ping():
|
||||
raise ValueError('Failed varlink connection "{}/{}"'.format(
|
||||
uri, interface))
|
||||
try:
|
||||
if not System(self._client).ping():
|
||||
raise ValueError('Failed varlink connection "{}/{}"'.format(
|
||||
uri, interface))
|
||||
except FileNotFoundError:
|
||||
raise ValueError('Failed varlink connection "{}/{}".'
|
||||
' Is podman service running?'.format(
|
||||
uri, interface))
|
||||
|
||||
def __enter__(self):
|
||||
"""Return `self` upon entering the runtime context."""
|
||||
|
@ -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.
|
||||
"""Convert timestamps 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())
|
||||
|
||||
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):
|
||||
|
@ -1,2 +1,3 @@
|
||||
varlink==25
|
||||
varlink>=25
|
||||
setuptools
|
||||
dateutil
|
||||
|
@ -18,19 +18,26 @@ class TestLibs(unittest.TestCase):
|
||||
'2018-05-08T14:12:53.797795191-07:00',
|
||||
'2018-05-08T14:12:53.797795-07:00',
|
||||
'2018-05-08T14:12:53.797795-0700',
|
||||
'2018-05-08 14:12:53.797795191 -0700 MST'
|
||||
'2018-05-08 14:12:53.797795191 -0700 MST',
|
||||
]:
|
||||
actual = podman.datetime_parse(v)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
podman.datetime_parse(datetime.datetime.now().isoformat())
|
||||
expected = datetime.datetime.strptime(
|
||||
'2018-05-08T14:12:53.797795-0000', '%Y-%m-%dT%H:%M:%S.%f%z')
|
||||
for v in [
|
||||
'2018-05-08T14:12:53.797795191Z',
|
||||
'2018-05-08T14:12:53.797795191z',
|
||||
]:
|
||||
actual = podman.datetime_parse(v)
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
actual = podman.datetime_parse(datetime.datetime.now().isoformat())
|
||||
self.assertIsNotNone(actual)
|
||||
|
||||
def test_parse_fail(self):
|
||||
# chronologist humor: '1752-09-05T12:00:00.000000-0000' also not
|
||||
# handled correctly by python for my locale.
|
||||
for v in [
|
||||
'1752-9-5',
|
||||
'1752-09-05',
|
||||
'There is no time here.',
|
||||
]:
|
||||
with self.assertRaises(ValueError):
|
||||
podman.datetime_parse(v)
|
||||
|
Reference in New Issue
Block a user