# KInterbasDB Python Package - Type Conv : DateTime/Python 2.3+ Standard Library # # Version 3.1 # # The following contributors hold Copyright (C) over their respective # portions of code (see license.txt for details): # # [Original Author (maintained through version 2.0-0.3.1):] # 1998-2001 [alex] Alexander Kuznetsov # [Maintainers (after version 2.0-0.3.1):] # 2001-2002 [maz] Marek Isalski # 2002-2004 [dsr] David Rushby # [Contributors:] # 2001 [eac] Evgeny A. Cherkashin # 2001-2002 [janez] Janez Jere __all__ = ( # kinterbasdb-native date and time converters: 'date_conv_in', 'date_conv_out', 'time_conv_in', 'time_conv_out', 'timestamp_conv_in', 'timestamp_conv_out', # DB API 2.0 standard date and time type constructors: 'Date', 'Time', 'Timestamp', 'DateFromTicks', 'TimeFromTicks', 'TimestampFromTicks', ) from kinterbasdb.k_exceptions import * # THIS CONVERSION MODULE IS NOT EXPECTED TO WORK WITH < PYTHON 2.3, # since it uses the standard datetime module for its date/time operations. import datetime as dt ################################################################################ ## DATE AND TIME ################################################################################ # kinterbasdb-native date and time converters: def date_conv_in(dtObj): # Allow implicit param conv: if dtObj is None or isinstance(dtObj, str): return dtObj if not isinstance(dtObj, dt.date): raise InterfaceError( 'Required type: %s ; supplied type: %s' % ( str(dt.date), str(type(dtObj)) ) ) return dtObj.timetuple()[:3] def date_conv_out(dateTuple): if dateTuple is None: return None return dt.date(*dateTuple) def time_conv_in(tmObj): # Allow implicit param conv: if tmObj is None or isinstance(tmObj, str): return tmObj if not isinstance(tmObj, dt.time): raise InterfaceError( 'Required type: %s ; supplied type: %s' % ( str(dt.time), str(type(tmObj)) ) ) timeTuple = (tmObj.hour, tmObj.minute, tmObj.second) return timeTuple def time_conv_out(timeTuple): if timeTuple is None: return None return dt.time(*timeTuple) def timestamp_conv_in(tsObj): # Allow implicit param conv: if tsObj is None or isinstance(tsObj, str): return tsObj if not isinstance(tsObj, dt.datetime): raise InterfaceError( 'Required type: %s ; supplied type: %s' % ( str(dt.datetime), str(type(tsObj)) ) ) timestampTuple = tsObj.timetuple()[:6] return timestampTuple def timestamp_conv_out(timestampTuple): if timestampTuple is None: return None return dt.datetime(*timestampTuple) # DB API 2.0 standard date and time type constructors: def _makeFilteredConstructor(underlyingConstructor): def Constructor(*args, **kwargs): try: return underlyingConstructor(*args, **kwargs) except ValueError, e: raise DataError(str(e)) return Constructor Date = _makeFilteredConstructor(dt.date) Time = _makeFilteredConstructor(dt.time) Timestamp = _makeFilteredConstructor(dt.datetime) DateFromTicks = _makeFilteredConstructor(dt.date.fromtimestamp) TimeFromTicks = _makeFilteredConstructor(lambda ticks: TimestampFromTicks(ticks).time()) TimestampFromTicks = _makeFilteredConstructor(dt.datetime.fromtimestamp)