mirror of
https://github.com/kennethreitz/dj-database-url.git
synced 2026-06-05 23:10:17 +00:00
Merge pull request #59 from eisensheng/master
Handle search path config in connect url for postgres
This commit is contained in:
+16
-2
@@ -66,9 +66,13 @@ def parse(url, engine=None, conn_max_age=0):
|
||||
|
||||
url = urlparse.urlparse(url)
|
||||
|
||||
# Remove query strings.
|
||||
# Split query strings from path.
|
||||
path = url.path[1:]
|
||||
path = path.split('?', 2)[0]
|
||||
if '?' in path and not url.query:
|
||||
path, query = path.split('?', 2)
|
||||
else:
|
||||
path, query = path, url.query
|
||||
query = urlparse.parse_qs(query)
|
||||
|
||||
# If we are using sqlite and we have no path, then assume we
|
||||
# want an in-memory database (this is the behaviour of sqlalchemy)
|
||||
@@ -95,4 +99,14 @@ def parse(url, engine=None, conn_max_age=0):
|
||||
elif url.scheme in SCHEMES:
|
||||
config['ENGINE'] = SCHEMES[url.scheme]
|
||||
|
||||
if config['ENGINE'] == 'django.db.backends.postgresql_psycopg2':
|
||||
try:
|
||||
current_schema = query['currentSchema'][0]
|
||||
except (KeyError, IndexError):
|
||||
pass
|
||||
else:
|
||||
config['OPTIONS'] = {
|
||||
'options': '-c search_path=' + current_schema
|
||||
}
|
||||
|
||||
return config
|
||||
|
||||
@@ -34,6 +34,17 @@ class DatabaseTestSuite(unittest.TestCase):
|
||||
assert url['PASSWORD'] == ''
|
||||
assert url['PORT'] == ''
|
||||
|
||||
def test_postgres_search_path_parsing(self):
|
||||
url = 'postgres://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn?currentSchema=otherschema'
|
||||
url = dj_database_url.parse(url)
|
||||
assert url['ENGINE'] == 'django.db.backends.postgresql_psycopg2'
|
||||
assert url['NAME'] == 'd8r82722r2kuvn'
|
||||
assert url['HOST'] == 'ec2-107-21-253-135.compute-1.amazonaws.com'
|
||||
assert url['USER'] == 'uf07k1i6d8ia0v'
|
||||
assert url['PASSWORD'] == 'wegauwhgeuioweg'
|
||||
assert url['PORT'] == 5431
|
||||
assert url['OPTIONS'] == {'options': '-c search_path=otherschema'}
|
||||
|
||||
def test_postgis_parsing(self):
|
||||
url = 'postgis://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com:5431/d8r82722r2kuvn'
|
||||
url = dj_database_url.parse(url)
|
||||
|
||||
Reference in New Issue
Block a user