mirror of
https://github.com/jazzband/dj-database-url.git
synced 2026-03-16 22:20:24 +00:00
Merge pull request #51 from peterfarrell/feature_conn_max_age
Added support for CONN_MAX_AGE for Django 1.6+
This commit is contained in:
commit
063ff555dd
3 changed files with 26 additions and 6 deletions
11
README.rst
11
README.rst
|
|
@ -24,14 +24,19 @@ Usage
|
|||
-----
|
||||
|
||||
Configure your database in ``settings.py`` from ``DATABASE_URL``
|
||||
(``default`` is optional)::
|
||||
(``default`` and ``conn_max_age`` are optional)::
|
||||
|
||||
import dj_database_url
|
||||
DATABASES = {'default': dj_database_url.config(default='postgres://...')}
|
||||
DATABASES = {'default': dj_database_url.config(default='postgres://...', conn_max_age=600 )}
|
||||
|
||||
Parse an arbitrary Database URL::
|
||||
|
||||
DATABASES = {'default': dj_database_url.parse('postgres://...')}
|
||||
DATABASES = {'default': dj_database_url.parse('postgres://...', conn_max_age=600)}
|
||||
|
||||
The ``conn_max_age`` attribute is the lifetime of a database connection in seconds
|
||||
and is available in Django 1.6+. If you do not set a value, it will default to ``0``
|
||||
which is Django's historical behavior of using a new database connection on each
|
||||
request. Use ``None`` for unlimited persistent connections.
|
||||
|
||||
URL schema
|
||||
----------
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ SCHEMES = {
|
|||
}
|
||||
|
||||
|
||||
def config(env=DEFAULT_ENV, default=None, engine=None):
|
||||
def config(env=DEFAULT_ENV, default=None, engine=None, conn_max_age=0):
|
||||
"""Returns configured DATABASE dictionary from DATABASE_URL."""
|
||||
|
||||
config = {}
|
||||
|
|
@ -43,12 +43,12 @@ def config(env=DEFAULT_ENV, default=None, engine=None):
|
|||
s = os.environ.get(env, default)
|
||||
|
||||
if s:
|
||||
config = parse(s, engine)
|
||||
config = parse(s, engine, conn_max_age)
|
||||
|
||||
return config
|
||||
|
||||
|
||||
def parse(url, engine=None):
|
||||
def parse(url, engine=None, conn_max_age=0):
|
||||
"""Parses a database URL."""
|
||||
|
||||
if url == 'sqlite://:memory:':
|
||||
|
|
@ -87,6 +87,7 @@ def parse(url, engine=None):
|
|||
'PASSWORD': url.password or '',
|
||||
'HOST': hostname,
|
||||
'PORT': url.port or '',
|
||||
'CONN_MAX_AGE': conn_max_age,
|
||||
})
|
||||
|
||||
if engine:
|
||||
|
|
|
|||
|
|
@ -110,6 +110,20 @@ class DatabaseTestSuite(unittest.TestCase):
|
|||
url = dj_database_url.config(engine=engine)
|
||||
|
||||
assert url['ENGINE'] == engine
|
||||
|
||||
def test_parse_conn_max_age_setting(self):
|
||||
conn_max_age = 600
|
||||
url = 'mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true'
|
||||
url = dj_database_url.parse(url, conn_max_age=conn_max_age)
|
||||
|
||||
assert url['CONN_MAX_AGE'] == conn_max_age
|
||||
|
||||
def test_config_conn_max_age_setting(self):
|
||||
conn_max_age = 600
|
||||
os.environ['DATABASE_URL'] = 'mysql://bea6eb025ca0d8:69772142@us-cdbr-east.cleardb.com/heroku_97681db3eff7580?reconnect=true'
|
||||
url = dj_database_url.config(conn_max_age=conn_max_age)
|
||||
|
||||
assert url['CONN_MAX_AGE'] == conn_max_age
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
Loading…
Reference in a new issue