[CalendarServer-changes] [5184] CalendarServer/trunk/twext/python/datetime.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Feb 22 21:23:21 PST 2010


Revision: 5184
          http://trac.macosforge.org/projects/calendarserver/changeset/5184
Author:   wsanchez at apple.com
Date:     2010-02-22 21:23:17 -0800 (Mon, 22 Feb 2010)
Log Message:
-----------
TimeRange now also takes dates and datetimes

Modified Paths:
--------------
    CalendarServer/trunk/twext/python/datetime.py

Modified: CalendarServer/trunk/twext/python/datetime.py
===================================================================
--- CalendarServer/trunk/twext/python/datetime.py	2010-02-23 03:45:07 UTC (rev 5183)
+++ CalendarServer/trunk/twext/python/datetime.py	2010-02-23 05:23:17 UTC (rev 5184)
@@ -29,20 +29,23 @@
 
 
 class dateordatetime(object):
-    def __init__(self, dateOrDateTime, defaultTZ=None):
+    def __init__(self, dateOrDatetime, defaultTZ=None):
         """
-        @param dateOrDateTime: a L{date} or L{datetime}.
+        @param dateOrDatetime: a L{date} or L{datetime}.
         """
-        self._dateOrDateTime = dateOrDateTime
-        if isinstance(dateOrDateTime, datetime):
-            self._isDateTime = True
+        self._dateOrDatetime = dateOrDatetime
+        if isinstance(dateOrDatetime, datetime):
+            self._isDatetime = True
         else:
-            self._isDateTime = False
+            self._isDatetime = False
         self.defaultTZ = defaultTZ
 
-    def _comparableDateTimes(self, other):
-        dt1, dt2 = self.dateTime, other.dateTime
+    def _comparableDatetimes(self, other):
+        if not isinstance(other, dateordatetime):
+            other = dateordatetime(other)
 
+        dt1, dt2 = self.datetime(), other.datetime()
+
         def getTZInfo(tz):
             for defaultTZ in (self.defaultTZ, other.defaultTZ):
                 if defaultTZ is not None:
@@ -57,7 +60,7 @@
         return dt1, dt2
 
     def __cmp__(self, other):
-        dt1, dt2 = self._comparableDateTimes(other)
+        dt1, dt2 = self._comparableDatetimes(other)
 
         if dt1 == dt2:
             return 0
@@ -67,31 +70,34 @@
             return 1
 
     def __sub__(self, other):
-        dt1, dt2 = self._comparableDateTimes(other)
+        dt1, dt2 = self._comparableDatetimes(other)
         return dt1 - dt2
 
     def date(self):
-        if self._isDateTime:
-            return self._dateOrDateTime.date()
+        if self._isDatetime:
+            return self._dateOrDatetime.date()
         else:
-            return self._dateOrDateTime
+            return self._dateOrDatetime
 
     def datetime(self):
-        if self._isDateTime:
-            return self._dateOrDateTime
+        if self._isDatetime:
+            return self._dateOrDatetime
         else:
-            d = self._dateOrDateTime
+            d = self._dateOrDatetime
             return datetime(d.year, d.month, d.day, tzinfo=self.defaultTZ)
 
+    def dateOrDatetime(self):
+        return self._dateOrDatetime
+
     def iCalendarString(self):
-        if self._isDateTime:
-            return dateTimeToString(self._dateOrDateTime)
+        if self._isDatetime:
+            return dateTimeToString(self._dateOrDatetime)
         else:
-            return dateToString(self._dateOrDateTime)
+            return dateToString(self._dateOrDatetime)
 
     def asTimeZone(self, tzinfo):
-        if self._isDateTime:
-            d = self._dateOrDateTime
+        if self._isDatetime:
+            d = self._dateOrDatetime
             if d.tzinfo is None:
                 return self
             else:
@@ -100,22 +106,30 @@
             return self
 
     def asUTC(self):
-        return self.asTimeZone(self, utc)
+        return self.asTimeZone(utc)
 
 
 class timerange(object):
     def __init__(self, start=None, end=None, duration=None):
         """
-        @param start: a L{dateordatetime}
-        @param end: a L{dateordatetime}
-        @param duration: a L{timedelta}
+        @param start: a L{dateordatetime}, L{date} or L{datetime}
+        @param end: a L{dateordatetime}, L{date} or L{datetime}
+        @param duration: a L{timedelta}, L{date} or L{datetime}
         @param tzinfo: a L{tzinfo}
         """
         assert end is None or duration is None
 
-        self._start = start
+        if isinstance(start, dateordatetime):
+            self._start = start
+        else:
+            self._start = dateordatetime(start)
+
         if end is not None:
-            self._end = end
+            if isinstance(end, dateordatetime):
+                self._end = end
+            else:
+                self._end = dateordatetime(end)
+
         if duration is not None:
             self._duration = duration
 
@@ -129,7 +143,7 @@
             if start is None or duration is None:
                 self._end = None
             else:
-                self._end = self._start + self._duration
+                self._end = dateordatetime(self._start.dateOrDatetime() + self._duration)
         return self._end
 
     def duration(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100222/5ac4895d/attachment.html>


More information about the calendarserver-changes mailing list