Fixed #8047: property detect an external database backend and set sys.path accordingly. Patch from Leo Soto.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8238 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2008-08-08 18:48:18 +00:00
parent 34028f3ef3
commit 176fabcc6f
1 changed files with 17 additions and 5 deletions

View File

@ -67,10 +67,22 @@ class AdminScriptTestCase(unittest.TestCase):
else: else:
return sys.executable return sys.executable
def _ext_backend_path(self):
"""
Returns the path for the external backend package, or None if no
external backend is detected.
"""
first_package_re = re.compile(r'(^[^\.]+)\.')
result = first_package_re.findall(settings.DATABASE_ENGINE)
if result:
backend_pkg = __import__(result[0])
backend_dir = os.path.dirname(backend_pkg.__file__)
return os.path.dirname(backend_dir)
def run_test(self, script, args, settings_file=None, apps=None): def run_test(self, script, args, settings_file=None, apps=None):
test_dir = os.path.dirname(os.path.dirname(__file__)) test_dir = os.path.dirname(os.path.dirname(__file__))
project_dir = os.path.dirname(test_dir) project_dir = os.path.dirname(test_dir)
base_dir = os.path.dirname(project_dir) base_dir = os.path.dirname(project_dir)
ext_backend_base_dir = self._ext_backend_path()
# Remember the old environment # Remember the old environment
old_django_settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', None) old_django_settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', None)
@ -82,11 +94,11 @@ class AdminScriptTestCase(unittest.TestCase):
os.environ['DJANGO_SETTINGS_MODULE'] = settings_file os.environ['DJANGO_SETTINGS_MODULE'] = settings_file
elif 'DJANGO_SETTINGS_MODULE' in os.environ: elif 'DJANGO_SETTINGS_MODULE' in os.environ:
del os.environ['DJANGO_SETTINGS_MODULE'] del os.environ['DJANGO_SETTINGS_MODULE']
python_path = [test_dir, base_dir]
if ext_backend_base_dir:
python_path.append(ext_backend_base_dir)
os.environ['PYTHONPATH'] = os.pathsep.join(python_path)
if old_python_path:
os.environ['PYTHONPATH'] = os.pathsep.join([test_dir, base_dir, old_python_path])
else:
os.environ['PYTHONPATH'] = os.pathsep.join([test_dir, base_dir])
# Build the command line # Build the command line
cmd = '%s "%s"' % (self._sys_executable(), script) cmd = '%s "%s"' % (self._sys_executable(), script)