handle DateTime objects in encode_datetime

This commit is contained in:
Mike McLean 2017-11-02 15:59:18 -04:00
parent cdee4d2710
commit 6bb32b699e
3 changed files with 14 additions and 0 deletions

View file

@ -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

View file

@ -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):

View file

@ -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]