Author: phd
Date: 2010-01-15 09:11:54 -0700 (Fri, 15 Jan 2010)
New Revision: 4088
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/converters.py
SQLObject/trunk/sqlobject/tests/test_converters.py
Log:
Added TimedeltaCol; currently it's only implemented on PostgreSQL as an INTERVAL type.
Modified: SQLObject/trunk/docs/News.txt
===================================================================
--- SQLObject/trunk/docs/News.txt 2010-01-08 21:26:15 UTC (rev 4087)
+++ SQLObject/trunk/docs/News.txt 2010-01-15 16:11:54 UTC (rev 4088)
@@ -10,6 +10,12 @@
SQLObject (trunk)
=================
+Features & Interface
+--------------------
+
+* Added TimedeltaCol; currently it's only implemented on PostgreSQL as an
+ INTERVAL type.
+
SQLObject 0.12.1
================
Modified: SQLObject/trunk/sqlobject/col.py
===================================================================
--- SQLObject/trunk/sqlobject/col.py 2010-01-08 21:26:15 UTC (rev 4087)
+++ SQLObject/trunk/sqlobject/col.py 2010-01-15 16:11:54 UTC (rev 4088)
@@ -1283,6 +1283,25 @@
baseClass = SOTimestampCol
+class TimedeltaValidator(validators.Validator):
+ def to_python(self, value, state):
+ return value
+
+ def from_python(self, value, state):
+ return value
+
+class SOTimedeltaCol(SOCol):
+ def _postgresType(self):
+ return 'INTERVAL'
+
+ def createValidators(self):
+ return [TimedeltaValidator(name=self.name)] + \
+ super(SOTimedeltaCol, self).createValidators()
+
+class TimedeltaCol(Col):
+ baseClass = SOTimedeltaCol
+
+
from decimal import Decimal
class DecimalValidator(validators.Validator):
Modified: SQLObject/trunk/sqlobject/converters.py
===================================================================
--- SQLObject/trunk/sqlobject/converters.py 2010-01-08 21:26:15 UTC (rev 4087)
+++ SQLObject/trunk/sqlobject/converters.py 2010-01-15 16:11:54 UTC (rev 4088)
@@ -187,6 +187,14 @@
registerConverter(Decimal, DecimalConverter)
+def TimedeltaConverter(value, db):
+
+ return """INTERVAL '%d days %d seconds'""" % \
+ (value.days, value.seconds)
+
+registerConverter(datetime.timedelta, TimedeltaConverter)
+
+
def sqlrepr(obj, db=None):
try:
reprFunc = obj.__sqlrepr__
Modified: SQLObject/trunk/sqlobject/tests/test_converters.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_converters.py 2010-01-08 21:26:15 UTC (rev 4087)
+++ SQLObject/trunk/sqlobject/tests/test_converters.py 2010-01-15 16:11:54 UTC (rev 4088)
@@ -1,4 +1,5 @@
import sys
+from datetime import timedelta
from sqlobject.sqlbuilder import sqlrepr
from sqlobject.sqlbuilder import SQLExpression, SQLObjectField, \
Select, Insert, Update, Delete, Replace, \
@@ -195,3 +196,7 @@
pass
else:
assert sqlrepr(Set([1])) == "(1)"
+
+def test_timedelta():
+ assert sqlrepr(timedelta(seconds=30*60)) == \
+ "INTERVAL '0 days 1800 seconds'"
|