? .DS_Store ? .gdb_history ? @test ? autom4te.cache ? build.dbg ? build.opt ? pyconfig.h.in.save ? test_decorators.py- ? Doc/pyvm ? Doc/api/pyobject_track.tex ? Doc/ref/ref.log ? Include/object.h.track_globals.diff ? Include/opcode.h.save ? Include/opcode.h.track_globals.diff ? Include/stringobject.h.save ? Include/stringobject.h.views ? Lib/_strptime.py.save ? Lib/optimize.py ? Lib/encodings/html_entities.py ? Lib/plat-mac/errors.rsrc.df.rsrc ? Lib/test/bcb_tests.sh ? Lib/test/bcbempty.out.exp ? Lib/test/bcbetc.out.exp ? Lib/test/bcbetchosts.out.exp ? Lib/test/bcbexists.out.exp ? Lib/test/bcbnone.out.exp ? Lib/test/bcbtmp.out.exp ? Lib/test/foo ? Lib/test/test_atexitnew.py ? Lib/test/test_file.py.save ? Mac/Tools/IDE/PythonIDE.rsrc.df.rsrc ? Mac/scripts/BuildApplet.rsrc.df.rsrc ? Modules/041531.html ? Objects/041532.html ? Objects/fileobject.c.save ? Objects/object.patch ? Objects/stringobject.c.save ? Objects/stringobject.c.views ? Objects/weakrefobject.patch ? Python/ceval.c.track_globals.diff ? Python/compile.c.save ? Python/marshal.c.file-like Index: Lib/xmlrpclib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/xmlrpclib.py,v retrieving revision 1.41 diff -u -r1.41 xmlrpclib.py --- Lib/xmlrpclib.py 14 May 2005 20:54:15 -0000 1.41 +++ Lib/xmlrpclib.py 22 Oct 2005 20:58:03 -0000 @@ -357,13 +357,6 @@ if datetime and isinstance(value, datetime.datetime): self.value = value.strftime("%Y%m%dT%H:%M:%S") return - if datetime and isinstance(value, datetime.date): - self.value = value.strftime("%Y%m%dT%H:%M:%S") - return - if datetime and isinstance(value, datetime.time): - today = datetime.datetime.now().strftime("%Y%m%d") - self.value = value.strftime(today+"T%H:%M:%S") - return if not isinstance(value, (TupleType, time.struct_time)): if value == 0: value = time.time() @@ -371,10 +364,57 @@ value = time.strftime("%Y%m%dT%H:%M:%S", value) self.value = value - def __cmp__(self, other): + def make_comparable(self, other): if isinstance(other, DateTime): - other = other.value - return cmp(self.value, other) + s = self.value + o = other.value + elif datetime and isinstance(other, datetime.datetime): + s = self.value + o = other.strftime("%Y%m%dT%H:%M:%S") + elif isinstance(other, (str, unicode)): + s = self.value + o = other + elif hasattr(other, "timetuple"): + s = self.timetuple() + o = other.timetuple() + else: + otype = (hasattr(other, "__class__") + and other.__class__.__name__ + or type(other)) + raise TypeError("Can't compare %s and %s" % + (self.__class__.__name__, otype)) + return s, o + + def __lt__(self, other): + s, o = self.make_comparable(other) + return s < o + + def __le__(self, other): + s, o = self.make_comparable(other) + return s <= o + + def __gt__(self, other): + s, o = self.make_comparable(other) + return s > o + + def __ge__(self, other): + s, o = self.make_comparable(other) + return s >= o + + def __eq__(self, other): + s, o = self.make_comparable(other) + return s == o + + def __ne__(self, other): + s, o = self.make_comparable(other) + return s != o + + def timetuple(self): + return time.strptime(self.value, "%Y%m%dT%H:%M:%S") + + def __cmp__(self, other): + s, o = self.make_comparable(other) + return cmp(s, o) ## # Get date/time value. @@ -725,19 +765,6 @@ write("\n") dispatch[datetime.datetime] = dump_datetime - def dump_date(self, value, write): - write("") - write(value.strftime("%Y%m%dT00:00:00")) - write("\n") - dispatch[datetime.date] = dump_date - - def dump_time(self, value, write): - write("") - write(datetime.datetime.now().date().strftime("%Y%m%dT")) - write(value.strftime("%H:%M:%S")) - write("\n") - dispatch[datetime.time] = dump_time - def dump_instance(self, value, write): # check for special wrappers if value.__class__ in WRAPPERS: Index: Lib/test/test_xmlrpc.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_xmlrpc.py,v retrieving revision 1.9 diff -u -r1.9 test_xmlrpc.py --- Lib/test/test_xmlrpc.py 14 May 2005 20:54:16 -0000 1.9 +++ Lib/test/test_xmlrpc.py 22 Oct 2005 20:58:04 -0000 @@ -1,7 +1,11 @@ -import datetime import sys import unittest import xmlrpclib +try: + import datetime +except ImportError: + datetime = None + from test import test_support try: @@ -23,58 +27,41 @@ 'datetime1': xmlrpclib.DateTime('20050210T11:41:23'), 'datetime2': xmlrpclib.DateTime( (2005, 02, 10, 11, 41, 23, 0, 1, -1)), - 'datetime3': xmlrpclib.DateTime( - datetime.datetime(2005, 02, 10, 11, 41, 23)), }] +if datetime: + alist[0]['datetime3'] = xmlrpclib.DateTime( + datetime.datetime(2005, 02, 10, 11, 41, 23)) + class XMLRPCTestCase(unittest.TestCase): def test_dump_load(self): self.assertEquals(alist, xmlrpclib.loads(xmlrpclib.dumps((alist,)))[0][0]) - def test_dump_bare_datetime(self): - # This checks that an unwrapped datetime.date object can be handled - # by the marshalling code. This can't be done via test_dump_load() - # since with use_datetime set to 1 the unmarshaller would create - # datetime objects for the 'datetime[123]' keys as well - dt = datetime.datetime(2005, 02, 10, 11, 41, 23) - s = xmlrpclib.dumps((dt,)) - (newdt,), m = xmlrpclib.loads(s, use_datetime=1) - self.assertEquals(newdt, dt) - self.assertEquals(m, None) - - (newdt,), m = xmlrpclib.loads(s, use_datetime=0) - self.assertEquals(newdt, xmlrpclib.DateTime('20050210T11:41:23')) - - def test_dump_bare_date(self): - # This checks that an unwrapped datetime.date object can be handled - # by the marshalling code. This can't be done via test_dump_load() - # since the unmarshaller produces a datetime object - d = datetime.datetime(2005, 02, 10, 11, 41, 23).date() - s = xmlrpclib.dumps((d,)) - (newd,), m = xmlrpclib.loads(s, use_datetime=1) - self.assertEquals(newd.date(), d) - self.assertEquals(newd.time(), datetime.time(0, 0, 0)) - self.assertEquals(m, None) - - (newdt,), m = xmlrpclib.loads(s, use_datetime=0) - self.assertEquals(newdt, xmlrpclib.DateTime('20050210T00:00:00')) - - def test_dump_bare_time(self): - # This checks that an unwrapped datetime.time object can be handled - # by the marshalling code. This can't be done via test_dump_load() - # since the unmarshaller produces a datetime object - t = datetime.datetime(2005, 02, 10, 11, 41, 23).time() - s = xmlrpclib.dumps((t,)) - (newt,), m = xmlrpclib.loads(s, use_datetime=1) - today = datetime.datetime.now().date().strftime("%Y%m%d") - self.assertEquals(newt.time(), t) - self.assertEquals(newt.date(), datetime.datetime.now().date()) - self.assertEquals(m, None) - - (newdt,), m = xmlrpclib.loads(s, use_datetime=0) - self.assertEquals(newdt, xmlrpclib.DateTime('%sT11:41:23'%today)) + if datetime: + def test_dump_bare_datetime(self): + # This checks that an unwrapped datetime.date object can be handled + # by the marshalling code. This can't be done via test_dump_load() + # since with use_datetime set to 1 the unmarshaller would create + # datetime objects for the 'datetime[123]' keys as well + dt = datetime.datetime(2005, 02, 10, 11, 41, 23) + s = xmlrpclib.dumps((dt,)) + (newdt,), m = xmlrpclib.loads(s, use_datetime=1) + self.assertEquals(newdt, dt) + self.assertEquals(m, None) + + (newdt,), m = xmlrpclib.loads(s, use_datetime=0) + self.assertEquals(newdt, xmlrpclib.DateTime('20050210T11:41:23')) + + def test_cmp_datetime_DateTime(self): + now = datetime.datetime.now() + dt = xmlrpclib.DateTime(now.timetuple()) + self.assert_(dt == now) + self.assert_(now == dt) + then = now + datetime.timedelta(seconds=4) + self.assert_(then >= dt) + self.assert_(dt < then) def test_dump_big_long(self): self.assertRaises(OverflowError, xmlrpclib.dumps, (2L**99,))