summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-10-16 21:33:21 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-10-16 21:33:21 +0000
commitcc0e7c796f61e17cb7050de0701905c65ce558eb (patch)
tree1c63b86a5ae37a6b5c44bbecf86182d4c415f43b
parenta54deba01d07e8e0971db31a96379d275ccfb0d3 (diff)
downloadsqlalchemy-cc0e7c796f61e17cb7050de0701905c65ce558eb.tar.gz
- string-based query param parsing/config file parser understands
wider range of string values for booleans [ticket:817]
-rw-r--r--CHANGES3
-rw-r--r--lib/sqlalchemy/util.py16
-rw-r--r--test/engine/parseconnect.py6
3 files changed, 21 insertions, 4 deletions
diff --git a/CHANGES b/CHANGES
index fe25f6662..ced5428e2 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,9 @@ CHANGES
- Added partial index support for PostgreSQL. Use the postgres_where keyword
on the Index.
+- string-based query param parsing/config file parser understands
+ wider range of string values for booleans [ticket:817]
+
- backref remove object operation doesn't fail if the other-side
collection doesn't contain the item, supports noload collections
[ticket:813]
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py
index 633e6b0c1..6fd3a81ef 100644
--- a/lib/sqlalchemy/util.py
+++ b/lib/sqlalchemy/util.py
@@ -153,6 +153,18 @@ def get_func_kwargs(func):
"""Return the full set of legal kwargs for the given `func`."""
return [vn for vn in func.func_code.co_varnames]
+# from paste.deploy.converters
+def asbool(obj):
+ if isinstance(obj, (str, unicode)):
+ obj = obj.strip().lower()
+ if obj in ['true', 'yes', 'on', 'y', 't', '1']:
+ return True
+ elif obj in ['false', 'no', 'off', 'n', 'f', '0']:
+ return False
+ else:
+ raise ValueError("String is not true/false: %r" % obj)
+ return bool(obj)
+
def coerce_kw_type(kw, key, type_, flexi_bool=True):
"""If 'key' is present in dict 'kw', coerce its value to type 'type_' if
necessary. If 'flexi_bool' is True, the string '0' is considered false
@@ -160,8 +172,8 @@ def coerce_kw_type(kw, key, type_, flexi_bool=True):
"""
if key in kw and type(kw[key]) is not type_ and kw[key] is not None:
- if type_ is bool and flexi_bool and kw[key] == '0':
- kw[key] = False
+ if type_ is bool and flexi_bool:
+ kw[key] = asbool(kw[key])
else:
kw[key] = type_(kw[key])
diff --git a/test/engine/parseconnect.py b/test/engine/parseconnect.py
index 5bf9512fb..cb922eb55 100644
--- a/test/engine/parseconnect.py
+++ b/test/engine/parseconnect.py
@@ -58,7 +58,7 @@ class CreateEngineTest(PersistTest):
[prefixed]
sqlalchemy.url=postgres://scott:tiger@somehost/test?fooz=somevalue
sqlalchemy.convert_unicode=0
-sqlalchemy.echo=0
+sqlalchemy.echo=false
sqlalchemy.echo_pool=1
sqlalchemy.max_overflow=2
sqlalchemy.pool_recycle=50
@@ -102,12 +102,14 @@ pool_timeout=10
config = {
'sqlalchemy.url':'postgres://scott:tiger@somehost/test?fooz=somevalue',
- 'sqlalchemy.pool_recycle':'50'
+ 'sqlalchemy.pool_recycle':'50',
+ 'sqlalchemy.echo':'true'
}
e = engine_from_config(config, module=dbapi)
assert e.pool._recycle == 50
assert e.url == url.make_url('postgres://scott:tiger@somehost/test?fooz=somevalue')
+ assert e.echo is True
def test_custom(self):
dbapi = MockDBAPI(foober=12, lala=18, hoho={'this':'dict'}, fooz='somevalue')