From bdf04adb23e9235d95c982a6cece615f681d83f1 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Oct 06 2017 21:11:09 +0000 Subject: PR#624: fix formatTime for DateTime Merges #624 https://pagure.io/koji/pull-request/624 Fixes #623 https://pagure.io/koji/issue/623 --- diff --git a/koji/__init__.py b/koji/__init__.py index 0dad3db..cfc47d2 100644 --- a/koji/__init__.py +++ b/koji/__init__.py @@ -78,7 +78,7 @@ import warnings import xml.sax import xml.sax.handler import six.moves.urllib -from koji.xmlrpcplus import getparser, loads, dumps, Fault +from koji.xmlrpcplus import getparser, loads, dumps, Fault, xmlrpc_client PROFILE_MODULES = {} # {module_name: module_instance} @@ -2766,7 +2766,9 @@ def formatTime(value): """Format a timestamp so it looks nicer""" if not value: return '' - elif isinstance(value, datetime.datetime): + if isinstance(value, xmlrpc_client.DateTime): + value = datetime.datetime.strptime(value.value, "%Y%m%dT%H:%M:%S") + if isinstance(value, datetime.datetime): return value.strftime('%Y-%m-%d %H:%M:%S') else: # trim off the microseconds, if present diff --git a/tests/test_lib/test_format_time.py b/tests/test_lib/test_format_time.py new file mode 100644 index 0000000..f989aa4 --- /dev/null +++ b/tests/test_lib/test_format_time.py @@ -0,0 +1,55 @@ +from __future__ import absolute_import +import datetime +import unittest +import six.moves.xmlrpc_client as xmlrpc_client + +from koji import formatTime, formatTimeLong + +class TestFormatTime(unittest.TestCase): + def test_format_time(self): + self.assertEqual(formatTime(None), '') + self.assertEqual(formatTime(''), '') + + desired = '2017-10-05 09:52:31' + # datetime + d = datetime.datetime(year=2017, month=10, day=5, hour=9, minute=52, second=31, microsecond=12) + self.assertEqual(formatTime(d), desired) + + # DateTime + d1 = xmlrpc_client.DateTime(d) + self.assertEqual(formatTime(d1), desired) + + # str + self.assertEqual(formatTime(desired), desired) + + # str + microseconds + self.assertEqual(formatTime(desired + '.123'), desired) + + def test_format_time_long(self): + self.assertEqual(formatTimeLong(None), '') + self.assertEqual(formatTimeLong(''), '') + + desired = 'Thu, 05 Oct 2017 09:52:31' + + # datetime + d = datetime.datetime(year=2017, month=10, day=5, hour=9, minute=52, second=31, microsecond=12) + r = formatTimeLong(d) + r = r[:r.rfind(' ')] + self.assertEqual(r, desired) + + # DateTime + d1 = xmlrpc_client.DateTime(d) + r = formatTimeLong(d1) + r = r[:r.rfind(' ')] + self.assertEqual(r, desired) + + # str + d2 = '2017-10-05 09:52:31' + r = formatTimeLong(d2) + r = r[:r.rfind(' ')] + self.assertEqual(r, desired) + + # str + microseconds + r = formatTimeLong(d2 + '.123') + r = r[:r.rfind(' ')] + self.assertEqual(r, desired)