From de8475f237b51cf7b677fb8eb0ce0bad9ed9fe4b Mon Sep 17 00:00:00 2001 From: Tomasz Wysocki Date: Wed, 31 Dec 2014 17:25:39 +0100 Subject: [PATCH] Support special characters in user, password and name fields. --- dj_database_url.py | 6 +++--- test_dj_database_url.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/dj_database_url.py b/dj_database_url.py index 8a73c71..457eccd 100644 --- a/dj_database_url.py +++ b/dj_database_url.py @@ -82,9 +82,9 @@ def parse(url, engine=None): # Update with environment configuration. config.update({ - 'NAME': path or '', - 'USER': url.username or '', - 'PASSWORD': url.password or '', + 'NAME': urlparse.unquote(path or ''), + 'USER': urlparse.unquote(url.username or ''), + 'PASSWORD': urlparse.unquote(url.password or ''), 'HOST': hostname, 'PORT': url.port or '', }) diff --git a/test_dj_database_url.py b/test_dj_database_url.py index 001960a..d0fb613 100644 --- a/test_dj_database_url.py +++ b/test_dj_database_url.py @@ -34,6 +34,17 @@ class DatabaseTestSuite(unittest.TestCase): assert url['PASSWORD'] == '' assert url['PORT'] == '' + def test_postgres_parsing_with_special_characters(self): + url = 'postgres://%23user:%23password@ec2-107-21-253-135.compute-1.amazonaws.com:5431/%23database' + url = dj_database_url.parse(url) + + assert url['ENGINE'] == 'django.db.backends.postgresql_psycopg2' + assert url['NAME'] == '#database' + assert url['HOST'] == 'ec2-107-21-253-135.compute-1.amazonaws.com' + assert url['USER'] == '#user' + assert url['PASSWORD'] == '#password' + assert url['PORT'] == 5431 + 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)