Author: phd
Date: Sun May 4 12:58:20 2014
New Revision: 4721
Log:
Read microseconds for forward compatibility but do not write them
Modified:
SQLObject/branches/1.7/docs/News.txt
SQLObject/branches/1.7/sqlobject/converters.py
SQLObject/branches/1.7/sqlobject/tests/test_converters.py
SQLObject/branches/1.7/sqlobject/tests/test_datetime.py
Modified: SQLObject/branches/1.7/docs/News.txt
==============================================================================
--- SQLObject/branches/1.7/docs/News.txt Sun May 4 11:33:58 2014 (r4720)
+++ SQLObject/branches/1.7/docs/News.txt Sun May 4 12:58:20 2014 (r4721)
@@ -10,6 +10,9 @@
SQLObject 1.7.0
===============
+* DateTimeCol and TimeCol can read values with microseconds (created by
+ SQLObject 2.0).
+
SQLObject 1.6.0
===============
@@ -19,14 +22,6 @@
* Python 2.4 is no longer supported. The minimal supported version is
Python 2.5.
-* DateTimeCol and TimeCol preserve microseconds. The feature requires
- Python 2.6+ because in Python 2.5 datetime.strptime doesn't support
- '%f' format.
-
- WARNING: backward compatibility problem! Date/Time columns created
- with microseconds cannot be read back with older versions of
- SQLObject.
-
* Upgrade ez_setup to 1.4.2.
* A bugfix was ported from `SQLObject 1.5.2`_.
Modified: SQLObject/branches/1.7/sqlobject/converters.py
==============================================================================
--- SQLObject/branches/1.7/sqlobject/converters.py Sun May 4 11:33:58 2014 (r4720)
+++ SQLObject/branches/1.7/sqlobject/converters.py Sun May 4 12:58:20 2014 (r4721)
@@ -7,11 +7,16 @@
try:
+ import mx.DateTime.ISO
+ origISOStr = mx.DateTime.ISO.strGMT
from mx.DateTime import DateTimeType, DateTimeDeltaType
except ImportError:
try:
+ import DateTime.ISO
+ origISOStr = DateTime.ISO.strGMT
from DateTime import DateTimeType, DateTimeDeltaType
except ImportError:
+ origISOStr = None
DateTimeType = None
DateTimeDeltaType = None
@@ -36,6 +41,17 @@
('\t', '\\t'),
]
+def isoStr(val):
+ """
+ Gets rid of time zone information
+ (@@: should we convert to GMT?)
+ """
+ val = origISOStr(val)
+ if val.find('+') == -1:
+ return val
+ else:
+ return val[:val.find('+')]
+
class ConverterRegistry:
def __init__(self):
@@ -117,12 +133,12 @@
if DateTimeType:
def DateTimeConverter(value, db):
- return "'%s'" % value.strftime("%Y-%m-%d %H:%M:%S.%s")
+ return "'%s'" % isoStr(value)
registerConverter(DateTimeType, DateTimeConverter)
def TimeConverter(value, db):
- return "'%s'" % value.strftime("%H:%M:%S")
+ return "'%s'" % value.strftime("%T")
registerConverter(DateTimeDeltaType, TimeConverter)
@@ -151,9 +167,9 @@
registerConverter(time.struct_time, StructTimeConverter)
def DateTimeConverter(value, db):
- return "'%04d-%02d-%02d %02d:%02d:%02d.%d'" % (
+ return "'%04d-%02d-%02d %02d:%02d:%02d'" % (
value.year, value.month, value.day,
- value.hour, value.minute, value.second, value.microsecond)
+ value.hour, value.minute, value.second)
registerConverter(datetime.datetime, DateTimeConverter)
@@ -163,7 +179,7 @@
registerConverter(datetime.date, DateConverter)
def TimeConverter(value, db):
- return "'%02d:%02d:%02d.%d'" % (value.hour, value.minute, value.second, value.microsecond)
+ return "'%02d:%02d:%02d'" % (value.hour, value.minute, value.second)
registerConverter(datetime.time, TimeConverter)
Modified: SQLObject/branches/1.7/sqlobject/tests/test_converters.py
==============================================================================
--- SQLObject/branches/1.7/sqlobject/tests/test_converters.py Sun May 4 11:33:58 2014 (r4720)
+++ SQLObject/branches/1.7/sqlobject/tests/test_converters.py Sun May 4 12:58:20 2014 (r4721)
@@ -88,11 +88,11 @@
def test_datetime():
from datetime import datetime, date, time
- assert sqlrepr(datetime(2005, 7, 14, 13, 31, 2)) == "'2005-07-14 13:31:02.0'"
+ assert sqlrepr(datetime(2005, 7, 14, 13, 31, 2)) == "'2005-07-14 13:31:02'"
assert sqlrepr(date(2005, 7, 14)) == "'2005-07-14'"
- assert sqlrepr(time(13, 31, 2)) == "'13:31:02.0'"
+ assert sqlrepr(time(13, 31, 2)) == "'13:31:02'"
# now dates before 1900
- assert sqlrepr(datetime(1428, 7, 14, 13, 31, 2)) == "'1428-07-14 13:31:02.0'"
+ assert sqlrepr(datetime(1428, 7, 14, 13, 31, 2)) == "'1428-07-14 13:31:02'"
assert sqlrepr(date(1428, 7, 14)) == "'1428-07-14'"
def test_instance():
Modified: SQLObject/branches/1.7/sqlobject/tests/test_datetime.py
==============================================================================
--- SQLObject/branches/1.7/sqlobject/tests/test_datetime.py Sun May 4 11:33:58 2014 (r4720)
+++ SQLObject/branches/1.7/sqlobject/tests/test_datetime.py Sun May 4 12:58:20 2014 (r4721)
@@ -25,8 +25,7 @@
assert dt1.col1.day == _now.day
assert dt1.col1.hour == _now.hour
assert dt1.col1.minute == _now.minute
- assert dt1.col1.second == _now.second
- assert dt1.col1.microsecond == _now.microsecond
+ assert dt1.col1.second == int(_now.second)
assert isinstance(dt1.col2, date)
assert not isinstance(dt1.col2, datetime)
@@ -37,8 +36,7 @@
assert isinstance(dt1.col3, time)
assert dt1.col3.hour == _now.hour
assert dt1.col3.minute == _now.minute
- assert dt1.col3.second == _now.second
- assert dt1.col3.microsecond == _now.microsecond
+ assert dt1.col3.second == int(_now.second)
if mxdatetime_available:
col.default_datetime_implementation = MXDATETIME_IMPLEMENTATION
@@ -49,7 +47,7 @@
if connection.dbName == "sqlite":
if connection.using_sqlite2:
# mxDateTime sends and PySQLite2 returns full date/time for dates
- dateFormat = "%Y-%m-%d %H:%M:%S.%f"
+ dateFormat = "%Y-%m-%d %H:%M:%S"
class DateTime2(SQLObject):
col1 = DateTimeCol()
@@ -59,7 +57,7 @@
def test_mxDateTime():
setupClass(DateTime2)
_now = now()
- dt2 = DateTime2(col1=_now, col2=_now, col3=Time(_now.hour, _now.minute, _now.second))
+ dt2 = DateTime2(col1=_now, col2=_now, col3=Time(_now.hour, _now.minute, int(_now.second)))
assert isinstance(dt2.col1, col.DateTimeType)
assert dt2.col1.year == _now.year
|