diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2008-02-23 16:23:05 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2008-02-23 16:23:05 (GMT) |
commit | 085f75a8510000b38da641d5183a8a701c69d6d6 (patch) | |
tree | 2f5583f831053dab840e4940d3ee51112d2d9d7f /Lib/xmlrpclib.py | |
parent | 8328bbc57dccbcbd834f822c2c9c70bd2ad199eb (diff) | |
download | cpython-085f75a8510000b38da641d5183a8a701c69d6d6.zip cpython-085f75a8510000b38da641d5183a8a701c69d6d6.tar.gz cpython-085f75a8510000b38da641d5183a8a701c69d6d6.tar.bz2 |
#1330538: Improve comparison of xmlrpclib.DateTime and datetime instances.
Remove automatic handling of datetime.date and datetime.time.
This breaks backward compatibility, but python-dev discussion was strongly
against this automatic conversion; see the bug for a link.
Diffstat (limited to 'Lib/xmlrpclib.py')
-rw-r--r-- | Lib/xmlrpclib.py | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index 3864dad..d99f5d7 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -357,13 +357,6 @@ class DateTime: 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 @@ class DateTime: 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. @@ -736,19 +776,6 @@ class Marshaller: write("</dateTime.iso8601></value>\n") dispatch[datetime.datetime] = dump_datetime - def dump_date(self, value, write): - write("<value><dateTime.iso8601>") - write(value.strftime("%Y%m%dT00:00:00")) - write("</dateTime.iso8601></value>\n") - dispatch[datetime.date] = dump_date - - def dump_time(self, value, write): - write("<value><dateTime.iso8601>") - write(datetime.datetime.now().date().strftime("%Y%m%dT")) - write(value.strftime("%H:%M:%S")) - write("</dateTime.iso8601></value>\n") - dispatch[datetime.time] = dump_time - def dump_instance(self, value, write): # check for special wrappers if value.__class__ in WRAPPERS: |