home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import string
- import exceptions
- import time
- import calendar
- import types
- import sys
- import traceback
- import datetime
-
- try:
- import decimal
- except ImportError:
- import win32com.decimal_23 as decimal
-
-
- try:
- import win32com.client as win32com
-
- def Dispatch(dispatch):
- return win32com.client.Dispatch(dispatch)
-
- win32 = True
- except ImportError:
- from System import Activator, Type
-
- def Dispatch(dispatch):
- type = Type.GetTypeFromProgID(dispatch)
- return Activator.CreateInstance(type)
-
- win32 = False
-
- if win32:
- import pythoncom
- pythoncom.__future_currency__ = True
-
-
- def standardErrorHandler(connection, cursor, errorclass, errorvalue):
- err = (errorclass, errorvalue)
- connection.messages.append(err)
- if cursor != None:
- cursor.messages.append(err)
-
- raise errorclass(errorvalue)
-
-
- class TimeConverter:
-
- def __init__(self):
- self.types = (type(self.Date(2000, 1, 1)), type(self.Time(12, 1, 1)), type(self.Timestamp(2000, 1, 1, 12, 1, 1)))
-
-
- def COMDate(self, obj):
- raise 'Abstract class'
-
-
- def DateObjectFromCOMDate(self, comDate):
- raise 'Abstract class'
-
-
- def Date(self, year, month, day):
- raise 'Abstract class'
-
-
- def Time(self, hour, minute, second):
- raise 'Abstract class'
-
-
- def Timestamp(self, year, month, day, hour, minute, second):
- raise 'Abstract class'
-
-
- def DateObjectToIsoFormatString(self, obj):
- raise 'Abstract class'
-
-
-
- class mxDateTimeConverter(TimeConverter):
-
- def COMDate(self, obj):
- return obj.COMDate()
-
-
- def DateObjectFromCOMDate(self, comDate):
- return mx.DateTime.DateTimeFromCOMDate(comDate)
-
-
- def Date(self, year, month, day):
- return mx.DateTime.Date(year, month, day)
-
-
- def Time(self, hour, minute, second):
- return mx.DateTime.Time(hour, minute, second)
-
-
- def Timestamp(self, year, month, day, hour, minute, second):
- return mx.DateTime.Timestamp(year, month, day, hour, minute, second)
-
-
- def DateObjectToIsoFormatString(self, obj):
- return obj.Format('%Y-%m-%d %H:%M:%S')
-
-
-
- class pythonDateTimeConverter(TimeConverter):
-
- def __init__(self):
- self._ordinal_1899_12_31 = datetime.date(1899, 12, 31).toordinal() - 1
- TimeConverter.__init__(self)
-
-
- def COMDate(self, obj):
- tt = obj.timetuple()
-
- try:
- ms = obj.microsecond
- except:
- ms = 0
-
- YMDHMSmsTuple = tuple(tt[:6] + (ms,))
- return self.COMDateFromTuple(YMDHMSmsTuple)
-
-
- def DateObjectFromCOMDate(self, comDate):
- fComDate = float(comDate)
- millisecondsperday = 86400000
- integerPart = int(fComDate)
- floatpart = fComDate - integerPart
- if floatpart == 0:
- return datetime.date.fromordinal(integerPart + self._ordinal_1899_12_31)
- dte = datetime.datetime.fromordinal(integerPart + self._ordinal_1899_12_31)
- dte = dte + datetime.timedelta(milliseconds = floatpart * millisecondsperday)
- return dte
-
-
- def Date(self, year, month, day):
- return datetime.date(year, month, day)
-
-
- def Time(self, hour, minute, second):
- return datetime.time(hour, minute, second)
-
-
- def Timestamp(self, year, month, day, hour, minute, second):
- return datetime.datetime(year, month, day, hour, minute, second)
-
-
- def COMDateFromTuple(self, YMDHMSmsTuple):
- t = pythoncom.MakeTime(YMDHMSmsTuple)
- return float(t)
-
-
- def DateObjectToIsoFormatString(self, obj):
- if isinstance(obj, datetime.datetime):
- s = obj.strftime('%Y-%m-%d %H:%M:%S')
- else:
-
- try:
- s = obj.isoformat()
- except:
- s = obj.Format('%Y-%m-%d %H:%M:%S')
-
- return s
-
-
-
- class pythonTimeConverter(TimeConverter):
-
- def __init__(self):
- (year, month, day, hour, minute, second, weekday, julianday, daylightsaving) = time.gmtime(0)
- self.com1970 = self.COMDateFromTuple((year, month, day, hour, minute, second))
- daysInMonth = [
- 31,
- 28,
- 31,
- 30,
- 31,
- 30,
- 31,
- 30,
- 31,
- 30,
- 31,
- 30]
- cumulative = 0
- self.monthCumDays = { }
- for i in range(12):
- self.monthCumDays[i + 1] = cumulative
- cumulative += daysInMonth[i]
-
- TimeConverter.__init__(self)
-
-
- def COMDate(self, timeobj):
- return float(pythoncom.MakeTime(time.mktime(timeobj)))
-
-
- def COMDateFromTuple(self, YMDHMSmsTuple):
- t = pythoncom.MakeTime(YMDHMSmsTuple)
- return float(t)
-
-
- def DateObjectFromCOMDate(self, comDate):
- secondsperday = 86400
- t = time.gmtime(secondsperday * (float(comDate) - self.com1970))
- return t
-
-
- def Date(self, year, month, day):
- return self.Timestamp(year, month, day, 0, 0, 0)
-
-
- def Time(self, hour, minute, second):
- return time.gmtime((hour * 60 + minute) * 60 + second)
-
-
- def Timestamp(self, year, month, day, hour, minute, second):
- julian = self.monthCumDays[month] + day
- if month > 2:
- julian += calendar.isleap(year)
-
- weekday = calendar.weekday(year, month, day)
- daylightsaving = -1
- return time.localtime(time.mktime((year, month, day, hour, minute, second, weekday, julian, daylightsaving)))
-
-
- def DateObjectToIsoFormatString(self, obj):
-
- try:
- s = time.strftime('%Y-%m-%d %H:%M:%S', obj)
- except:
- s = obj.strftime('%Y-%m-%d')
-
- return s
-
-
-
- class Error(exceptions.StandardError):
- pass
-
-
- class Warning(exceptions.StandardError):
- pass
-
-
- class InterfaceError(Error):
- pass
-
-
- class DatabaseError(Error):
- pass
-
-
- class InternalError(DatabaseError):
- pass
-
-
- class OperationalError(DatabaseError):
- pass
-
-
- class ProgrammingError(DatabaseError):
- pass
-
-
- class IntegrityError(DatabaseError):
- pass
-
-
- class DataError(DatabaseError):
- pass
-
-
- class NotSupportedError(DatabaseError):
- pass
-
- verbose = False
- version = __doc__.split('-', 2)[0]
-
- def connect(connstr, timeout = 30):
-
- try:
- conn = Dispatch('ADODB.Connection')
- if win32:
- pythoncom.CoInitialize()
- except:
- raise InterfaceError
-
-
- try:
- conn.CommandTimeout = timeout
- conn.ConnectionString = connstr
- except:
- raise Error
-
- if verbose:
- print '%s attempting: "%s"' % (version, connstr)
-
-
- try:
- conn.Open()
- except Exception:
- e = None
- raise DatabaseError(e)
-
- return Connection(conn)
-
- apilevel = '2.0'
- threadsafety = 1
- paramstyle = 'qmark'
- adXactBrowse = 256
- adXactChaos = 16
- adXactCursorStability = 4096
- adXactIsolated = 1048576
- adXactReadCommitted = 4096
- adXactReadUncommitted = 256
- adXactRepeatableRead = 65536
- adXactSerializable = 1048576
- defaultIsolationLevel = adXactReadCommitted
- adUseClient = 3
- adUseServer = 2
- defaultCursorLocation = adUseServer
-
- class Connection:
-
- def __init__(self, adoConn):
- self.adoConn = adoConn
- self.supportsTransactions = False
- for indx in range(adoConn.Properties.Count):
- if adoConn.Properties(indx).Name == 'Transaction DDL' and adoConn.Properties(indx).Value != 0:
- self.supportsTransactions = True
- continue
-
- self.adoConn.CursorLocation = defaultCursorLocation
- if self.supportsTransactions:
- self.adoConn.IsolationLevel = defaultIsolationLevel
- self.adoConn.BeginTrans()
-
- self.errorhandler = None
- self.messages = []
- if verbose:
- print 'adodbapi New connection at %X' % id(self)
-
-
-
- def _raiseConnectionError(self, errorclass, errorvalue):
- eh = self.errorhandler
- if eh == None:
- eh = standardErrorHandler
-
- eh(self, None, errorclass, errorvalue)
-
-
- def _closeAdoConnection(self):
- if self.supportsTransactions:
- self.adoConn.RollbackTrans()
-
- self.adoConn.Close()
- if verbose:
- print 'adodbapi Closed connection at %X' % id(self)
-
-
-
- def close(self):
- self.messages = []
-
- try:
- self._closeAdoConnection()
- except Exception:
- e = None
- self._raiseConnectionError(InternalError, e)
-
- if win32:
- pythoncom.CoUninitialize()
-
-
-
- def commit(self):
- self.messages = []
-
- try:
- if self.supportsTransactions:
- self.adoConn.CommitTrans()
- if not self.adoConn.Attributes & adXactCommitRetaining:
- self.adoConn.BeginTrans()
-
- except Exception:
- e = None
- self._raiseConnectionError(Error, e)
-
-
-
- def rollback(self):
- self.messages = []
- if self.supportsTransactions:
- self.adoConn.RollbackTrans()
- if not self.adoConn.Attributes & adXactAbortRetaining:
- self.adoConn.BeginTrans()
-
- else:
- self._raiseConnectionError(NotSupportedError, None)
-
-
- def cursor(self):
- self.messages = []
- return Cursor(self)
-
-
- def printADOerrors(self):
- j = self.adoConn.Errors.Count
- print 'ADO Errors:(%i)' % j
- for i in range(j):
- e = self.adoConn.Errors(i)
- print 'Description: %s' % e.Description
- print 'Number: %s ' % e.Number
-
- try:
- print 'Number constant:' % adoErrors[e.Number]
- except:
- pass
-
- print 'Source: %s' % e.Source
- print 'NativeError: %s' % e.NativeError
- print 'SQL State: %s' % e.SQLState
- if e.Number == -2147217871:
- print ' Error means that the Query timed out.\n Try using adodbpi.connect(constr,timeout=Nseconds)'
- continue
-
-
-
- def __del__(self):
-
- try:
- self._closeAdoConnection()
- except:
- pass
-
- self.adoConn = None
-
-
-
- class Cursor:
- description = None
- rowcount = -1
- arraysize = 1
-
- def __init__(self, connection):
- self.messages = []
- self.conn = connection
- self.rs = None
- self.description = None
- self.errorhandler = connection.errorhandler
- if verbose:
- print 'adodbapi New cursor at %X on conn %X' % (id(self), id(self.conn))
-
-
-
- def __iter__(self):
- return iter(self.fetchone, None)
-
-
- def _raiseCursorError(self, errorclass, errorvalue):
- eh = self.errorhandler
- if eh == None:
- eh = standardErrorHandler
-
- eh(self.conn, self, errorclass, errorvalue)
-
-
- def callproc(self, procname, parameters = None):
- self.messages = []
- return self._executeHelper(procname, True, parameters)
-
-
- def _returnADOCommandParameters(self, adoCommand):
- retLst = []
- for i in range(adoCommand.Parameters.Count):
- p = adoCommand.Parameters(i)
- if verbose > 2:
- ('return', p.Name, p.Type, p.Direction, repr(p.Value))
-
- type_code = p.Type
- pyObject = convertVariantToPython(p.Value, type_code)
- if p.Direction == adParamReturnValue:
- self.returnValue = pyObject
- continue
- retLst.append(pyObject)
-
- return retLst
-
-
- def _makeDescriptionFromRS(self, rs):
- if rs == None or rs.State == adStateClosed:
- self.rs = None
- self.description = None
- else:
- self.rowcount = -1
- self.rs = rs
- nOfFields = rs.Fields.Count
- self.description = []
- for i in range(nOfFields):
- f = rs.Fields(i)
- name = f.Name
- type_code = f.Type
- if not rs.EOF or rs.BOF:
- display_size = f.ActualSize
- else:
- display_size = None
- internal_size = f.DefinedSize
- precision = f.Precision
- scale = f.NumericScale
- null_ok = bool(f.Attributes & adFldMayBeNull)
- self.description.append((name, type_code, display_size, internal_size, precision, scale, null_ok))
-
-
-
- def close(self):
- self.messages = []
- self.conn = None
- if self.rs and self.rs.State != adStateClosed:
- self.rs.Close()
- self.rs = None
-
-
-
- def _executeHelper(self, operation, isStoredProcedureCall, parameters = None):
- if self.conn == None:
- self._raiseCursorError(Error, None)
- return None
- returnValueIndex = None
- parmIndx = -1
-
- try:
- self.cmd = Dispatch('ADODB.Command')
- self.cmd.ActiveConnection = self.conn.adoConn
- self.cmd.CommandTimeout = self.conn.adoConn.CommandTimeout
- self.cmd.CommandText = operation
- if isStoredProcedureCall:
- self.cmd.CommandType = adCmdStoredProc
- else:
- self.cmd.CommandType = adCmdText
- returnValueIndex = -1
- if parameters != None:
-
- try:
- self.cmd.Parameters.Refresh()
- defaultParameterList = False
- except:
- if verbose:
- print 'error in COM Refresh(). adodbapi building default parameter list'
-
- defaultParameterList = True
- for i, elem in enumerate(parameters):
- name = 'p%i' % i
- adotype = pyTypeToADOType(elem)
- p = self.cmd.CreateParameter(name, adotype)
- if isStoredProcedureCall:
- p.Direction = adParamUnknown
-
- self.cmd.Parameters.Append(p)
-
-
- if verbose > 2:
- for i in range(self.cmd.Parameters.Count):
- P = self.cmd.Parameters(i)
- print 'adodbapi parameter attributes before=', P.Name, P.Type, P.Direction, P.Size
-
-
- if isStoredProcedureCall:
- cnt = self.cmd.Parameters.Count
- if cnt != len(parameters):
- for i in range(cnt):
- if self.cmd.Parameters(i).Direction == adParamReturnValue:
- returnValueIndex = i
- break
- continue
-
-
-
- for elem in parameters:
- parmIndx += 1
- if parmIndx == returnValueIndex:
- parmIndx += 1
-
- p = self.cmd.Parameters(parmIndx)
- if p.Direction in [
- adParamInput,
- adParamInputOutput,
- adParamUnknown]:
- tp = type(elem)
- if tp in dateconverter.types:
- if not defaultParameterList and p.Type in adoDateTimeTypes:
- p.Value = dateconverter.COMDate(elem)
- else:
- s = dateconverter.DateObjectToIsoFormatString(elem)
- p.Value = s
- p.Size = len(s)
- elif tp in types.StringTypes:
- if defaultParameterList:
- p.Value = elem
- L = len(elem)
- else:
- L = min(len(elem), p.Size)
- p.Value = elem[:L]
- if L > 0:
- p.Size = L
-
- elif tp == types.BufferType:
- p.Size = len(elem)
- p.AppendChunk(elem)
- else:
- p.Value = elem
- if verbose > 2:
- print 'Parameter %d type %d stored as: %s' % (parmIndx, p.Type, repr(p.Value))
-
- verbose > 2
-
-
- parmIndx = -2
- adoRetVal = self.cmd.Execute()
- except Exception:
- None if verbose > 1 and parameters else self.conn == None
- e = None if verbose > 1 and parameters else self.conn == None
- tbk = u'\n--ADODBAPI\n'
- if parmIndx >= 0:
- tbk += u'-- Trying parameter %d = %s\n' % (parmIndx, repr(parameters[parmIndx]))
-
- tblist = traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback, 8)
- tb = string.join(tblist)
- tracebackhistory = tbk + tb + u'-- on command: "%s"\n-- with parameters: %s' % (operation, parameters)
- self._raiseCursorError(DatabaseError, tracebackhistory)
- return None
-
- rs = adoRetVal[0]
- recs = adoRetVal[1]
- self.rowcount = recs
- self._makeDescriptionFromRS(rs)
- if isStoredProcedureCall and parameters != None:
- return self._returnADOCommandParameters(self.cmd)
-
-
- def execute(self, operation, parameters = None):
- self.messages = []
- self._executeHelper(operation, False, parameters)
-
-
- def executemany(self, operation, seq_of_parameters):
- self.messages = []
- totrecordcount = 0
- canCount = True
- for params in seq_of_parameters:
- self.execute(operation, params)
- if self.rowcount == -1:
- canCount = False
- continue
- if canCount:
- totrecordcount += self.rowcount
- continue
-
- if canCount:
- self.rowcount = totrecordcount
- else:
- self.rowcount = -1
-
-
- def _fetch(self, rows = None):
- rs = self.rs
- if self.conn == None:
- self._raiseCursorError(Error, None)
- return None
- if rs == None:
- self._raiseCursorError(Error, None)
- return None
- if rs.State == adStateClosed and rs.BOF or rs.EOF:
- if rows == 1:
- return None
- return []
- rs.EOF
- d = self.description
- returnList = []
- i = 0
- for descTuple in d:
- type_code = descTuple[1]
- []([ convertVariantToPython(r, type_code) for r in ado_results[i] ])
- i += 1
-
- return tuple(zip(*returnList))
-
-
- def fetchone(self):
- self.messages = []
- ret = self._fetch(1)
- if ret:
- return ret[0]
- return ret
-
-
- def fetchmany(self, size = None):
- self.messages = []
- if size == None:
- size = self.arraysize
-
- return self._fetch(size)
-
-
- def fetchall(self):
- self.messages = []
- return self._fetch()
-
-
- def nextset(self):
- self.messages = []
- if self.conn == None:
- self._raiseCursorError(Error, None)
- return None
- if self.rs == None:
- self._raiseCursorError(Error, None)
- return None
-
- try:
- rsTuple = self.rs.NextRecordset()
- except pywintypes.com_error:
- self.rs == None
- exc = self.rs == None
- self.conn == None
- self._raiseCursorError(NotSupportedError, exc.args)
- except:
- self.rs == None
-
- rs = rsTuple[0]
- if rs == None:
- return None
- self._makeDescriptionFromRS(rs)
- return 1
-
-
- def setinputsizes(self, sizes):
- pass
-
-
- def setoutputsize(self, size, column = None):
- pass
-
-
-
- def Date(year, month, day):
- return dateconverter.Date(year, month, day)
-
-
- def Time(hour, minute, second):
- return dateconverter.Time(hour, minute, second)
-
-
- def Timestamp(year, month, day, hour, minute, second):
- return dateconverter.Timestamp(year, month, day, hour, minute, second)
-
-
- def DateFromTicks(ticks):
- return apply(Date, time.localtime(ticks)[:3])
-
-
- def TimeFromTicks(ticks):
- return apply(Time, time.localtime(ticks)[3:6])
-
-
- def TimestampFromTicks(ticks):
- return apply(Timestamp, time.localtime(ticks)[:6])
-
-
- def Binary(aString):
- return buffer(aString)
-
-
- def pyTypeToADOType(d):
- tp = type(d)
-
- try:
- return typeMap[tp]
- except KeyError:
- if tp in dateconverter.types:
- return adDate
- except:
- tp in dateconverter.types
-
- raise DataError
-
-
- def cvtCurrency(.0, decimal = 2):
- (hi, lo) = .0
- if lo < 0:
- lo += 0x100000000L
-
- return decimal.Decimal((long(hi) << 32) + lo) / decimal.Decimal(1000)
-
-
- def cvtNumeric(variant):
-
- try:
- return decimal.Decimal(variant)
- except (ValueError, TypeError):
- pass
-
-
- try:
- europeVsUS = str(variant).replace(',', '.')
- return decimal.Decimal(europeVsUS)
- except (ValueError, TypeError):
- pass
-
-
-
- def cvtFloat(variant):
-
- try:
- return float(variant)
- except (ValueError, TypeError):
- pass
-
-
- try:
- europeVsUS = str(variant).replace(',', '.')
- return float(europeVsUS)
- except (ValueError, TypeError):
- pass
-
-
-
- def identity(x):
- return x
-
-
- class VariantConversionMap(dict):
-
- def __init__(self, aDict):
- for k, v in aDict.iteritems():
- self[k] = v
-
-
-
- def __setitem__(self, adoType, cvtFn):
-
- try:
- for type in adoType:
- dict.__setitem__(self, type, cvtFn)
- except TypeError:
- dict.__setitem__(self, adoType, cvtFn)
-
-
-
- def __getitem__(self, fromType):
-
- try:
- return dict.__getitem__(self, fromType)
- except KeyError:
- return identity
-
-
-
-
- def convertVariantToPython(variant, adType):
- if variant is None:
- return None
- return variantConversions[adType](variant)
-
- adCmdText = 1
- adCmdStoredProc = 4
- adParamInput = 1
- adParamInputOutput = 3
- adParamOutput = 2
- adParamReturnValue = 4
- adParamUnknown = 0
- adStateClosed = 0
- adFldMayBeNull = 64
- adModeShareExclusive = 12
- adXactCommitRetaining = 131072
- adXactAbortRetaining = 262144
- adArray = 8192
- adBSTR = 8
- adBigInt = 20
- adBinary = 128
- adBoolean = 11
- adChapter = 136
- adChar = 129
- adCurrency = 6
- adDBDate = 133
- adDBTime = 134
- adDBTimeStamp = 135
- adDate = 7
- adDecimal = 14
- adDouble = 5
- adEmpty = 0
- adError = 10
- adFileTime = 64
- adGUID = 72
- adIDispatch = 9
- adIUnknown = 13
- adInteger = 3
- adLongVarBinary = 205
- adLongVarChar = 201
- adLongVarWChar = 203
- adNumeric = 131
- adPropVariant = 138
- adSingle = 4
- adSmallInt = 2
- adTinyInt = 16
- adUnsignedBigInt = 21
- adUnsignedInt = 19
- adUnsignedSmallInt = 18
- adUnsignedTinyInt = 17
- adUserDefined = 132
- adVarBinary = 204
- adVarChar = 200
- adVarNumeric = 139
- adVarWChar = 202
- adVariant = 12
- adWChar = 130
- adoErrors = {
- 3707: 'adErrBoundToCommand ',
- 3732: 'adErrCannotComplete ',
- 3748: 'adErrCantChangeConnection ',
- 3220: 'adErrCantChangeProvider ',
- 3724: 'adErrCantConvertvalue ',
- 3725: 'adErrCantCreate ',
- 3747: 'adErrCatalogNotSet ',
- 3726: 'adErrColumnNotOnThisRow ',
- 3421: 'adErrDataConversion ',
- 3721: 'adErrDataOverflow ',
- 3738: 'adErrDelResOutOfScope ',
- 3750: 'adErrDenyNotSupported ',
- 3751: 'adErrDenyTypeNotSupported ',
- 3251: 'adErrFeatureNotAvailable ',
- 3749: 'adErrFieldsUpdateFailed ',
- 3219: 'adErrIllegalOperation ',
- 3246: 'adErrInTransaction ',
- 3719: 'adErrIntegrityViolation ',
- 3001: 'adErrInvalidArgument ',
- 3709: 'adErrInvalidConnection ',
- 3708: 'adErrInvalidParamInfo ',
- 3714: 'adErrInvalidTransaction ',
- 3729: 'adErrInvalidURL ',
- 3265: 'adErrItemNotFound ',
- 3021: 'adErrNoCurrentRecord ',
- 3715: 'adErrNotExecuting ',
- 3710: 'adErrNotReentrant ',
- 3704: 'adErrObjectClosed ',
- 3367: 'adErrObjectInCollection ',
- 3420: 'adErrObjectNotSet ',
- 3705: 'adErrObjectOpen ',
- 3002: 'adErrOpeningFile ',
- 3712: 'adErrOperationCancelled ',
- 3734: 'adErrOutOfSpace ',
- 3720: 'adErrPermissionDenied ',
- 3742: 'adErrPropConflicting ',
- 3739: 'adErrPropInvalidColumn ',
- 3740: 'adErrPropInvalidOption ',
- 3741: 'adErrPropInvalidValue ',
- 3743: 'adErrPropNotAllSettable ',
- 3744: 'adErrPropNotSet ',
- 3745: 'adErrPropNotSettable ',
- 3746: 'adErrPropNotSupported ',
- 3000: 'adErrProviderFailed ',
- 3706: 'adErrProviderNotFound ',
- 3003: 'adErrReadFile ',
- 3731: 'adErrResourceExists ',
- 3730: 'adErrResourceLocked ',
- 3735: 'adErrResourceOutOfScope ',
- 3722: 'adErrSchemaViolation ',
- 3723: 'adErrSignMismatch ',
- 3713: 'adErrStillConnecting ',
- 3711: 'adErrStillExecuting ',
- 3728: 'adErrTreePermissionDenied ',
- 3727: 'adErrURLDoesNotExist ',
- 3737: 'adErrURLNamedRowDoesNotExist ',
- 3736: 'adErrUnavailable ',
- 3716: 'adErrUnsafeOperation ',
- 3733: 'adErrVolumeNotFound ',
- 3004: 'adErrWriteFile ' }
-
- class DBAPITypeObject:
-
- def __init__(self, valuesTuple):
- self.values = valuesTuple
-
-
- def __cmp__(self, other):
- if other in self.values:
- return 0
- if other < self.values:
- return 1
- return -1
-
-
- adoIntegerTypes = (adInteger, adSmallInt, adTinyInt, adUnsignedInt, adUnsignedSmallInt, adUnsignedTinyInt, adBoolean, adError)
- adoRowIdTypes = (adChapter,)
- adoLongTypes = (adBigInt, adFileTime, adUnsignedBigInt)
- adoExactNumericTypes = (adDecimal, adNumeric, adVarNumeric, adCurrency)
- adoApproximateNumericTypes = (adDouble, adSingle)
- adoStringTypes = (adBSTR, adChar, adLongVarChar, adLongVarWChar, adVarChar, adVarWChar, adWChar, adGUID)
- adoBinaryTypes = (adBinary, adLongVarBinary, adVarBinary)
- adoDateTimeTypes = (adDBTime, adDBTimeStamp, adDate, adDBDate)
- adoRemainingTypes = (adEmpty, adIDispatch, adIUnknown, adPropVariant, adArray, adUserDefined, adVariant)
- STRING = DBAPITypeObject(adoStringTypes)
- BINARY = DBAPITypeObject(adoBinaryTypes)
- NUMBER = DBAPITypeObject(adoIntegerTypes + adoLongTypes + adoExactNumericTypes + adoApproximateNumericTypes)
- DATETIME = DBAPITypeObject(adoDateTimeTypes)
- ROWID = DBAPITypeObject(adoRowIdTypes)
- typeMap = {
- types.BufferType: adBinary,
- types.FloatType: adNumeric,
- types.IntType: adInteger,
- types.LongType: adBigInt,
- types.StringType: adBSTR,
- types.NoneType: adEmpty,
- types.UnicodeType: adBSTR,
- types.BooleanType: adBoolean,
- type(decimal.Decimal): adNumeric }
-
- try:
- import mx.DateTime as mx
- dateconverter = mxDateTimeConverter()
- except:
- dateconverter = pythonDateTimeConverter()
-
-
- def variantConvertDate(v):
- return dateconverter.DateObjectFromCOMDate(v)
-
- variantConversions = VariantConversionMap({
- adoDateTimeTypes: variantConvertDate,
- adoApproximateNumericTypes: cvtFloat,
- adCurrency: cvtCurrency,
- adoExactNumericTypes: identity,
- adoLongTypes: long,
- adoIntegerTypes: int,
- adoRowIdTypes: int,
- adoStringTypes: identity,
- adoBinaryTypes: identity,
- adoRemainingTypes: identity })
-