diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-07 12:01:19 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-07 12:01:19 -0400 |
| commit | 5a02c9e73fe7e4bcafa6c07bce29131eefb5a022 (patch) | |
| tree | 9c2d4a43a5ce22ad08d0417c80833b12c2cd483f /lib/sqlalchemy/engine/util.py | |
| parent | a67df35e52f9bff3116c12ceff84e1a3308b276c (diff) | |
| download | sqlalchemy-5a02c9e73fe7e4bcafa6c07bce29131eefb5a022.tar.gz | |
- break out engine/base.py into base, interfaces, result, util.
- remove deprecated 0.7 engine methods
Diffstat (limited to 'lib/sqlalchemy/engine/util.py')
| -rw-r--r-- | lib/sqlalchemy/engine/util.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/sqlalchemy/engine/util.py b/lib/sqlalchemy/engine/util.py new file mode 100644 index 000000000..bbbfe3cff --- /dev/null +++ b/lib/sqlalchemy/engine/util.py @@ -0,0 +1,85 @@ +# engine/util.py +# Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file> +# +# This module is part of SQLAlchemy and is released under +# the MIT License: http://www.opensource.org/licenses/mit-license.php + +from .. import util + +def _coerce_config(configuration, prefix): + """Convert configuration values to expected types.""" + + options = dict((key[len(prefix):], configuration[key]) + for key in configuration + if key.startswith(prefix)) + for option, type_ in ( + ('convert_unicode', util.bool_or_str('force')), + ('pool_timeout', int), + ('echo', util.bool_or_str('debug')), + ('echo_pool', util.bool_or_str('debug')), + ('pool_recycle', int), + ('pool_size', int), + ('max_overflow', int), + ('pool_threadlocal', bool), + ('use_native_unicode', bool), + ): + util.coerce_kw_type(options, option, type_) + return options + + +def _distill_params(multiparams, params): + """Given arguments from the calling form *multiparams, **params, + return a list of bind parameter structures, usually a list of + dictionaries. + + In the case of 'raw' execution which accepts positional parameters, + it may be a list of tuples or lists. + + """ + + if not multiparams: + if params: + return [params] + else: + return [] + elif len(multiparams) == 1: + zero = multiparams[0] + if isinstance(zero, (list, tuple)): + if not zero or hasattr(zero[0], '__iter__') and \ + not hasattr(zero[0], 'strip'): + # execute(stmt, [{}, {}, {}, ...]) + # execute(stmt, [(), (), (), ...]) + return zero + else: + # execute(stmt, ("value", "value")) + return [zero] + elif hasattr(zero, 'keys'): + # execute(stmt, {"key":"value"}) + return [zero] + else: + # execute(stmt, "value") + return [[zero]] + else: + if hasattr(multiparams[0], '__iter__') and \ + not hasattr(multiparams[0], 'strip'): + return multiparams + else: + return [multiparams] + +def connection_memoize(key): + """Decorator, memoize a function in a connection.info stash. + + Only applicable to functions which take no arguments other than a + connection. The memo will be stored in ``connection.info[key]``. + """ + + @util.decorator + def decorated(fn, self, connection): + connection = connection.connect() + try: + return connection.info[key] + except KeyError: + connection.info[key] = val = fn(self, connection) + return val + + return decorated |
