From 4b614b9b35cd2baddb7ca67c04bee5d70ec6a172 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 27 Apr 2013 19:53:57 -0400 Subject: - the raw 2to3 run - went through examples/ and cleaned out excess list() calls --- lib/sqlalchemy/engine/base.py | 22 +++++++------- lib/sqlalchemy/engine/ddl.py | 8 ++--- lib/sqlalchemy/engine/default.py | 60 +++++++++++++++++++------------------ lib/sqlalchemy/engine/reflection.py | 18 +++++------ lib/sqlalchemy/engine/result.py | 38 +++++++++++------------ lib/sqlalchemy/engine/strategies.py | 25 ++++++++-------- lib/sqlalchemy/engine/url.py | 18 +++++------ 7 files changed, 96 insertions(+), 93 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index b4c9b1e1c..9eb3d6128 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -9,7 +9,7 @@ """ -from __future__ import with_statement + import sys from .. import exc, schema, util, log, interfaces from ..sql import expression, util as sql_util @@ -460,7 +460,7 @@ class Connection(Connectable): try: self.engine.dialect.do_begin(self.connection) - except Exception, e: + except Exception as e: self._handle_dbapi_exception(e, None, None, None, None) def _rollback_impl(self): @@ -473,7 +473,7 @@ class Connection(Connectable): try: self.engine.dialect.do_rollback(self.connection) self.__transaction = None - except Exception, e: + except Exception as e: self._handle_dbapi_exception(e, None, None, None, None) else: self.__transaction = None @@ -487,7 +487,7 @@ class Connection(Connectable): try: self.engine.dialect.do_commit(self.connection) self.__transaction = None - except Exception, e: + except Exception as e: self._handle_dbapi_exception(e, None, None, None, None) def _savepoint_impl(self, name=None): @@ -688,7 +688,7 @@ class Connection(Connectable): dialect = self.dialect ctx = dialect.execution_ctx_cls._init_default( dialect, self, conn) - except Exception, e: + except Exception as e: self._handle_dbapi_exception(e, None, None, None, None) ret = ctx._exec_default(default, None) @@ -734,7 +734,7 @@ class Connection(Connectable): distilled_params = _distill_params(multiparams, params) if distilled_params: - keys = distilled_params[0].keys() + keys = list(distilled_params[0].keys()) else: keys = [] @@ -822,7 +822,7 @@ class Connection(Connectable): conn = self._revalidate_connection() context = constructor(dialect, self, conn, *args) - except Exception, e: + except Exception as e: self._handle_dbapi_exception(e, str(statement), parameters, None, None) @@ -865,7 +865,7 @@ class Connection(Connectable): statement, parameters, context) - except Exception, e: + except Exception as e: self._handle_dbapi_exception( e, statement, @@ -939,7 +939,7 @@ class Connection(Connectable): cursor, statement, parameters) - except Exception, e: + except Exception as e: self._handle_dbapi_exception( e, statement, @@ -954,7 +954,7 @@ class Connection(Connectable): """ try: cursor.close() - except Exception, e: + except Exception as e: try: ex_text = str(e) except TypeError: @@ -1045,7 +1045,7 @@ class Connection(Connectable): Compiled: _execute_compiled, schema.SchemaItem: _execute_default, schema.DDLElement: _execute_ddl, - basestring: _execute_text + str: _execute_text } def default_schema_name(self): diff --git a/lib/sqlalchemy/engine/ddl.py b/lib/sqlalchemy/engine/ddl.py index c61a9d59c..56f475e30 100644 --- a/lib/sqlalchemy/engine/ddl.py +++ b/lib/sqlalchemy/engine/ddl.py @@ -52,10 +52,10 @@ class SchemaGenerator(DDLBase): if self.tables is not None: tables = self.tables else: - tables = metadata.tables.values() + tables = list(metadata.tables.values()) collection = [t for t in sql_util.sort_tables(tables) if self._can_create_table(t)] - seq_coll = [s for s in metadata._sequences.values() + seq_coll = [s for s in list(metadata._sequences.values()) if s.column is None and self._can_create_sequence(s)] metadata.dispatch.before_create(metadata, self.connection, @@ -120,7 +120,7 @@ class SchemaDropper(DDLBase): if self.tables is not None: tables = self.tables else: - tables = metadata.tables.values() + tables = list(metadata.tables.values()) collection = [ t @@ -130,7 +130,7 @@ class SchemaDropper(DDLBase): seq_coll = [ s - for s in metadata._sequences.values() + for s in list(metadata._sequences.values()) if s.column is None and self._can_drop_sequence(s) ] diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index daa9fe085..9dda6d81e 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -57,17 +57,18 @@ class DefaultDialect(interfaces.Dialect): # *not* the FLOAT type however. supports_native_decimal = False - # Py3K - #supports_unicode_statements = True - #supports_unicode_binds = True - #returns_unicode_strings = True - #description_encoding = None - # Py2K - supports_unicode_statements = False - supports_unicode_binds = False - returns_unicode_strings = False - description_encoding = 'use_encoding' - # end Py2K +# start Py3K + supports_unicode_statements = True + supports_unicode_binds = True + returns_unicode_strings = True + description_encoding = None +# end Py3K +# start Py2K +# supports_unicode_statements = False +# supports_unicode_binds = False +# returns_unicode_strings = False +# description_encoding = 'use_encoding' +# end Py2K name = 'default' @@ -201,14 +202,15 @@ class DefaultDialect(interfaces.Dialect): return None def _check_unicode_returns(self, connection): - # Py2K - if self.supports_unicode_statements: - cast_to = unicode - else: - cast_to = str - # end Py2K - # Py3K - #cast_to = str +# start Py2K +# if self.supports_unicode_statements: +# cast_to = unicode +# else: +# cast_to = str +# end Py2K +# start Py3K + cast_to = str +# end Py3K def check_unicode(formatstr, type_): cursor = connection.connection.cursor() @@ -226,8 +228,8 @@ class DefaultDialect(interfaces.Dialect): ) row = cursor.fetchone() - return isinstance(row[0], unicode) - except self.dbapi.Error, de: + return isinstance(row[0], str) + except self.dbapi.Error as de: util.warn("Exception attempting to " "detect unicode returns: %r" % de) return False @@ -373,10 +375,10 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.execution_options.update(connection._execution_options) if not dialect.supports_unicode_statements: - self.unicode_statement = unicode(compiled) + self.unicode_statement = str(compiled) self.statement = dialect._encoder(self.unicode_statement)[0] else: - self.statement = self.unicode_statement = unicode(compiled) + self.statement = self.unicode_statement = str(compiled) self.cursor = self.create_cursor() self.compiled_parameters = [] @@ -414,7 +416,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.result_map = compiled.result_map - self.unicode_statement = unicode(compiled) + self.unicode_statement = str(compiled) if not dialect.supports_unicode_statements: self.statement = self.unicode_statement.encode( self.dialect.encoding) @@ -519,7 +521,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.executemany = len(parameters) > 1 if not dialect.supports_unicode_statements and \ - isinstance(statement, unicode): + isinstance(statement, str): self.unicode_statement = statement self.statement = dialect._encoder(statement)[0] else: @@ -573,7 +575,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): """ conn = self.root_connection - if isinstance(stmt, unicode) and \ + if isinstance(stmt, str) and \ not self.dialect.supports_unicode_statements: stmt = self.dialect._encoder(stmt)[0] @@ -734,12 +736,12 @@ class DefaultExecutionContext(interfaces.ExecutionContext): inputsizes.append(dbtype) try: self.cursor.setinputsizes(*inputsizes) - except Exception, e: + except Exception as e: self.root_connection._handle_dbapi_exception( e, None, None, None, self) else: inputsizes = {} - for key in self.compiled.bind_names.values(): + for key in list(self.compiled.bind_names.values()): typeengine = types[key] dbtype = typeengine.dialect_impl(self.dialect).\ get_dbapi_type(self.dialect.dbapi) @@ -752,7 +754,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): inputsizes[key] = dbtype try: self.cursor.setinputsizes(**inputsizes) - except Exception, e: + except Exception as e: self.root_connection._handle_dbapi_exception( e, None, None, None, self) diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py index 90f21db09..cf4a1d532 100644 --- a/lib/sqlalchemy/engine/reflection.py +++ b/lib/sqlalchemy/engine/reflection.py @@ -41,8 +41,8 @@ def cache(fn, self, con, *args, **kw): return fn(self, con, *args, **kw) key = ( fn.__name__, - tuple(a for a in args if isinstance(a, basestring)), - tuple((k, v) for k, v in kw.iteritems() if isinstance(v, (basestring, int, float))) + tuple(a for a in args if isinstance(a, str)), + tuple((k, v) for k, v in kw.items() if isinstance(v, (str, int, float))) ) ret = info_cache.get(key) if ret is None: @@ -381,16 +381,16 @@ class Inspector(object): # table.kwargs will need to be passed to each reflection method. Make # sure keywords are strings. tblkw = table.kwargs.copy() - for (k, v) in tblkw.items(): + for (k, v) in list(tblkw.items()): del tblkw[k] tblkw[str(k)] = v - # Py2K - if isinstance(schema, str): - schema = schema.decode(dialect.encoding) - if isinstance(table_name, str): - table_name = table_name.decode(dialect.encoding) - # end Py2K +# start Py2K +# if isinstance(schema, str): +# schema = schema.decode(dialect.encoding) +# if isinstance(table_name, str): +# table_name = table_name.decode(dialect.encoding) +# end Py2K # columns found_table = False diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 88930081e..0bd501423 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -8,7 +8,7 @@ and :class:`.RowProxy.""" -from itertools import izip + from .. import exc, types, util from ..sql import expression import collections @@ -55,7 +55,7 @@ except ImportError: return list(self) def __iter__(self): - for processor, value in izip(self._processors, self._row): + for processor, value in zip(self._processors, self._row): if processor is None: yield value else: @@ -72,7 +72,7 @@ except ImportError: except TypeError: if isinstance(key, slice): l = [] - for processor, value in izip(self._processors[key], + for processor, value in zip(self._processors[key], self._row[key]): if processor is None: l.append(value) @@ -93,7 +93,7 @@ except ImportError: def __getattr__(self, name): try: return self[name] - except KeyError, e: + except KeyError as e: raise AttributeError(e.args[0]) @@ -142,7 +142,7 @@ class RowProxy(BaseRowProxy): def items(self): """Return a list of tuples, each tuple containing a key/value pair.""" # TODO: no coverage here - return [(key, self[key]) for key in self.iterkeys()] + return [(key, self[key]) for key in self.keys()] def keys(self): """Return the list of keys as strings represented by this RowProxy.""" @@ -274,7 +274,7 @@ class ResultMetaData(object): def _key_fallback(self, key, raiseerr=True): map = self._keymap result = None - if isinstance(key, basestring): + if isinstance(key, str): result = map.get(key if self.case_sensitive else key.lower()) # fallback for targeting a ColumnElement to a textual expression # this is a rare use case which only occurs when matching text() @@ -328,8 +328,8 @@ class ResultMetaData(object): return { '_pickled_keymap': dict( (key, index) - for key, (processor, obj, index) in self._keymap.iteritems() - if isinstance(key, (basestring, int)) + for key, (processor, obj, index) in self._keymap.items() + if isinstance(key, (str, int)) ), 'keys': self.keys, "case_sensitive": self.case_sensitive, @@ -338,9 +338,9 @@ class ResultMetaData(object): def __setstate__(self, state): # the row has been processed at pickling time so we don't need any # processor anymore - self._processors = [None for _ in xrange(len(state['keys']))] + self._processors = [None for _ in range(len(state['keys']))] self._keymap = keymap = {} - for key, index in state['_pickled_keymap'].iteritems(): + for key, index in state['_pickled_keymap'].items(): # not preserving "obj" here, unfortunately our # proxy comparison fails with the unpickle keymap[key] = (None, None, index) @@ -440,7 +440,7 @@ class ResultProxy(object): """ try: return self.context.rowcount - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self.cursor, self.context) @@ -462,7 +462,7 @@ class ResultProxy(object): """ try: return self._saved_cursor.lastrowid - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self._saved_cursor, self.context) @@ -746,7 +746,7 @@ class ResultProxy(object): l = self.process_rows(self._fetchall_impl()) self.close() return l - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self.cursor, self.context) @@ -765,7 +765,7 @@ class ResultProxy(object): if len(l) == 0: self.close() return l - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self.cursor, self.context) @@ -784,7 +784,7 @@ class ResultProxy(object): else: self.close() return None - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self.cursor, self.context) @@ -800,7 +800,7 @@ class ResultProxy(object): try: row = self._fetchone_impl() - except Exception, e: + except Exception as e: self.connection._handle_dbapi_exception( e, None, None, self.cursor, self.context) @@ -966,9 +966,9 @@ class BufferedColumnResultProxy(ResultProxy): # constructed. metadata._orig_processors = metadata._processors # replace the all type processors by None processors. - metadata._processors = [None for _ in xrange(len(metadata.keys))] + metadata._processors = [None for _ in range(len(metadata.keys))] keymap = {} - for k, (func, obj, index) in metadata._keymap.iteritems(): + for k, (func, obj, index) in metadata._keymap.items(): keymap[k] = (None, obj, index) self._metadata._keymap = keymap @@ -989,7 +989,7 @@ class BufferedColumnResultProxy(ResultProxy): if size is None: return self.fetchall() l = [] - for i in xrange(size): + for i in range(size): row = self.fetchone() if row is None: break diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py index 4c81df8f0..bed14c671 100644 --- a/lib/sqlalchemy/engine/strategies.py +++ b/lib/sqlalchemy/engine/strategies.py @@ -78,20 +78,21 @@ class DefaultEngineStrategy(EngineStrategy): def connect(): try: return dialect.connect(*cargs, **cparams) - except Exception, e: + except Exception as e: invalidated = dialect.is_disconnect(e, None, None) - # Py3K - #raise exc.DBAPIError.instance(None, None, - # e, dialect.dbapi.Error, - # connection_invalidated=invalidated - #) from e - # Py2K - import sys - raise exc.DBAPIError.instance( - None, None, e, dialect.dbapi.Error, +# start Py3K + raise exc.DBAPIError.instance(None, None, + e, dialect.dbapi.Error, connection_invalidated=invalidated - ), None, sys.exc_info()[2] - # end Py2K + ) from e +# end Py3K +# start Py2K +# import sys +# raise exc.DBAPIError.instance( +# None, None, e, dialect.dbapi.Error, +# connection_invalidated=invalidated +# ), None, sys.exc_info()[2] +# end Py2K creator = kwargs.pop('creator', connect) diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py index c4931b48c..45768c5dc 100644 --- a/lib/sqlalchemy/engine/url.py +++ b/lib/sqlalchemy/engine/url.py @@ -14,7 +14,7 @@ be used directly and is also accepted directly by ``create_engine()``. """ import re -import urllib +import urllib.request, urllib.parse, urllib.error from .. import exc, util from . import Dialect @@ -67,7 +67,7 @@ class URL(object): if self.username is not None: s += self.username if self.password is not None: - s += ':' + urllib.quote_plus(self.password) + s += ':' + urllib.parse.quote_plus(self.password) s += "@" if self.host is not None: s += self.host @@ -76,7 +76,7 @@ class URL(object): if self.database is not None: s += '/' + self.database if self.query: - keys = self.query.keys() + keys = list(self.query.keys()) keys.sort() s += '?' + "&".join("%s=%s" % (k, self.query[k]) for k in keys) return s @@ -150,7 +150,7 @@ def make_url(name_or_url): existing URL object is passed, just returns the object. """ - if isinstance(name_or_url, basestring): + if isinstance(name_or_url, str): return _parse_rfc1738_args(name_or_url) else: return name_or_url @@ -177,17 +177,17 @@ def _parse_rfc1738_args(name): tokens = components['database'].split('?', 2) components['database'] = tokens[0] query = (len(tokens) > 1 and dict(util.parse_qsl(tokens[1]))) or None - # Py2K - if query is not None: - query = dict((k.encode('ascii'), query[k]) for k in query) - # end Py2K +# start Py2K +# if query is not None: +# query = dict((k.encode('ascii'), query[k]) for k in query) +# end Py2K else: query = None components['query'] = query if components['password'] is not None: components['password'] = \ - urllib.unquote_plus(components['password']) + urllib.parse.unquote_plus(components['password']) name = components.pop('name') return URL(name, **components) -- cgit v1.2.1 From c926f0a9d8910c67554f053ed0f7902542679f0d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 27 Apr 2013 20:38:53 -0400 Subject: plugging away --- lib/sqlalchemy/engine/base.py | 6 ++--- lib/sqlalchemy/engine/ddl.py | 4 +-- lib/sqlalchemy/engine/default.py | 53 +++++++++++++++++----------------------- 3 files changed, 28 insertions(+), 35 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 9eb3d6128..dbc1ff820 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -3,7 +3,7 @@ # # This module is part of SQLAlchemy and is released under # the MIT License: http://www.opensource.org/licenses/mit-license.php - +from __future__ import with_statement """Defines :class:`.Connection` and :class:`.Engine`. @@ -734,7 +734,7 @@ class Connection(Connectable): distilled_params = _distill_params(multiparams, params) if distilled_params: - keys = list(distilled_params[0].keys()) + keys = list(distilled_params[0]) else: keys = [] @@ -1045,7 +1045,7 @@ class Connection(Connectable): Compiled: _execute_compiled, schema.SchemaItem: _execute_default, schema.DDLElement: _execute_ddl, - str: _execute_text + util.string_types[0]: _execute_text } def default_schema_name(self): diff --git a/lib/sqlalchemy/engine/ddl.py b/lib/sqlalchemy/engine/ddl.py index 56f475e30..6daa9be6b 100644 --- a/lib/sqlalchemy/engine/ddl.py +++ b/lib/sqlalchemy/engine/ddl.py @@ -55,7 +55,7 @@ class SchemaGenerator(DDLBase): tables = list(metadata.tables.values()) collection = [t for t in sql_util.sort_tables(tables) if self._can_create_table(t)] - seq_coll = [s for s in list(metadata._sequences.values()) + seq_coll = [s for s in metadata._sequences.values() if s.column is None and self._can_create_sequence(s)] metadata.dispatch.before_create(metadata, self.connection, @@ -130,7 +130,7 @@ class SchemaDropper(DDLBase): seq_coll = [ s - for s in list(metadata._sequences.values()) + for s in metadata._sequences.values() if s.column is None and self._can_drop_sequence(s) ] diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 9dda6d81e..e52aac427 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -57,18 +57,16 @@ class DefaultDialect(interfaces.Dialect): # *not* the FLOAT type however. supports_native_decimal = False -# start Py3K - supports_unicode_statements = True - supports_unicode_binds = True - returns_unicode_strings = True - description_encoding = None -# end Py3K -# start Py2K -# supports_unicode_statements = False -# supports_unicode_binds = False -# returns_unicode_strings = False -# description_encoding = 'use_encoding' -# end Py2K + if util.py3k: + supports_unicode_statements = True + supports_unicode_binds = True + returns_unicode_strings = True + description_encoding = None + else: + supports_unicode_statements = False + supports_unicode_binds = False + returns_unicode_strings = False + description_encoding = 'use_encoding' name = 'default' @@ -202,15 +200,10 @@ class DefaultDialect(interfaces.Dialect): return None def _check_unicode_returns(self, connection): -# start Py2K -# if self.supports_unicode_statements: -# cast_to = unicode -# else: -# cast_to = str -# end Py2K -# start Py3K - cast_to = str -# end Py3K + if util.py2k and not self.supports_unicode_statements: + cast_to = util.binary_type + else: + cast_to = util.text_type def check_unicode(formatstr, type_): cursor = connection.connection.cursor() @@ -219,8 +212,8 @@ class DefaultDialect(interfaces.Dialect): cursor.execute( cast_to( expression.select( - [expression.cast( - expression.literal_column( + [expression.cast( + expression.literal_column( "'test %s returns'" % formatstr), type_) ]).compile(dialect=self) @@ -228,7 +221,7 @@ class DefaultDialect(interfaces.Dialect): ) row = cursor.fetchone() - return isinstance(row[0], str) + return isinstance(row[0], util.string_types) except self.dbapi.Error as de: util.warn("Exception attempting to " "detect unicode returns: %r" % de) @@ -375,10 +368,10 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.execution_options.update(connection._execution_options) if not dialect.supports_unicode_statements: - self.unicode_statement = str(compiled) + self.unicode_statement = util.text_type(compiled) self.statement = dialect._encoder(self.unicode_statement)[0] else: - self.statement = self.unicode_statement = str(compiled) + self.statement = self.unicode_statement = util.text_type(compiled) self.cursor = self.create_cursor() self.compiled_parameters = [] @@ -416,7 +409,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.result_map = compiled.result_map - self.unicode_statement = str(compiled) + self.unicode_statement = util.text_type(compiled) if not dialect.supports_unicode_statements: self.statement = self.unicode_statement.encode( self.dialect.encoding) @@ -521,7 +514,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): self.executemany = len(parameters) > 1 if not dialect.supports_unicode_statements and \ - isinstance(statement, str): + isinstance(statement, util.text_type): self.unicode_statement = statement self.statement = dialect._encoder(statement)[0] else: @@ -575,8 +568,8 @@ class DefaultExecutionContext(interfaces.ExecutionContext): """ conn = self.root_connection - if isinstance(stmt, str) and \ - not self.dialect.supports_unicode_statements: + if isinstance(stmt, util.text_type) and \ + not self.dialect.supports_unicode_statements: stmt = self.dialect._encoder(stmt)[0] if self.dialect.positional: -- cgit v1.2.1 From 32e0a1624bf1ae3cb6309062adefd2f5c89b541c Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 27 Apr 2013 20:58:13 -0400 Subject: import of "sqlalchemy" and "sqlalchemy.orm" works. --- lib/sqlalchemy/engine/strategies.py | 19 ++++++------------- lib/sqlalchemy/engine/url.py | 13 +++++-------- 2 files changed, 11 insertions(+), 21 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py index bed14c671..c65986ca2 100644 --- a/lib/sqlalchemy/engine/strategies.py +++ b/lib/sqlalchemy/engine/strategies.py @@ -80,19 +80,12 @@ class DefaultEngineStrategy(EngineStrategy): return dialect.connect(*cargs, **cparams) except Exception as e: invalidated = dialect.is_disconnect(e, None, None) -# start Py3K - raise exc.DBAPIError.instance(None, None, - e, dialect.dbapi.Error, - connection_invalidated=invalidated - ) from e -# end Py3K -# start Py2K -# import sys -# raise exc.DBAPIError.instance( -# None, None, e, dialect.dbapi.Error, -# connection_invalidated=invalidated -# ), None, sys.exc_info()[2] -# end Py2K + util.raise_from_cause( + exc.DBAPIError.instance(None, None, + e, dialect.dbapi.Error, + connection_invalidated=invalidated + ) + ) creator = kwargs.pop('creator', connect) diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py index 45768c5dc..b7d56374e 100644 --- a/lib/sqlalchemy/engine/url.py +++ b/lib/sqlalchemy/engine/url.py @@ -14,7 +14,6 @@ be used directly and is also accepted directly by ``create_engine()``. """ import re -import urllib.request, urllib.parse, urllib.error from .. import exc, util from . import Dialect @@ -67,7 +66,7 @@ class URL(object): if self.username is not None: s += self.username if self.password is not None: - s += ':' + urllib.parse.quote_plus(self.password) + s += ':' + util.quote_plus(self.password) s += "@" if self.host is not None: s += self.host @@ -76,7 +75,7 @@ class URL(object): if self.database is not None: s += '/' + self.database if self.query: - keys = list(self.query.keys()) + keys = list(self.query) keys.sort() s += '?' + "&".join("%s=%s" % (k, self.query[k]) for k in keys) return s @@ -177,17 +176,15 @@ def _parse_rfc1738_args(name): tokens = components['database'].split('?', 2) components['database'] = tokens[0] query = (len(tokens) > 1 and dict(util.parse_qsl(tokens[1]))) or None -# start Py2K -# if query is not None: -# query = dict((k.encode('ascii'), query[k]) for k in query) -# end Py2K + if util.py2k and query is not None: + query = dict((k.encode('ascii'), query[k]) for k in query) else: query = None components['query'] = query if components['password'] is not None: components['password'] = \ - urllib.parse.unquote_plus(components['password']) + util.unquote_plus(components['password']) name = components.pop('name') return URL(name, **components) -- cgit v1.2.1 From d37431d7a5f7c930527ad9418756d102adebffdb Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 28 Apr 2013 12:55:22 -0400 Subject: result --- lib/sqlalchemy/engine/result.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 0bd501423..65ce3b742 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -274,7 +274,7 @@ class ResultMetaData(object): def _key_fallback(self, key, raiseerr=True): map = self._keymap result = None - if isinstance(key, str): + if isinstance(key, util.string_types): result = map.get(key if self.case_sensitive else key.lower()) # fallback for targeting a ColumnElement to a textual expression # this is a rare use case which only occurs when matching text() @@ -329,7 +329,7 @@ class ResultMetaData(object): '_pickled_keymap': dict( (key, index) for key, (processor, obj, index) in self._keymap.items() - if isinstance(key, (str, int)) + if isinstance(key, util.string_types + util.int_types) ), 'keys': self.keys, "case_sensitive": self.case_sensitive, -- cgit v1.2.1 From fc624dcfa40bf765bbfffa2fd964f73422e4dbe8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 28 Apr 2013 14:44:21 -0400 Subject: - test_types, test_compiler, with sqlite at least --- lib/sqlalchemy/engine/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index dbc1ff820..d4ced4cca 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -734,7 +734,9 @@ class Connection(Connectable): distilled_params = _distill_params(multiparams, params) if distilled_params: - keys = list(distilled_params[0]) + # need list() + keys() here to suit + # both dict and RowProxy + keys = list(distilled_params[0].keys()) else: keys = [] -- cgit v1.2.1 From 6f82c320b8834761fa9606119a4c2cbc6c3312f1 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 4 May 2013 14:24:20 -0400 Subject: use logging to output exc_info here --- lib/sqlalchemy/engine/base.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index d4ced4cca..c2ba0922b 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -956,17 +956,11 @@ class Connection(Connectable): """ try: cursor.close() - except Exception as e: - try: - ex_text = str(e) - except TypeError: - ex_text = repr(e) - if not self.closed: - self.connection._logger.warn( - "Error closing cursor: %s", ex_text) - - if isinstance(e, (SystemExit, KeyboardInterrupt)): - raise + except (SystemExit, KeyboardInterrupt): + raise + except Exception: + self.connection._logger.error( + "Error closing cursor", exc_info=True) _reentrant_error = False _is_disconnect = False -- cgit v1.2.1 From c7ce62cf65463c7ea6474d0373c56fb3edeb0e2a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 4 May 2013 15:26:28 -0400 Subject: - OK we have -w sql passing for: sqlite, postgresql, oursql 2.7 + 3.3, mysqldb 2.7 --- lib/sqlalchemy/engine/default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index e52aac427..e9645f363 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -221,7 +221,7 @@ class DefaultDialect(interfaces.Dialect): ) row = cursor.fetchone() - return isinstance(row[0], util.string_types) + return isinstance(row[0], util.text_type) except self.dbapi.Error as de: util.warn("Exception attempting to " "detect unicode returns: %r" % de) -- cgit v1.2.1 From 021b5143e65368bb36889dda03e5a4853621ce29 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 4 May 2013 15:57:03 -0400 Subject: that's all of engine --- lib/sqlalchemy/engine/reflection.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py index cf4a1d532..4b2987851 100644 --- a/lib/sqlalchemy/engine/reflection.py +++ b/lib/sqlalchemy/engine/reflection.py @@ -41,8 +41,12 @@ def cache(fn, self, con, *args, **kw): return fn(self, con, *args, **kw) key = ( fn.__name__, - tuple(a for a in args if isinstance(a, str)), - tuple((k, v) for k, v in kw.items() if isinstance(v, (str, int, float))) + tuple(a for a in args if isinstance(a, util.string_types)), + tuple((k, v) for k, v in kw.items() if + isinstance(v, + util.string_types + util.int_types + (float, ) + ) + ) ) ret = info_cache.get(key) if ret is None: -- cgit v1.2.1 From 4e930a7f780f0997e8f7f9ef4efe5c57ad86efd0 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 May 2013 16:58:37 -0400 Subject: - add a test specific to sqlite testing cursor.description encoding (should probably be one in test_query or test_unicode...) - fix up test_unitofwork --- lib/sqlalchemy/engine/result.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 65ce3b742..4261a5877 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -215,6 +215,8 @@ class ResultMetaData(object): processors.append(processor) rec = (processor, obj, i) +# name.encode('ascii') + # indexes as keys. This is only needed for the Python version of # RowProxy (the C version uses a faster path for integer indexes). primary_keymap[i] = rec -- cgit v1.2.1 From 61c796786cb222cfdca611395d8550973fc3f8d5 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 May 2013 18:23:26 -0400 Subject: do a sweep of some obvious 3kisms --- lib/sqlalchemy/engine/reflection.py | 11 +++++------ lib/sqlalchemy/engine/result.py | 2 -- lib/sqlalchemy/engine/url.py | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py index 4b2987851..cf2caf679 100644 --- a/lib/sqlalchemy/engine/reflection.py +++ b/lib/sqlalchemy/engine/reflection.py @@ -389,12 +389,11 @@ class Inspector(object): del tblkw[k] tblkw[str(k)] = v -# start Py2K -# if isinstance(schema, str): -# schema = schema.decode(dialect.encoding) -# if isinstance(table_name, str): -# table_name = table_name.decode(dialect.encoding) -# end Py2K + if util.py2k: + if isinstance(schema, str): + schema = schema.decode(dialect.encoding) + if isinstance(table_name, str): + table_name = table_name.decode(dialect.encoding) # columns found_table = False diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 4261a5877..65ce3b742 100644 --- a/lib/sqlalchemy/engine/result.py +++ b/lib/sqlalchemy/engine/result.py @@ -215,8 +215,6 @@ class ResultMetaData(object): processors.append(processor) rec = (processor, obj, i) -# name.encode('ascii') - # indexes as keys. This is only needed for the Python version of # RowProxy (the C version uses a faster path for integer indexes). primary_keymap[i] = rec diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py index b7d56374e..ed5729eea 100644 --- a/lib/sqlalchemy/engine/url.py +++ b/lib/sqlalchemy/engine/url.py @@ -149,7 +149,7 @@ def make_url(name_or_url): existing URL object is passed, just returns the object. """ - if isinstance(name_or_url, str): + if isinstance(name_or_url, util.string_types): return _parse_rfc1738_args(name_or_url) else: return name_or_url -- cgit v1.2.1 From 6cde27fe9161a21b075c7b8faa09d1e77169f1f2 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 May 2013 19:06:13 -0400 Subject: a pass where we try to squash down as many list()/keys() combinations as possible --- lib/sqlalchemy/engine/default.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index e9645f363..85d11ff36 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -734,7 +734,7 @@ class DefaultExecutionContext(interfaces.ExecutionContext): e, None, None, None, self) else: inputsizes = {} - for key in list(self.compiled.bind_names.values()): + for key in self.compiled.bind_names.values(): typeengine = types[key] dbtype = typeengine.dialect_impl(self.dialect).\ get_dbapi_type(self.dialect.dbapi) -- cgit v1.2.1 From 2be39d5342746ea08ec5f7dcb73b6177b004de54 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 May 2013 20:02:17 -0400 Subject: get profile 1a back down to 5100 calls, that one was 10% greater due to this --- lib/sqlalchemy/engine/base.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib/sqlalchemy/engine') diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index c2ba0922b..2d9f3af94 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -734,9 +734,9 @@ class Connection(Connectable): distilled_params = _distill_params(multiparams, params) if distilled_params: - # need list() + keys() here to suit - # both dict and RowProxy - keys = list(distilled_params[0].keys()) + # note this is usually dict but we support RowProxy + # as well; but dict.keys() as an iterator is OK + keys = distilled_params[0].keys() else: keys = [] -- cgit v1.2.1