File: typeconv_datetime_stdlib.py

package info (click to toggle)
python-kinterbasdb 3.1-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,044 kB
  • ctags: 1,157
  • sloc: ansic: 6,879; python: 2,517; makefile: 77
file content (111 lines) | stat: -rw-r--r-- 3,603 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 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   <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',
  )

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)