# KInterbasDB Python Package - Type Conv : DateTime/Minimal
#
# 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   <alexan@users.sourceforge.net>
# [Maintainers (after version 2.0-0.3.1):]
#   2001-2002 [maz]   Marek Isalski         <kinterbasdb@maz.nu>
#   2002-2004 [dsr]   David Rushby          <woodsplitter@rocketmail.com>
# [Contributors:]
#   2001      [eac]   Evgeny A. Cherkashin  <eugeneai@icc.ru>
#   2001-2002 [janez] Janez Jere            <janez.jere@void.si>

__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',
  )

import sys, time, types
from kinterbasdb.k_exceptions import *

if sys.version_info < (2,2):
    from kinterbasdb.typeconv_util_isinstance import isinstance

################################################################################
## DATE AND TIME
################################################################################

# kinterbasdb-native date and time converters:
def date_conv_in(dateObj):
    # Allow implicit param conv from string:
    if dateObj is None or isinstance(dateObj, types.StringType):
        return dateObj

    if not isinstance(dateObj, types.TupleType):
        raise InterfaceError(
            'Cannot convert object of type %s to native kinterbasdb tuple.'
            % str(type(dateObj))
          )
    return dateObj

def date_conv_out(dateTuple):
    return dateTuple


def time_conv_in(timeObj):
    # Allow implicit param conv from string:
    if timeObj is None or isinstance(timeObj, types.StringType):
        return timeObj

    if not isinstance(timeObj, types.TupleType):
        raise InterfaceError(
            'Cannot convert object of type %s to native kinterbasdb tuple.'
            % str(type(timeObj))
          )
    return timeObj

def time_conv_out(timeTuple):
    return timeTuple


def timestamp_conv_in(timestampObj):
    # Allow implicit param conv from string:
    if timestampObj is None or isinstance(timestampObj, types.StringType):
        return timestampObj

    if not isinstance(timestampObj, types.TupleType):
        raise InterfaceError(
            'Cannot convert object of type %s to native kinterbasdb tuple.'
            % str(type(timestampObj))
          )

    return timestampObj

def timestamp_conv_out(timestampTuple):
    return timestampTuple


# DB API 2.0 standard date and time type constructors:
def Date(year, month, day):
    return (year, month, day)

def Time(hour, minute, second):
    return (hour, minute, second)

def Timestamp(year, month, day, hour, minute, second):
    return (year, month, day, hour, minute, second)

def DateFromTicks(ticks):
    return time.localtime(ticks)[:3]

def TimeFromTicks(ticks):
    return time.localtime(ticks)[3:6]

def TimestampFromTicks(ticks):
    return time.localtime(ticks)[:6]
