summaryrefslogtreecommitdiff
path: root/django/db/backends/postgresql
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2009-03-11 03:39:34 +0000
committerAdrian Holovaty <adrian@holovaty.com>2009-03-11 03:39:34 +0000
commit315145f7ca682f8361d956e985f533a7fb421cde (patch)
tree959f7bac4d8356e4b900227646eace9f7c05ab48 /django/db/backends/postgresql
parent7daf0b94070ab29419825156ec68bca813e3c09f (diff)
Fixed #10459 -- Refactored the internals of database connection objects so that connections know their own settings and pass around settings as dictionaries instead of passing around the Django settings module itself. This will make it easier for multiple database support. Thanks to Alex Gaynor for the initial patch.
This is backwards-compatible but will likely break third-party database backends. Specific API changes are: * BaseDatabaseWrapper.__init__() now takes a settings_dict instead of a settings module. It's called settings_dict to disambiguate, and for easy grepability. This should be a dictionary containing DATABASE_NAME, etc. * BaseDatabaseWrapper has a settings_dict attribute instead of an options attribute. BaseDatabaseWrapper.options is now BaseDatabaseWrapper['DATABASE_OPTIONS'] * BaseDatabaseWrapper._cursor() no longer takes a settings argument. * BaseDatabaseClient.__init__() now takes a connection argument (a DatabaseWrapper instance) instead of no arguments. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10026 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/backends/postgresql')
-rw-r--r--django/db/backends/postgresql/base.py29
-rw-r--r--django/db/backends/postgresql/client.py18
2 files changed, 24 insertions, 23 deletions
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index ad271f2e38..9050cfd9e0 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -90,32 +90,33 @@ class DatabaseWrapper(BaseDatabaseWrapper):
self.features = DatabaseFeatures()
self.ops = DatabaseOperations()
- self.client = DatabaseClient()
+ self.client = DatabaseClient(self)
self.creation = DatabaseCreation(self)
self.introspection = DatabaseIntrospection(self)
self.validation = BaseDatabaseValidation()
- def _cursor(self, settings):
+ def _cursor(self):
set_tz = False
+ settings_dict = self.settings_dict
if self.connection is None:
set_tz = True
- if settings.DATABASE_NAME == '':
+ if settings_dict['DATABASE_NAME'] == '':
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("You need to specify DATABASE_NAME in your Django settings file.")
- conn_string = "dbname=%s" % settings.DATABASE_NAME
- if settings.DATABASE_USER:
- conn_string = "user=%s %s" % (settings.DATABASE_USER, conn_string)
- if settings.DATABASE_PASSWORD:
- conn_string += " password='%s'" % settings.DATABASE_PASSWORD
- if settings.DATABASE_HOST:
- conn_string += " host=%s" % settings.DATABASE_HOST
- if settings.DATABASE_PORT:
- conn_string += " port=%s" % settings.DATABASE_PORT
- self.connection = Database.connect(conn_string, **self.options)
+ conn_string = "dbname=%s" % settings_dict['DATABASE_NAME']
+ if settings_dict['DATABASE_USER']:
+ conn_string = "user=%s %s" % (settings_dict['DATABASE_USER'], conn_string)
+ if settings_dict['DATABASE_PASSWORD']:
+ conn_string += " password='%s'" % settings_dict['DATABASE_PASSWORD']
+ if settings_dict['DATABASE_HOST']:
+ conn_string += " host=%s" % settings_dict['DATABASE_HOST']
+ if settings_dict['DATABASE_PORT']:
+ conn_string += " port=%s" % settings_dict['DATABASE_PORT']
+ self.connection = Database.connect(conn_string, **settings_dict['DATABASE_OPTIONS'])
self.connection.set_isolation_level(1) # make transactions transparent to all cursors
cursor = self.connection.cursor()
if set_tz:
- cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+ cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
if not hasattr(self, '_version'):
self.__class__._version = get_version(cursor)
if self._version < (8, 0):
diff --git a/django/db/backends/postgresql/client.py b/django/db/backends/postgresql/client.py
index 63f28a7b57..506372bfc4 100644
--- a/django/db/backends/postgresql/client.py
+++ b/django/db/backends/postgresql/client.py
@@ -1,19 +1,19 @@
from django.db.backends import BaseDatabaseClient
-from django.conf import settings
import os
class DatabaseClient(BaseDatabaseClient):
executable_name = 'psql'
def runshell(self):
+ settings_dict = self.connection.settings_dict
args = [self.executable_name]
- if settings.DATABASE_USER:
- args += ["-U", settings.DATABASE_USER]
- if settings.DATABASE_PASSWORD:
+ if settings_dict['DATABASE_USER']:
+ args += ["-U", settings_dict['DATABASE_USER']]
+ if settings_dict['DATABASE_PASSWORD']:
args += ["-W"]
- if settings.DATABASE_HOST:
- args.extend(["-h", settings.DATABASE_HOST])
- if settings.DATABASE_PORT:
- args.extend(["-p", str(settings.DATABASE_PORT)])
- args += [settings.DATABASE_NAME]
+ if settings_dict['DATABASE_HOST']:
+ args.extend(["-h", settings_dict['DATABASE_HOST']])
+ if settings_dict['DATABASE_PORT']:
+ args.extend(["-p", str(settings_dict['DATABASE_PORT'])])
+ args += [settings_dict['DATABASE_NAME']]
os.execvp(self.executable_name, args)