From: Mike Bayer Date: Fri, 30 Jan 2009 17:48:43 +0000 (+0000) Subject: select.py passes in 3k X-Git-Tag: rel_0_6_6~298 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac7395f789e7fd1a6d72d7312093d9e9f507b59b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git select.py passes in 3k --- diff --git a/lib/sqlalchemy/dialects/mysql/mysqldb.py b/lib/sqlalchemy/dialects/mysql/mysqldb.py index c947dc2fba..a67c42ff84 100644 --- a/lib/sqlalchemy/dialects/mysql/mysqldb.py +++ b/lib/sqlalchemy/dialects/mysql/mysqldb.py @@ -51,8 +51,7 @@ class MySQL_mysqldb(MySQLDialect): @classmethod def dbapi(cls): - import MySQLdb as mysql - return mysql + return __import__('MySQLdb') def create_connect_args(self, url): opts = url.translate_connect_args(database='db', username='user', @@ -86,7 +85,7 @@ class MySQL_mysqldb(MySQLDialect): client_flag = opts.get('client_flag', 0) if self.dbapi is not None: try: - import MySQLdb.constants.CLIENT as CLIENT_FLAGS + CLIENT_FLAGS = __import__('MySQLdb.constants').constants.CLIENT client_flag |= CLIENT_FLAGS.FOUND_ROWS except: pass diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 38935ea290..4608024bbf 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -18,7 +18,7 @@ creating database-specific compilers and schema generators, the module is otherwise internal to SQLAlchemy. """ -import string, re +import re from sqlalchemy import schema, engine, util, exc from sqlalchemy.sql import operators, functions, util as sql_util, visitors from sqlalchemy.sql import expression as sql @@ -357,9 +357,8 @@ class SQLCompiler(engine.Compiled): entry = self.stack and self.stack[-1] or {} self.stack.append({'from':entry.get('from', None), 'iswrapper':True}) - text = string.join((self.process(c, asfrom=asfrom, parens=False, compound_index=i) - for i, c in enumerate(cs.selects)), - " " + cs.keyword + " ") + text = (" " + cs.keyword + " ").join((self.process(c, asfrom=asfrom, parens=False, compound_index=i) + for i, c in enumerate(cs.selects))) group_by = self.process(cs._group_by_clause, asfrom=asfrom) if group_by: text += " GROUP BY " + group_by diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index c7a1dddc9d..34d50c9c59 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -1210,7 +1210,11 @@ class ClauseElement(Visitable): return dialect.statement_compiler(dialect, self, **kw) def __str__(self): + # Py3K + #return unicode(self.compile()) + # Py2K return unicode(self.compile()).encode('ascii', 'backslashreplace') + # end Py2K def __and__(self, other): return and_(self, other) @@ -1364,6 +1368,9 @@ class ColumnOperators(Operators): def __truediv__(self, other): return self.operate(operators.truediv, other) + def __rtruediv__(self, other): + return self.reverse_operate(operators.truediv, other) + class _CompareMixin(ColumnOperators): """Defines comparison and math operations for ``ClauseElement`` instances.""" @@ -2623,7 +2630,11 @@ class Alias(FromClause): @property def description(self): + # Py3K + #return self.name + # Py2K return self.name.encode('ascii', 'backslashreplace') + # end Py2K def is_derived_from(self, fromclause): if fromclause in self._cloned_set: @@ -2819,7 +2830,11 @@ class ColumnClause(_Immutable, ColumnElement): @util.memoized_property def description(self): + # Py3K + #return self.name + # Py2K return self.name.encode('ascii', 'backslashreplace') + # end Py2K @util.memoized_property def _label(self): @@ -2901,7 +2916,11 @@ class TableClause(_Immutable, FromClause): @util.memoized_property def description(self): + # Py3K + #return self.name + # Py2K return self.name.encode('ascii', 'backslashreplace') + # end Py2K def append_column(self, c): self._columns[c.name] = c diff --git a/lib/sqlalchemy/sql/operators.py b/lib/sqlalchemy/sql/operators.py index 7ab37dfaf8..cd1e48cafe 100644 --- a/lib/sqlalchemy/sql/operators.py +++ b/lib/sqlalchemy/sql/operators.py @@ -93,6 +93,7 @@ _largest = symbol('_largest') _PRECEDENCE = { from_: 15, mul: 7, + truediv: 7, # Py2K div: 7, # end Py2K diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 32a7c02a21..e1619cbc07 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -696,7 +696,6 @@ class OrderedProperties(object): def clear(self): self._data.clear() - class OrderedDict(dict): """A dict that returns keys/values/items in the order they were added.""" @@ -756,7 +755,12 @@ class OrderedDict(dict): def __setitem__(self, key, object): if key not in self: - self._list.append(key) + try: + self._list.append(key) + except AttributeError: + # work around Python pickle loads() with + # dict subclass (seems to ignore __setstate__?) + self._list = [key] dict.__setitem__(self, key, object) def __delitem__(self, key): diff --git a/sa2to3.py b/sa2to3.py index 705eb22f3c..9c06dafabd 100644 --- a/sa2to3.py +++ b/sa2to3.py @@ -31,34 +31,33 @@ def preprocess(data): for line in consume_py3k(): yield line elif py2k_pattern.match(line): - yield line for line in consume_py2k(): yield line else: yield line def consume_py3k(): + yield "# start Py3K" while lines: line = lines.pop(0) m = comment_pattern.match(line) if m: yield "%s%s" % m.group(1, 2) else: - m = py2k_pattern.match(line) - if m: - for line in consume_py2k(): - yield line - else: - yield line + # pushback + lines.insert(0, line) break + yield "# end Py3K" def consume_py2k(): + yield "# start Py2K" while lines: line = lines.pop(0) if not end_py2k_pattern.match(line): yield "#%s" % line else: break + yield "# end Py2K" return "\n".join(consume_normal()) diff --git a/test/sql/select.py b/test/sql/select.py index 858213b77b..782016e7d6 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -398,7 +398,12 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A def test_operators(self): for (py_op, sql_op) in ((operator.add, '+'), (operator.mul, '*'), - (operator.sub, '-'), (operator.div, '/'), + (operator.sub, '-'), + # Py3K + #(operator.truediv, '/'), + # Py2K + (operator.div, '/'), + # end Py2K ): for (lhs, rhs, res) in ( (5, table1.c.myid, ':myid_1 %s mytable.myid'), diff --git a/test/testlib/testing.py b/test/testlib/testing.py index 5e28dfb576..30500068ca 100644 --- a/test/testlib/testing.py +++ b/test/testlib/testing.py @@ -983,6 +983,11 @@ def runTests(suite): try: if not verbose or quiet: sys.stdout = DevNullWriter() + # Py3K + #else: + # # straight from the man: + # # http://mail.python.org/pipermail/python-3000/2008-February/012144.html + # sys.stdout._encoding = 'utf-8' runner = unittest.TextTestRunner(verbosity = quiet and 1 or 2) return runner.run(suite) finally: