mirror of https://github.com/python/cpython
xmlrpc.client uses datetime.datetime.isoformat() (#105741)
Reimplement _iso8601_format() using the datetime isoformat() method. Ignore the timezone. Co-Authored-by: Paul Ganssle <1377457+pganssle@users.noreply.github.com>
This commit is contained in:
parent
7b1f0f204a
commit
307bceaa65
|
@ -504,10 +504,16 @@ class DateTimeTestCase(unittest.TestCase):
|
||||||
self.assertEqual(str(t), time.strftime("%Y%m%dT%H:%M:%S", d))
|
self.assertEqual(str(t), time.strftime("%Y%m%dT%H:%M:%S", d))
|
||||||
|
|
||||||
def test_datetime_datetime(self):
|
def test_datetime_datetime(self):
|
||||||
|
# naive (no tzinfo)
|
||||||
d = datetime.datetime(2007,1,2,3,4,5)
|
d = datetime.datetime(2007,1,2,3,4,5)
|
||||||
t = xmlrpclib.DateTime(d)
|
t = xmlrpclib.DateTime(d)
|
||||||
self.assertEqual(str(t), '20070102T03:04:05')
|
self.assertEqual(str(t), '20070102T03:04:05')
|
||||||
|
|
||||||
|
# aware (with tzinfo): the timezone is ignored
|
||||||
|
d = datetime.datetime(2023, 6, 12, 13, 30, tzinfo=datetime.UTC)
|
||||||
|
t = xmlrpclib.DateTime(d)
|
||||||
|
self.assertEqual(str(t), '20230612T13:30:00')
|
||||||
|
|
||||||
def test_repr(self):
|
def test_repr(self):
|
||||||
d = datetime.datetime(2007,1,2,3,4,5)
|
d = datetime.datetime(2007,1,2,3,4,5)
|
||||||
t = xmlrpclib.DateTime(d)
|
t = xmlrpclib.DateTime(d)
|
||||||
|
|
|
@ -245,41 +245,15 @@ class Fault(Error):
|
||||||
|
|
||||||
##
|
##
|
||||||
# Backwards compatibility
|
# Backwards compatibility
|
||||||
|
|
||||||
boolean = Boolean = bool
|
boolean = Boolean = bool
|
||||||
|
|
||||||
##
|
|
||||||
# Wrapper for XML-RPC DateTime values. This converts a time value to
|
|
||||||
# the format used by XML-RPC.
|
|
||||||
# <p>
|
|
||||||
# The value can be given as a datetime object, as a string in the
|
|
||||||
# format "yyyymmddThh:mm:ss", as a 9-item time tuple (as returned by
|
|
||||||
# time.localtime()), or an integer value (as returned by time.time()).
|
|
||||||
# The wrapper uses time.localtime() to convert an integer to a time
|
|
||||||
# tuple.
|
|
||||||
#
|
|
||||||
# @param value The time, given as a datetime object, an ISO 8601 string,
|
|
||||||
# a time tuple, or an integer time value.
|
|
||||||
|
|
||||||
|
def _iso8601_format(value):
|
||||||
# Issue #13305: different format codes across platforms
|
if value.tzinfo is not None:
|
||||||
_day0 = datetime(1, 1, 1)
|
# XML-RPC only uses the naive portion of the datetime
|
||||||
def _try(fmt):
|
value = value.replace(tzinfo=None)
|
||||||
try:
|
# XML-RPC doesn't use '-' separator in the date part
|
||||||
return _day0.strftime(fmt) == '0001'
|
return value.isoformat(timespec='seconds').replace('-', '')
|
||||||
except ValueError:
|
|
||||||
return False
|
|
||||||
if _try('%Y'): # Mac OS X
|
|
||||||
def _iso8601_format(value):
|
|
||||||
return value.strftime("%Y%m%dT%H:%M:%S")
|
|
||||||
elif _try('%4Y'): # Linux
|
|
||||||
def _iso8601_format(value):
|
|
||||||
return value.strftime("%4Y%m%dT%H:%M:%S")
|
|
||||||
else:
|
|
||||||
def _iso8601_format(value):
|
|
||||||
return value.strftime("%Y%m%dT%H:%M:%S").zfill(17)
|
|
||||||
del _day0
|
|
||||||
del _try
|
|
||||||
|
|
||||||
|
|
||||||
def _strftime(value):
|
def _strftime(value):
|
||||||
|
|
Loading…
Reference in New Issue