annotate roundup/backends/__init__.py @ 3727:04dee2ac29e2

sqlite module detection was broken for python 2.5 compiled w/o sqlite support
author Richard Jones <richard@users.sourceforge.net>
date Mon, 09 Oct 2006 23:49:32 +0000
parents 6a96ad643629
children 9997b941dd6d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2812
66db6834fcd5 remove bsddb, bsddb3 backends
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2186
diff changeset
17 #
3727
04dee2ac29e2 sqlite module detection was broken for python 2.5 compiled w/o sqlite support
Richard Jones <richard@users.sourceforge.net>
parents: 3720
diff changeset
18 # $Id: __init__.py,v 1.39 2006-10-09 23:49:32 richard Exp $
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1190
diff changeset
19
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
20 '''Container for the hyperdb storage backend implementations.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1190
diff changeset
21 '''
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
22 __docformat__ = 'restructuredtext'
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
23
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
24 import sys
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
25
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
26 # These names are used to suppress import errors.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
27 # If get_backend raises an ImportError with appropriate
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
28 # module name, have_backend quietly returns False.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
29 # Otherwise the error is reraised.
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
30 _modules = {
3718
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
31 'mysql': ('MySQLdb',),
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
32 'postgresql': ('psycopg',),
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
33 'tsearch2': ('psycopg',),
3727
04dee2ac29e2 sqlite module detection was broken for python 2.5 compiled w/o sqlite support
Richard Jones <richard@users.sourceforge.net>
parents: 3720
diff changeset
34 'sqlite': ('pysqlite', 'pysqlite2', 'sqlite3', '_sqlite3'),
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
35 }
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
36
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
37 def get_backend(name):
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
38 '''Get a specific backend by name.'''
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
39 vars = globals()
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
40 # if requested backend has been imported yet, return current instance
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
41 if vars.has_key(name):
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
42 return vars[name]
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
43 # import the backend module
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
44 module_name = 'back_%s' % name
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
45 try:
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
46 module = __import__(module_name, vars)
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
47 except:
3084
b286373a517f fix exception in have_backend('tsearch2')
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2978
diff changeset
48 # import failed, but in versions prior to 2.4, a (broken)
2976
e03ef8a8df7f 2.4 compat
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2935
diff changeset
49 # module is left in sys.modules and package globals;
2978
4fcb61bfe4ec clean up comment
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2976
diff changeset
50 # subsequent imports would succeed and get the broken module.
4fcb61bfe4ec clean up comment
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2976
diff changeset
51 # This no longer happens in Python 2.4 and later.
2976
e03ef8a8df7f 2.4 compat
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2935
diff changeset
52 if sys.version_info < (2, 4):
e03ef8a8df7f 2.4 compat
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2935
diff changeset
53 del sys.modules['.'.join((__name__, module_name))]
e03ef8a8df7f 2.4 compat
Anthony Baxter <anthonybaxter@users.sourceforge.net>
parents: 2935
diff changeset
54 del vars[module_name]
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
55 raise
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
56 else:
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
57 vars[name] = module
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
58 return module
159
764db91c0dea Checks for ability to import the specific back-end module.
Richard Jones <richard@users.sourceforge.net>
parents: 46
diff changeset
59
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
60 def have_backend(name):
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
61 '''Is backend "name" available?'''
3419
4aeb0d0cf0d6 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents: 3084
diff changeset
62 if name == 'tsearch2':
3503
bcebddf1351f *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 3419
diff changeset
63 # currently not working
3419
4aeb0d0cf0d6 pre-release stuff
Richard Jones <richard@users.sourceforge.net>
parents: 3084
diff changeset
64 return 0
1809
bd127cafe3a8 Simplify backend importing, by moving the imports into the backend modules.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1609
diff changeset
65 try:
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
66 get_backend(name)
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
67 return 1
1809
bd127cafe3a8 Simplify backend importing, by moving the imports into the backend modules.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1609
diff changeset
68 except ImportError, e:
3718
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
69 for name in _modules.get(name, (name,)):
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
70 if str(e).startswith('No module named %s'%name):
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
71 return 0
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
72 raise
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
73 return 0
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
74
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
75 def list_backends():
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
76 '''List all available backend names.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
77
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
78 This function has side-effect of registering backward-compatible
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
79 globals for all available backends.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
80
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
81 '''
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
82 l = []
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
83 for name in 'anydbm', 'mysql', 'sqlite', 'metakit', 'postgresql':
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
84 if have_backend(name):
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
85 l.append(name)
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
86 return l
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 733
diff changeset
87
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
88 # vim: set filetype=python sts=4 sw=4 et si :

Roundup Issue Tracker: http://roundup-tracker.org/