From cf8f3dc4d2cde04a1f822627db522c1b021c3359 Mon Sep 17 00:00:00 2001 From: mattack108 Date: Sun, 14 Jul 2013 21:50:52 +0100 Subject: [PATCH 1/4] Allow to use `url` defined as env variable. --- dataset/__init__.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dataset/__init__.py b/dataset/__init__.py index b28eb49..0585378 100644 --- a/dataset/__init__.py +++ b/dataset/__init__.py @@ -1,3 +1,4 @@ +import os # shut up useless SA warning: import warnings warnings.filterwarnings( @@ -10,10 +11,11 @@ from dataset.freeze.app import freeze __all__ = ['Database', 'Table', 'freeze', 'connect'] -def connect(url, reflectMetadata=True): +def connect(url=None, reflectMetadata=True): """ - Opens a new connection to a database. *url* can be any valid `SQLAlchemy engine URL`_. Returns - an instance of :py:class:`Database `. Set *reflectMetadata* to False if you + Opens a new connection to a database. *url* can be any valid `SQLAlchemy engine URL`_. + If *url* is not defined it will try to use *DATABASE_URL* from environment variable. + Returns an instance of :py:class:`Database `. Set *reflectMetadata* to False if you don't want the entire database schema to be pre-loaded. This significantly speeds up connecting to large databases with lots of tables. :: @@ -22,4 +24,5 @@ def connect(url, reflectMetadata=True): .. _SQLAlchemy Engine URL: http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine """ + url = os.environ.get('DATABASE_URL', url) return Database(url, reflectMetadata) From 57a7c58f63b44dca298ae8399a6ff7191eae131d Mon Sep 17 00:00:00 2001 From: mattack108 Date: Sun, 14 Jul 2013 21:51:35 +0100 Subject: [PATCH 2/4] Test case when `url` comes as env variable. --- test/test_persistence.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/test/test_persistence.py b/test/test_persistence.py index a29056c..4afa10c 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -1,3 +1,4 @@ +import os import unittest from datetime import datetime @@ -9,11 +10,19 @@ from sample_data import TEST_DATA class DatabaseTestCase(unittest.TestCase): def setUp(self): - self.db = connect('sqlite:///:memory:') + os.environ['DATABASE_URL'] = 'sqlite:///:memory:' + self.db = connect() self.tbl = self.db['weather'] for row in TEST_DATA: self.tbl.insert(row) + def tearDown(self): + # ensure env variable was unset + del os.environ['DATABASE_URL'] + + def test_valid_database_url(self): + assert self.db.url, os.environ['DATABASE_URL'] + def test_tables(self): assert self.db.tables == ['weather'], self.db.tables @@ -35,7 +44,7 @@ class DatabaseTestCase(unittest.TestCase): class TableTestCase(unittest.TestCase): def setUp(self): - self.db = connect('sqlite:///:memory:') + self.db = connect(url='sqlite:///:memory:') self.tbl = self.db['weather'] for row in TEST_DATA: self.tbl.insert(row) From a9be8300aa2c311407c366a6ec261b84a828f28d Mon Sep 17 00:00:00 2001 From: mattack108 Date: Sun, 14 Jul 2013 22:05:52 +0100 Subject: [PATCH 3/4] Update docs. --- docs/quickstart.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/quickstart.rst b/docs/quickstart.rst index a2e65e1..715b626 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -23,6 +23,11 @@ To connect to a database you need to identify it by its `URL Date: Sun, 14 Jul 2013 22:07:42 +0100 Subject: [PATCH 4/4] No needs for positional args. --- test/test_persistence.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_persistence.py b/test/test_persistence.py index 4afa10c..893ceb3 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -44,7 +44,7 @@ class DatabaseTestCase(unittest.TestCase): class TableTestCase(unittest.TestCase): def setUp(self): - self.db = connect(url='sqlite:///:memory:') + self.db = connect('sqlite:///:memory:') self.tbl = self.db['weather'] for row in TEST_DATA: self.tbl.insert(row)