[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9865 - trunk/gnue-common/src/datasources/drivers/sql/sqlite3
From: |
btami |
Subject: |
[gnue] r9865 - trunk/gnue-common/src/datasources/drivers/sql/sqlite3 |
Date: |
Wed, 26 Mar 2008 14:34:00 -0500 (CDT) |
Author: btami
Date: 2008-03-26 14:33:54 -0500 (Wed, 26 Mar 2008)
New Revision: 9865
Added:
trunk/gnue-common/src/datasources/drivers/sql/sqlite3/Base.py
trunk/gnue-common/src/datasources/drivers/sql/sqlite3/sqlite3drv.py
Modified:
trunk/gnue-common/src/datasources/drivers/sql/sqlite3/pysqlite2drv.py
Log:
added Python's (>=2.5) builtin sqlite3 support
Added: trunk/gnue-common/src/datasources/drivers/sql/sqlite3/Base.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/sql/sqlite3/Base.py
(rev 0)
+++ trunk/gnue-common/src/datasources/drivers/sql/sqlite3/Base.py
2008-03-26 19:33:54 UTC (rev 9865)
@@ -0,0 +1,164 @@
+# GNU Enterprise Common Library - base SQLite3 database driver
+#
+# Copyright 2000-2008 Free Software Foundation
+#
+# This file is part of GNU Enterprise.
+#
+# GNU Enterprise is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation; either
+# version 2, or (at your option) any later version.
+#
+# GNU Enterprise is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with program; see the file COPYING. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place
+# - Suite 330, Boston, MA 02111-1307, USA.
+#
+# $Id:$
+
+"""
+Base driver plugin for SQLite3 backends.
+"""
+
+__all__ = ['Connection']
+
+__noplugin__ = True
+
+import datetime
+import locale
+
+from gnue.common.datasources.drivers import DBSIG2
+from gnue.common.datasources.drivers.sql.sqlite3 import Behavior
+
+
+# =============================================================================
+# Connection class
+# =============================================================================
+
+class Connection (DBSIG2.Connection):
+ """
+ Connection class for SQLite backends using the pysqlite DBSIG2 module.
+ """
+
+ _drivername_ = ''
+ _behavior_ = Behavior.Behavior
+
+ _std_datetime_ = True
+ _rowidField_ = u'oid'
+ _broken_rowcount_ = True
+ _must_fetchall_ = True
+
+
+ # ---------------------------------------------------------------------------
+ # Return a sequence of required login fields
+ # ---------------------------------------------------------------------------
+
+ def _getLoginFields_ (self):
+ """
+ This function returns an empty sequence since SQLite doesn't use any user
+ authentication.
+ """
+ return []
+
+
+ # ---------------------------------------------------------------------------
+ # Get connection parameters
+ # ---------------------------------------------------------------------------
+
+ def _getConnectParams_ (self, connectData):
+ print self._drivername_
+ drv = __import__(self._drivername_)
+ print drv
+ # Register the missing converter and adapater for time values
+ drv.dbapi2.register_adapter (datetime.time, adapt_time)
+ drv.dbapi2.register_converter ('time', convert_time)
+ # Register the missing converter and adapter for boolean values
+ drv.dbapi2.register_adapter (bool, adapt_boolean)
+ drv.dbapi2.register_converter ('boolean', convert_boolean)
+ # NOTE: gnue-forms allways creates datetime values, even for dates. This is
+ # why we have to define our own converter. Please remove as soon as
+ # gnue-forms is fixed.
+ drv.dbapi2.register_converter ('date', convert_date)
+
+ # mandatory parameters
+ kwargs = {'database' : connectData ['dbname'],
+ 'detect_types': drv.dbapi2.PARSE_DECLTYPES}
+
+ if 'timeout' in connectData:
+ kwargs ['timeout'] = connectData ['timeout']
+
+ return ([], kwargs)
+
+ # ---------------------------------------------------------------------------
+
+ def _connect_ (self, connectData):
+
+ DBSIG2.Connection._connect_ (self, connectData)
+
+ # With pysqlite2 version 2.2+ we could override the default collation
+ # function to use the current locales' one
+ if hasattr (self._native, 'create_collation'):
+ self._native.create_collation ('BINARY', collateByLocale)
+
+
+
+# =============================================================================
+# The following functions should go into pysqlite2.dbapi2 !
+# =============================================================================
+
+# -----------------------------------------------------------------------------
+
+def collateByLocale (value1, value2):
+
+ return locale.strcoll (value1, value2)
+
+# -----------------------------------------------------------------------------
+
+def convert_time (value):
+
+ # Be nice to datetime values passed in and take only the timepart
+ parts = value.split (' ', 1)
+ timepart = len (parts) > 1 and parts [1] or parts [0]
+
+ timepart_full = timepart.split(".")
+ hours, minutes, seconds = map(int, timepart_full[0].split(":"))
+ if len(timepart_full) == 2:
+ microseconds = int(float("0." + timepart_full[1]) * 1000000)
+ else:
+ microseconds = 0
+
+ return datetime.time (hours, minutes, seconds, microseconds)
+
+# -----------------------------------------------------------------------------
+
+def convert_date (value):
+
+ datepart = value.split (' ', 1) [0]
+ return datetime.date (*map (int, datepart.split ('-')))
+
+# -----------------------------------------------------------------------------
+
+def adapt_time (value):
+
+ if isinstance (value, datetime.datetime):
+ value = value.time ()
+
+ return value.isoformat ()
+
+# -----------------------------------------------------------------------------
+
+def convert_boolean (value):
+
+ value = "%s" % value
+ return value.strip ().lower () in ['y', 't', '1', 'true', 'yes']
+
+# -----------------------------------------------------------------------------
+
+def adapt_boolean (value):
+
+ return value and '1' or '0'
Modified: trunk/gnue-common/src/datasources/drivers/sql/sqlite3/pysqlite2drv.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/sql/sqlite3/pysqlite2drv.py
2008-03-25 08:26:44 UTC (rev 9864)
+++ trunk/gnue-common/src/datasources/drivers/sql/sqlite3/pysqlite2drv.py
2008-03-26 19:33:54 UTC (rev 9865)
@@ -27,11 +27,9 @@
__all__ = ['Connection']
-import datetime
-import locale
+__pluginalias__ = ['pysqlite2']
-from gnue.common.datasources.drivers import DBSIG2
-from gnue.common.datasources.drivers.sql.sqlite3 import Behavior
+from gnue.common.datasources.drivers.sql.sqlite3 import Base
# =============================================================================
@@ -60,7 +58,7 @@
doc = """
Description
-----------
-PySQLite is a Python extension for SQLite that conforms to the Python
+PySQLite2 is a Python extension for SQLite that conforms to the Python
Database API Specification 2.0. The source is released under the
Python license.
@@ -84,7 +82,7 @@
Examples
--------
[myconn]
-provider=sqlite3 # Use the SQLite adapter
+provider=pysqlite2 # Use the SQLite adapter
dbname=/usr/db/testdb # The filename for the SQLite database
Notes
@@ -101,125 +99,9 @@
# Connection class
# =============================================================================
-class Connection (DBSIG2.Connection):
+class Connection (Base.Connection):
"""
Connection class for SQLite backends using the pysqlite DBSIG2 module.
"""
_drivername_ = 'pysqlite2.dbapi2'
- _behavior_ = Behavior.Behavior
-
- _std_datetime_ = True
- _rowidField_ = u'oid'
- _broken_rowcount_ = True
- _must_fetchall_ = True
-
-
- # ---------------------------------------------------------------------------
- # Return a sequence of required login fields
- # ---------------------------------------------------------------------------
-
- def _getLoginFields_ (self):
- """
- This function returns an empty sequence since SQLite doesn't use any user
- authentication.
- """
- return []
-
-
- # ---------------------------------------------------------------------------
- # Get connection parameters
- # ---------------------------------------------------------------------------
-
- def _getConnectParams_ (self, connectData):
-
- from pysqlite2 import dbapi2
-
- # Register the missing converter and adapater for time values
- dbapi2.register_adapter (datetime.time, adapt_time)
- dbapi2.register_converter ('time', convert_time)
- # Register the missing converter and adapter for boolean values
- dbapi2.register_adapter (bool, adapt_boolean)
- dbapi2.register_converter ('boolean', convert_boolean)
- # NOTE: gnue-forms allways creates datetime values, even for dates. This is
- # why we have to define our own converter. Please remove as soon as
- # gnue-forms is fixed.
- dbapi2.register_converter ('date', convert_date)
-
- # mandatory parameters
- kwargs = {'database' : connectData ['dbname'],
- 'detect_types': dbapi2.PARSE_DECLTYPES}
-
- if 'timeout' in connectData:
- kwargs ['timeout'] = connectData ['timeout']
-
- return ([], kwargs)
-
- # ---------------------------------------------------------------------------
-
- def _connect_ (self, connectData):
-
- DBSIG2.Connection._connect_ (self, connectData)
-
- # With pysqlite2 version 2.2+ we could override the default collation
- # function to use the current locales' one
- if hasattr (self._native, 'create_collation'):
- self._native.create_collation ('BINARY', collateByLocale)
-
-
-
-# =============================================================================
-# The following functions should go into pysqlite2.dbapi2 !
-# =============================================================================
-
-# -----------------------------------------------------------------------------
-
-def collateByLocale (value1, value2):
-
- return locale.strcoll (value1, value2)
-
-# -----------------------------------------------------------------------------
-
-def convert_time (value):
-
- # Be nice to datetime values passed in and take only the timepart
- parts = value.split (' ', 1)
- timepart = len (parts) > 1 and parts [1] or parts [0]
-
- timepart_full = timepart.split(".")
- hours, minutes, seconds = map(int, timepart_full[0].split(":"))
- if len(timepart_full) == 2:
- microseconds = int(float("0." + timepart_full[1]) * 1000000)
- else:
- microseconds = 0
-
- return datetime.time (hours, minutes, seconds, microseconds)
-
-# -----------------------------------------------------------------------------
-
-def convert_date (value):
-
- datepart = value.split (' ', 1) [0]
- return datetime.date (*map (int, datepart.split ('-')))
-
-# -----------------------------------------------------------------------------
-
-def adapt_time (value):
-
- if isinstance (value, datetime.datetime):
- value = value.time ()
-
- return value.isoformat ()
-
-# -----------------------------------------------------------------------------
-
-def convert_boolean (value):
-
- value = "%s" % value
- return value.strip ().lower () in ['y', 't', '1', 'true', 'yes']
-
-# -----------------------------------------------------------------------------
-
-def adapt_boolean (value):
-
- return value and '1' or '0'
Added: trunk/gnue-common/src/datasources/drivers/sql/sqlite3/sqlite3drv.py
===================================================================
--- trunk/gnue-common/src/datasources/drivers/sql/sqlite3/sqlite3drv.py
(rev 0)
+++ trunk/gnue-common/src/datasources/drivers/sql/sqlite3/sqlite3drv.py
2008-03-26 19:33:54 UTC (rev 9865)
@@ -0,0 +1,107 @@
+# GNU Enterprise Common Library - SQLite3 database driver using sqlite3
+#
+# Copyright 2000-2008 Free Software Foundation
+#
+# This file is part of GNU Enterprise.
+#
+# GNU Enterprise is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation; either
+# version 2, or (at your option) any later version.
+#
+# GNU Enterprise is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with program; see the file COPYING. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place
+# - Suite 330, Boston, MA 02111-1307, USA.
+#
+# $Id: pysqlite2drv.py 9850 2008-01-03 17:21:25Z jcater $
+
+"""
+Database driver plugin for SQLite3 backends using
+the Python's builtin sqlite3 DBSIG2 module.
+"""
+
+__all__ = ['Connection']
+
+__pluginalias__ = ['sqlite3']
+
+from gnue.common.datasources.drivers.sql.sqlite3 import Base
+
+
+# =============================================================================
+# Test if plugin is functional
+# =============================================================================
+
+def __initplugin__ ():
+ from gnue.common.datasources import GConnections
+ try:
+ # Python >= 2.5 has sqlite3 package in the standard library
+ from sqlite3 import dbapi2
+ except ImportError:
+ raise GConnections.DependencyError, ('sqlite3.dbapi2', None)
+
+
+# =============================================================================
+# Driver info
+# =============================================================================
+
+class DriverInfo:
+
+ name = "sqlite3"
+
+ url = "http://python.org"
+
+ doc = """
+Description
+-----------
+Sqlite3 is a Python's builtin extension module for SQLite
+that conforms to the Python Database API Specification 2.0.
+
+Support
+-------
+Supported Platforms:
+
+ - Linux/BSD
+ - Solaris
+ - MS Windows 98/NT/2000/XP
+
+Connection Properties
+---------------------
+* dbname -- This is the file name of the sqlite database (required)
+* timeout -- When a database is accessed by multiple connections, and one of
+ the processes modifies the database, the SQLite database is
+ locked until that transaction is committed. The timeout
+ parameter specifies how long the connection should wait for the
+ lock to go away until raising an exception
+
+Examples
+--------
+[myconn]
+provider=sqlite3 # Use the SQLite adapter
+dbname=/usr/db/testdb # The filename for the SQLite database
+
+Notes
+-----
+1. The database engine stores all data in string format. Many
+ SQL statements won't work.
+
+2. Other than that, this driver is fully functional without any serious
+ known problems.
+"""
+
+
+# =============================================================================
+# Connection class
+# =============================================================================
+
+class Connection (Base.Connection):
+ """
+ Connection class for SQLite backends using the sqlite3 DBSIG2 module.
+ """
+
+ _drivername_ = 'sqlite3.dbapi2'
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9865 - trunk/gnue-common/src/datasources/drivers/sql/sqlite3,
btami <=