Commits

Mike Bayer committed 9edac80

- string-based query param parsing/config file parser understands
wider range of string values for booleans [ticket:817]

Comments (0)

Files changed (3)

 - 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]

lib/sqlalchemy/util.py

     """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
     """
 
     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])
 

test/engine/parseconnect.py

 [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
 
         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')