From 42a878cfeadf00f036a6110941550505d4d007af Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Tue, 9 Sep 2008 02:13:58 +0000 Subject: [PATCH] db: Gave each DatabaseClient class an 'executable_name' attribute (e.g., 'psql' or 'mysql'), so that we can use it to make a more helpful error message. Refs #8978 git-svn-id: http://code.djangoproject.com/svn/django/trunk@8989 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/backends/__init__.py | 8 ++++++-- django/db/backends/mysql/client.py | 6 ++++-- django/db/backends/oracle/client.py | 6 ++++-- django/db/backends/postgresql/client.py | 6 ++++-- django/db/backends/sqlite3/client.py | 4 +++- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 23ce12960c..bda0cbc463 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -439,9 +439,13 @@ class BaseDatabaseIntrospection(object): class BaseDatabaseClient(object): """ - This class encapsualtes all backend-specific methods for opening a - client shell + This class encapsulates all backend-specific methods for opening a + client shell. """ + # This should be a string representing the name of the executable + # (e.g., "psql"). Subclasses must override this. + executable_name = None + def runshell(self): raise NotImplementedError() diff --git a/django/db/backends/mysql/client.py b/django/db/backends/mysql/client.py index 24758867af..17daca9fd6 100644 --- a/django/db/backends/mysql/client.py +++ b/django/db/backends/mysql/client.py @@ -3,6 +3,8 @@ from django.conf import settings import os class DatabaseClient(BaseDatabaseClient): + executable_name = 'mysql' + def runshell(self): args = [''] db = settings.DATABASE_OPTIONS.get('db', settings.DATABASE_NAME) @@ -11,7 +13,7 @@ class DatabaseClient(BaseDatabaseClient): host = settings.DATABASE_OPTIONS.get('host', settings.DATABASE_HOST) port = settings.DATABASE_OPTIONS.get('port', settings.DATABASE_PORT) defaults_file = settings.DATABASE_OPTIONS.get('read_default_file') - # Seems to be no good way to set sql_mode with CLI + # Seems to be no good way to set sql_mode with CLI. if defaults_file: args += ["--defaults-file=%s" % defaults_file] @@ -26,4 +28,4 @@ class DatabaseClient(BaseDatabaseClient): if db: args += [db] - os.execvp('mysql', args) + os.execvp(self.executable_name, args) diff --git a/django/db/backends/oracle/client.py b/django/db/backends/oracle/client.py index 77fc9b9847..52c4880e0e 100644 --- a/django/db/backends/oracle/client.py +++ b/django/db/backends/oracle/client.py @@ -3,11 +3,13 @@ from django.conf import settings import os class DatabaseClient(BaseDatabaseClient): + executable_name = 'sqlplus' + def runshell(self): dsn = settings.DATABASE_USER if settings.DATABASE_PASSWORD: dsn += "/%s" % settings.DATABASE_PASSWORD if settings.DATABASE_NAME: dsn += "@%s" % settings.DATABASE_NAME - args = ["sqlplus", "-L", dsn] - os.execvp("sqlplus", args) + args = [self.executable_name, "-L", dsn] + os.execvp(self.executable_name, args) diff --git a/django/db/backends/postgresql/client.py b/django/db/backends/postgresql/client.py index 28daed833a..63f28a7b57 100644 --- a/django/db/backends/postgresql/client.py +++ b/django/db/backends/postgresql/client.py @@ -3,8 +3,10 @@ from django.conf import settings import os class DatabaseClient(BaseDatabaseClient): + executable_name = 'psql' + def runshell(self): - args = ['psql'] + args = [self.executable_name] if settings.DATABASE_USER: args += ["-U", settings.DATABASE_USER] if settings.DATABASE_PASSWORD: @@ -14,4 +16,4 @@ class DatabaseClient(BaseDatabaseClient): if settings.DATABASE_PORT: args.extend(["-p", str(settings.DATABASE_PORT)]) args += [settings.DATABASE_NAME] - os.execvp('psql', args) + os.execvp(self.executable_name, args) diff --git a/django/db/backends/sqlite3/client.py b/django/db/backends/sqlite3/client.py index affb1c228c..239e72f1e9 100644 --- a/django/db/backends/sqlite3/client.py +++ b/django/db/backends/sqlite3/client.py @@ -3,6 +3,8 @@ from django.conf import settings import os class DatabaseClient(BaseDatabaseClient): + executable_name = 'sqlite3' + def runshell(self): args = ['', settings.DATABASE_NAME] - os.execvp('sqlite3', args) + os.execvp(self.executable_name, args)