[Debconf-video-commits] r370 - package/branches/pycon09/src/debconfvideo/web/pyconvideo

benh at alioth.debian.org benh at alioth.debian.org
Sat Mar 21 19:09:51 UTC 2009


Author: benh
Date: 2009-03-21 19:09:50 +0000 (Sat, 21 Mar 2009)
New Revision: 370

Modified:
   package/branches/pycon09/src/debconfvideo/web/pyconvideo/models.py
Log:
Add control of precision to IntervalField; we do not store sub-second precision for most relative times.
Remove redundant IntervalField.get_db_prep_value.


Modified: package/branches/pycon09/src/debconfvideo/web/pyconvideo/models.py
===================================================================
--- package/branches/pycon09/src/debconfvideo/web/pyconvideo/models.py	2009-03-21 18:37:06 UTC (rev 369)
+++ package/branches/pycon09/src/debconfvideo/web/pyconvideo/models.py	2009-03-21 19:09:50 UTC (rev 370)
@@ -5,23 +5,25 @@
 import mx.DateTime
 import debconfvideo
 
-def hms_to_seconds(hms):
-    parts = hms.split(':')
-    if len(parts) > 3:
-        raise ValueError()
-    hours, minutes, seconds = (3 - len(parts)) * [0] + parts
-    return (int(hours) * 60 + int(minutes)) * 60 + float(seconds)
-
 class IntervalField(models.CharField):
-    def __init__(self, *args, **kwargs):
+    __metaclass__ = models.SubfieldBase
+    def __init__(self, precision=0, **kwargs):
+        self.__precision = precision
         kwargs['max_length'] = 12
-        super(IntervalField, self).__init__(*args, **kwargs)
+        super(IntervalField, self).__init__(**kwargs)
     def db_type(self):
         return 'INTERVAL'
     def to_python(self, value):
-        return value
-    def get_db_prep_value(self, value):
-        return '%g SECONDS' % hms_to_seconds(value)
+        if isinstance(value, mx.DateTime.DateTimeDeltaType):
+            days, hours, minutes, seconds = value.tuple()
+            return '%02d:%02d:%0*.*f' \
+                % (24 * days + hours,
+                   minutes,
+                   self.__precision and (3 + self.__precision) or 2,
+                   self.__precision,
+                   seconds)
+        else:
+            return value
 
 class Conference(models.Model):
     conference_id = models.AutoField(primary_key=True)
@@ -93,8 +95,8 @@
     id = models.AutoField(primary_key=True)
     event = models.ForeignKey(Event)
     recording = models.ForeignKey(VideoRecording)
-    start_time = IntervalField()
-    end_time = IntervalField()
+    start_time = IntervalField(precision=2)
+    end_time = IntervalField(precision=2)
     event_recording_base_name = \
         models.SlugField(max_length=150, unique=True,
                          verbose_name='base name for target files')




More information about the Debconf-video-commits mailing list