From: Mike Bayer Date: Tue, 16 Oct 2007 21:33:21 +0000 (+0000) Subject: - string-based query param parsing/config file parser understands X-Git-Tag: rel_0_4_0~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cc0e7c796f61e17cb7050de0701905c65ce558eb;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - string-based query param parsing/config file parser understands wider range of string values for booleans [ticket:817] --- diff --git a/CHANGES b/CHANGES index fe25f6662a..ced5428e2a 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 633e6b0c1a..6fd3a81ef2 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 5bf9512fb8..cb922eb55d 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')