diff --git a/koji/util.py b/koji/util.py index ba999a7d..cbf75b8f 100644 --- a/koji/util.py +++ b/koji/util.py @@ -21,6 +21,7 @@ from __future__ import absolute_import import calendar import datetime +from koji.xmlrpcplus import DateTime from fnmatch import fnmatch import koji import logging @@ -186,6 +187,8 @@ def encode_datetime(value): """Convert datetime objects to strings""" if isinstance(value, datetime.datetime): return value.isoformat(' ') + elif isinstance(value, DateTime): + return datetime.datetime(*value.timetuple()[:6]).isoformat(' ') else: return value diff --git a/koji/xmlrpcplus.py b/koji/xmlrpcplus.py index 6a736f49..9164cd77 100644 --- a/koji/xmlrpcplus.py +++ b/koji/xmlrpcplus.py @@ -11,6 +11,7 @@ import types getparser = xmlrpc_client.getparser loads = xmlrpc_client.loads Fault = xmlrpc_client.Fault +DateTime = xmlrpc_client.DateTime class ExtendedMarshaller(xmlrpc_client.Marshaller): diff --git a/tests/test_lib/test_encode_datetime.py b/tests/test_lib/test_encode_datetime.py index 7617c264..1583c374 100644 --- a/tests/test_lib/test_encode_datetime.py +++ b/tests/test_lib/test_encode_datetime.py @@ -2,6 +2,7 @@ import datetime import unittest import koji.util +from koji.xmlrpcplus import DateTime class testEncodeDatetime(unittest.TestCase): @@ -22,6 +23,15 @@ class testEncodeDatetime(unittest.TestCase): self.assertEqual(chk1, dstr) self.assertEqual(chk2, dstr) + def test_xmlrpc_dates(self): + # we skip the last because xmlrpc's DateTime class does not preserve + # fractions of seconds + for dt, dstr in self.DATES[:2]: + dt = DateTime(dt) + chk1 = koji.util.encode_datetime(dt) + chk2 = koji.util.encode_datetime_recurse(dt) + self.assertEqual(chk1, dstr) + self.assertEqual(chk2, dstr) def test_embedded_dates(self): dt1, ds1 = self.DATES[0]