Source code for sqlobject.tests.test_datetime

fromdatetimeimport datetime, date, time
importpytest
fromsqlobjectimport SQLObject
fromsqlobjectimport col
fromsqlobject.colimport DateCol, DateTimeCol, TimeCol, use_microseconds, \
 DATETIME_IMPLEMENTATION, MXDATETIME_IMPLEMENTATION, mxdatetime_available, \
 ZOPE_DATETIME_IMPLEMENTATION, zope_datetime_available
fromsqlobject.tests.dbtestimport getConnection, setupClass
fromsqlobject.convertersimport pendulumDateTimeType
########################################
# Date/time columns
########################################
col.default_datetime_implementation = DATETIME_IMPLEMENTATION
[docs] classDateTime1(SQLObject): col1 = DateTimeCol() col2 = DateCol() col3 = TimeCol()
[docs] deftest_dateTime(): setupClass(DateTime1) _now = datetime.now().replace(microsecond=0) dt1 = DateTime1(col1=_now, col2=_now, col3=_now.time()) assert isinstance(dt1.col1, datetime) assert dt1.col1.year == _now.year assert dt1.col1.month == _now.month 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 isinstance(dt1.col2, date) assert not isinstance(dt1.col2, datetime) assert dt1.col2.year == _now.year assert dt1.col2.month == _now.month assert dt1.col2.day == _now.day assert isinstance(dt1.col3, time) assert dt1.col3.hour == _now.hour assert dt1.col3.minute == _now.minute assert dt1.col3.second == _now.second
[docs] deftest_microseconds(): connection = getConnection() if not hasattr(connection, 'can_use_microseconds') or \ not connection.can_use_microseconds(): pytest.skip( "The database doesn't support microseconds; " "microseconds are supported by MariaDB since version 5.3.0, " "by MySQL since version 5.6.4, " "by MSSQL since MS SQL Server 2008.") setupClass(DateTime1) _now = datetime.now() dt1 = DateTime1(col1=_now, col2=_now, col3=_now.time()) assert dt1.col1.microsecond == _now.microsecond assert dt1.col3.microsecond == _now.microsecond use_microseconds(False) setupClass(DateTime1) _now = datetime.now() dt1 = DateTime1(col1=_now, col2=_now, col3=_now.time()) assert dt1.col1.microsecond == 0 assert dt1.col3.microsecond == 0 use_microseconds(True) setupClass(DateTime1) _now = datetime.now() dt1 = DateTime1(col1=_now, col2=_now, col3=_now.time()) assert dt1.col1.microsecond == _now.microsecond assert dt1.col3.microsecond == _now.microsecond
if mxdatetime_available: col.default_datetime_implementation = MXDATETIME_IMPLEMENTATION frommx.DateTimeimport now as mx_now, Time as mxTime dateFormat = None # use default try: connection = getConnection() except AttributeError: # The module was imported during documentation building pass else: if connection.dbName == "sqlite": # mxDateTime sends and sqlite3 returns # full date/time for dates dateFormat = "%Y-%m-%d %H:%M:%S.%f" classDateTime2(SQLObject): col1 = DateTimeCol() col2 = DateCol(dateFormat=dateFormat) col3 = TimeCol() deftest_mxDateTime(): setupClass(DateTime2) _now = mx_now() dt2 = DateTime2(col1=_now, col2=_now.pydate(), col3=mxTime(_now.hour, _now.minute, _now.second)) assert isinstance(dt2.col1, col.mxDateTimeType) assert dt2.col1.year == _now.year assert dt2.col1.month == _now.month assert dt2.col1.day == _now.day assert dt2.col1.hour == _now.hour assert dt2.col1.minute == _now.minute assert dt2.col1.second == int(_now.second) assert isinstance(dt2.col2, col.mxDateTimeType) assert dt2.col2.year == _now.year assert dt2.col2.month == _now.month assert dt2.col2.day == _now.day assert dt2.col2.hour == 0 assert dt2.col2.minute == 0 assert dt2.col2.second == 0 assert isinstance(dt2.col3, (col.mxDateTimeType, col.mxTimeType)) assert dt2.col3.hour == _now.hour assert dt2.col3.minute == _now.minute assert dt2.col3.second == int(_now.second) if pendulumDateTimeType: col.default_datetime_implementation = DATETIME_IMPLEMENTATION importpendulum classDateTimePendulum(SQLObject): col1 = DateTimeCol() deftest_PendulumDateTime(): setupClass(DateTimePendulum) _now = pendulum.now() dtp = DateTimePendulum(col1=_now) assert isinstance(dtp.col1, datetime) assert dtp.col1.year == _now.year assert dtp.col1.month == _now.month assert dtp.col1.day == _now.day assert dtp.col1.hour == _now.hour assert dtp.col1.minute == _now.minute assert int(dtp.col1.second) == int(_now.second) if zope_datetime_available: col.default_datetime_implementation = ZOPE_DATETIME_IMPLEMENTATION fromDateTimeimport DateTime as zopeDateTime classDateTime3(SQLObject): col1 = DateTimeCol() deftest_ZopeDateTime(): setupClass(DateTime3) _now = zopeDateTime() dt3 = DateTime3(col1=_now) assert isinstance(dt3.col1, col.zopeDateTimeType) assert dt3.col1.year() == _now.year() assert dt3.col1.month() == _now.month() assert dt3.col1.day() == _now.day() assert dt3.col1.hour() == _now.hour() assert dt3.col1.minute() == _now.minute() assert int(dt3.col1.second()) == int(_now.second())