Add make_engine_from_config()
method for AppHandler
and other misc. tweaks needed to get this incorporated into Rattail
This commit is contained in:
parent
afd2d005a3
commit
b458272207
8 changed files with 177 additions and 91 deletions
|
@ -7,48 +7,11 @@ from unittest import TestCase
|
|||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy.engine import Engine
|
||||
from sqlalchemy.pool import NullPool
|
||||
|
||||
from wuttjamaican.db import conf
|
||||
from wuttjamaican.conf import WuttaConfig
|
||||
|
||||
|
||||
class TestEngineFromConfig(TestCase):
|
||||
|
||||
def test_basic(self):
|
||||
engine = conf.engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertIsInstance(engine, Engine)
|
||||
|
||||
def test_poolclass(self):
|
||||
|
||||
engine = conf.engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertNotIsInstance(engine.pool, NullPool)
|
||||
|
||||
engine = conf.engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
'sqlalchemy.poolclass': 'sqlalchemy.pool:NullPool',
|
||||
})
|
||||
self.assertIsInstance(engine.pool, NullPool)
|
||||
|
||||
def test_pool_pre_ping(self):
|
||||
|
||||
engine = conf.engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertFalse(engine.pool._pre_ping)
|
||||
|
||||
engine = conf.engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
'sqlalchemy.pool_pre_ping': 'true',
|
||||
})
|
||||
self.assertTrue(engine.pool._pre_ping)
|
||||
|
||||
|
||||
class TestGetEngines(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
|
|
@ -5,6 +5,8 @@ from unittest.mock import patch, MagicMock
|
|||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy.engine import Engine
|
||||
from sqlalchemy.pool import NullPool
|
||||
|
||||
from wuttjamaican import app, db
|
||||
|
||||
|
@ -19,6 +21,38 @@ class TestAppHandler(TestCase):
|
|||
self.assertIs(self.app.config, self.config)
|
||||
self.assertEqual(self.app.handlers, {})
|
||||
|
||||
def test_make_engine_from_config_basic(self):
|
||||
engine = self.app.make_engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertIsInstance(engine, Engine)
|
||||
|
||||
def test_make_engine_from_config_poolclass(self):
|
||||
|
||||
engine = self.app.make_engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertNotIsInstance(engine.pool, NullPool)
|
||||
|
||||
engine = self.app.make_engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
'sqlalchemy.poolclass': 'sqlalchemy.pool:NullPool',
|
||||
})
|
||||
self.assertIsInstance(engine.pool, NullPool)
|
||||
|
||||
def test_make_engine_from_config_pool_pre_ping(self):
|
||||
|
||||
engine = self.app.make_engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
})
|
||||
self.assertFalse(engine.pool._pre_ping)
|
||||
|
||||
engine = self.app.make_engine_from_config({
|
||||
'sqlalchemy.url': 'sqlite://',
|
||||
'sqlalchemy.pool_pre_ping': 'true',
|
||||
})
|
||||
self.assertTrue(engine.pool._pre_ping)
|
||||
|
||||
def test_make_session(self):
|
||||
session = self.app.make_session()
|
||||
self.assertIsInstance(session, db.Session.class_)
|
||||
|
|
|
@ -117,6 +117,23 @@ baz = B
|
|||
self.assertIsNone(config.get('foo.bar'))
|
||||
self.assertEqual(config.get('foo.baz'), 'B')
|
||||
|
||||
def test_prioritized_files(self):
|
||||
first = self.write_file('first.conf', """\
|
||||
[foo]
|
||||
bar = 1
|
||||
""")
|
||||
|
||||
second = self.write_file('second.conf', """\
|
||||
[wutta.config]
|
||||
require = %(here)s/first.conf
|
||||
""")
|
||||
|
||||
config = conf.WuttaConfig(files=[second])
|
||||
files = config.get_prioritized_files()
|
||||
self.assertEqual(len(files), 2)
|
||||
self.assertEqual(files[0], second)
|
||||
self.assertEqual(files[1], first)
|
||||
|
||||
def test_constructor_defaults(self):
|
||||
config = conf.WuttaConfig()
|
||||
self.assertEqual(config.defaults, {})
|
||||
|
@ -351,6 +368,24 @@ configure_logging = true
|
|||
config = conf.WuttaConfig()
|
||||
self.assertRaises(ConfigurationError, config.require, 'foo')
|
||||
|
||||
def test_get_bool(self):
|
||||
config = conf.WuttaConfig()
|
||||
self.assertFalse(config.get_bool('foo.bar'))
|
||||
config.setdefault('foo.bar', 'true')
|
||||
self.assertTrue(config.get_bool('foo.bar'))
|
||||
|
||||
def test_get_int(self):
|
||||
config = conf.WuttaConfig()
|
||||
self.assertIsNone(config.get_int('foo.bar'))
|
||||
config.setdefault('foo.bar', '42')
|
||||
self.assertEqual(config.get_int('foo.bar'), 42)
|
||||
|
||||
def test_get_list(self):
|
||||
config = conf.WuttaConfig()
|
||||
self.assertEqual(config.get_list('foo.bar'), [])
|
||||
config.setdefault('foo.bar', 'hello world')
|
||||
self.assertEqual(config.get_list('foo.bar'), ['hello', 'world'])
|
||||
|
||||
|
||||
class TestGenericDefaultFiles(TestCase):
|
||||
|
||||
|
|
|
@ -190,6 +190,11 @@ class TestParseList(TestCase):
|
|||
self.assertIsInstance(value, list)
|
||||
self.assertEqual(len(value), 0)
|
||||
|
||||
def test_list_instance(self):
|
||||
mylist = []
|
||||
value = util.parse_list(mylist)
|
||||
self.assertIs(value, mylist)
|
||||
|
||||
def test_single_value(self):
|
||||
value = util.parse_list('foo')
|
||||
self.assertEqual(len(value), 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue