Mercurial > p > roundup > code
changeset 2856:adec352e2ce0
don't try to import all backends in backends.__init__ unless we *want* to
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 03 Nov 2004 01:34:21 +0000 |
| parents | 874bf6abad42 |
| children | 0357a9c93933 |
| files | CHANGES.txt demo.py roundup/admin.py roundup/backends/__init__.py roundup/instance.py test/test_anydbm.py test/test_metakit.py test/test_mysql.py test/test_postgresql.py test/test_sqlite.py |
| diffstat | 10 files changed, 59 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/CHANGES.txt Wed Nov 03 01:10:53 2004 +0000 +++ b/CHANGES.txt Wed Nov 03 01:34:21 2004 +0000 @@ -33,6 +33,7 @@ recognized by roundup-server (but not tracker specification arguments). Use this to specify server configuration file for the service. - added experimental multi-thread server +- don't try to import all backends in backends.__init__ unless we *want* to Fixed: - postgres backend open doesn't hide corruption in schema (sf bug 956375)
--- a/demo.py Wed Nov 03 01:10:53 2004 +0000 +++ b/demo.py Wed Nov 03 01:34:21 2004 +0000 @@ -2,7 +2,7 @@ # # Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net) # -# $Id: demo.py,v 1.21 2004-10-29 15:55:16 a1s Exp $ +# $Id: demo.py,v 1.22 2004-11-03 01:34:20 richard Exp $ import errno import os @@ -40,7 +40,7 @@ config['RDBMS_NAME'] = 'rounduptest' # see if we have further db nuking to perform - module = getattr(backends, backend) + module = backends.get_backend(backend) if module.db_exists(config): module.db_nuke(config)
--- a/roundup/admin.py Wed Nov 03 01:10:53 2004 +0000 +++ b/roundup/admin.py Wed Nov 03 01:34:21 2004 +0000 @@ -16,7 +16,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: admin.py,v 1.83 2004-10-20 04:45:01 richard Exp $ +# $Id: admin.py,v 1.84 2004-11-03 01:34:21 richard Exp $ '''Administration commands for maintaining Roundup trackers. ''' @@ -336,7 +336,7 @@ templates = self.listTemplates() print _('Templates:'), ', '.join(templates.keys()) import roundup.backends - backends = roundup.backends.__all__ + backends = roundup.backends.list_backends() print _('Back ends:'), ', '.join(backends) def do_install(self, tracker_home, args): @@ -392,7 +392,7 @@ # select hyperdb backend import roundup.backends - backends = roundup.backends.__all__ + backends = roundup.backends.list_backends() backend = len(args) > 2 and args[2] or '' if backend not in backends: print _('Back ends:'), ', '.join(backends)
--- a/roundup/backends/__init__.py Wed Nov 03 01:10:53 2004 +0000 +++ b/roundup/backends/__init__.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,28 +15,38 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: __init__.py,v 1.28 2004-10-24 08:23:16 a1s Exp $ +# $Id: __init__.py,v 1.29 2004-11-03 01:34:21 richard Exp $ '''Container for the hyperdb storage backend implementations. - -The __all__ variable is constructed containing only the backends which are -available. ''' __docformat__ = 'restructuredtext' -__all__ = [] +_modules = { + 'mysql': 'MySQLdb', + 'postgresql': 'psycopg', +} + +def get_backend(name): + '''Get a specific backend by name.''' + return __import__('back_%s'%name, globals()) -for backend in ['anydbm', ('mysql', 'MySQLdb'), - 'sqlite', 'metakit', ('postgresql', 'psycopg')]: - if len(backend) == 2: - backend, backend_module = backend - else: - backend_module = backend +def have_backend(name): + '''Is backend "name" available?''' + module = _modules.get(name, name) try: - globals()[backend] = __import__('back_%s'%backend, globals()) - __all__.append(backend) + get_backend(name) + return 1 except ImportError, e: - if not str(e).startswith('No module named %s'%backend_module): + if not str(e).startswith('No module named %s'%module): raise + return 0 + +def list_backends(): + '''List all available backend names.''' + l = [] + for name in 'anydbm', 'mysql', 'sqlite', 'metakit', 'postgresql': + if have_backend(name): + l.append(name) + return l # vim: set filetype=python ts=4 sw=4 et si
--- a/roundup/instance.py Wed Nov 03 01:10:53 2004 +0000 +++ b/roundup/instance.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: instance.py,v 1.27 2004-11-02 10:00:36 a1s Exp $ +# $Id: instance.py,v 1.28 2004-11-03 01:34:21 richard Exp $ '''Tracker handling (open tracker). @@ -61,8 +61,7 @@ return name def get_backend(self): - name = self.get_backend_name() - return getattr(backends, name) + return backends.get_backend(self.get_backend_name()) def open(self, name=None): backend = self.get_backend()
--- a/test/test_anydbm.py Wed Nov 03 01:10:53 2004 +0000 +++ b/test/test_anydbm.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,14 +15,15 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_anydbm.py,v 1.3 2004-03-18 01:58:46 richard Exp $ +# $Id: test_anydbm.py,v 1.4 2004-11-03 01:34:21 richard Exp $ import unittest, os, shutil, time +from roundup.backends import get_backend from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config class anydbmOpener: - from roundup.backends import anydbm as module + module = get_backend('anydbm') def nuke_database(self): shutil.rmtree(config.DATABASE)
--- a/test/test_metakit.py Wed Nov 03 01:10:53 2004 +0000 +++ b/test/test_metakit.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,16 +15,16 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_metakit.py,v 1.5 2004-03-24 05:33:13 richard Exp $ +# $Id: test_metakit.py,v 1.6 2004-11-03 01:34:21 richard Exp $ import unittest, os, shutil, time, weakref from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config, password -from roundup import backends +from roundup.backends import get_backend, have_backend class metakitOpener: - if hasattr(backends, 'metakit'): - from roundup.backends import metakit as module + if have_backend('metakit'): + module = get_backend('metakit') module._instances = weakref.WeakValueDictionary() def nuke_database(self): @@ -65,7 +65,7 @@ def test_suite(): suite = unittest.TestSuite() - if not hasattr(backends, 'metakit'): + if not have_backend('metakit'): print 'Skipping metakit tests' return suite print 'Including metakit tests'
--- a/test/test_mysql.py Wed Nov 03 01:10:53 2004 +0000 +++ b/test/test_mysql.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,19 +15,19 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_mysql.py,v 1.13 2004-09-26 15:18:28 a1s Exp $ +# $Id: test_mysql.py,v 1.14 2004-11-03 01:34:21 richard Exp $ import unittest, os, shutil, time, imp from roundup.hyperdb import DatabaseError -from roundup import init, backends +from roundup.backends import get_backend, have_backend from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest class mysqlOpener: - if hasattr(backends, 'mysql'): - from roundup.backends import mysql as module + if have_backend('mysql'): + module = get_backends('mysql') def setUp(self): self.module.db_nuke(config) @@ -74,16 +74,15 @@ def test_suite(): suite = unittest.TestSuite() - if not hasattr(backends, 'mysql'): + if not have_backend('mysql'): print "Skipping mysql tests" return suite - from roundup.backends import mysql import MySQLdb try: # Check if we can connect to the server. # use db_exists() to make a connection, ignore it's return value - mysql.db_exists(config) + mysqlOpener.module.db_exists(config) except (MySQLdb.MySQLError, DatabaseError), msg: print "Skipping mysql tests (%s)"%msg else:
--- a/test/test_postgresql.py Wed Nov 03 01:10:53 2004 +0000 +++ b/test/test_postgresql.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_postgresql.py,v 1.11 2004-09-25 15:50:36 a1s Exp $ +# $Id: test_postgresql.py,v 1.12 2004-11-03 01:34:21 richard Exp $ import unittest @@ -23,15 +23,13 @@ from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest -from roundup import backends +from roundup.backends import get_backend, have_backend class postgresqlOpener: - if hasattr(backends, 'postgresql'): - from roundup.backends import postgresql as module + if have_backend('postgresql'): + module = get_backend('postgresql') def setUp(self): - #from roundup.backends.back_postgresql import db_nuke - #db_nuke(config, 1) pass def tearDown(self): @@ -39,8 +37,7 @@ def nuke_database(self): # clear out the database - easiest way is to nuke and re-create it - from roundup.backends.back_postgresql import db_nuke - db_nuke(config) + self.module.db_nuke(config) class postgresqlDBTest(postgresqlOpener, DBTest): def setUp(self): @@ -99,14 +96,13 @@ def test_suite(): suite = unittest.TestSuite() - if not hasattr(backends, 'postgresql'): + if not have_backend('postgresql'): print "Skipping postgresql tests" return suite # make sure we start with a clean slate - from roundup.backends.back_postgresql import db_nuke, db_exists - if db_exists(config): - db_nuke(config, 1) + if postgresqlOpener.module.db_exists(config): + postgresqlOpener.module.db_nuke(config, 1) # TODO: Check if we can run postgresql tests print 'Including postgresql tests'
--- a/test/test_sqlite.py Wed Nov 03 01:10:53 2004 +0000 +++ b/test/test_sqlite.py Wed Nov 03 01:34:21 2004 +0000 @@ -15,16 +15,16 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: test_sqlite.py,v 1.4 2004-03-18 01:58:46 richard Exp $ +# $Id: test_sqlite.py,v 1.5 2004-11-03 01:34:21 richard Exp $ import unittest, os, shutil, time +from roundup.backends import get_backend, have_backend from db_test_base import DBTest, ROTest, SchemaTest, ClassicInitTest, config class sqliteOpener: - from roundup import backends - if hasattr(backends, 'sqlite'): - from roundup.backends import sqlite as module + if have_backend('sqlite'): + module = get_backend('sqlite') def nuke_database(self): shutil.rmtree(config.DATABASE) @@ -48,7 +48,7 @@ def test_suite(): suite = unittest.TestSuite() from roundup import backends - if not hasattr(backends, 'sqlite'): + if not have_backend('sqlite'): print 'Skipping sqlite tests' return suite print 'Including sqlite tests'
