diff options
Diffstat (limited to 'Lib/xmlrpclib.py')
-rw-r--r-- | Lib/xmlrpclib.py | 74 |
1 files changed, 48 insertions, 26 deletions
diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index da96420..2e68a1b 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -298,13 +298,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, (tuple, time.struct_time)): if value == 0: value = time.time() @@ -312,15 +305,57 @@ class DateTime: value = time.strftime("%Y%m%dT%H:%M:%S", value) self.value = value - def __eq__(self, other): + def make_comparable(self, other): if isinstance(other, DateTime): - other = other.value - return 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): - if isinstance(other, DateTime): - other = other.value - return self.value != 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. @@ -669,19 +704,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: |