]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
select.py passes in 3k
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 30 Jan 2009 17:48:43 +0000 (17:48 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 30 Jan 2009 17:48:43 +0000 (17:48 +0000)
lib/sqlalchemy/dialects/mysql/mysqldb.py
lib/sqlalchemy/sql/compiler.py
lib/sqlalchemy/sql/expression.py
lib/sqlalchemy/sql/operators.py
lib/sqlalchemy/util.py
sa2to3.py
test/sql/select.py
test/testlib/testing.py

index c947dc2fbaad339c2116423095ddd0336fed7f14..a67c42ff843d86a43bcdf66f02c8c664d0124102 100644 (file)
@@ -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
index 38935ea2903dcd300a39e59ad3995586e0dc3451..4608024bbfba6de7b784b363139ee441cecd9732 100644 (file)
@@ -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
index c7a1dddc9d9dcccabe0e8218a95062deff39de91..34d50c9c591ad5a8acb5cc1a689b3f891417d908 100644 (file)
@@ -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
index 7ab37dfaf88da46ada9d5a360a783e3c2527f944..cd1e48cafed939f38278c245d1e0361692cf1446 100644 (file)
@@ -93,6 +93,7 @@ _largest = symbol('_largest')
 _PRECEDENCE = {
     from_: 15,
     mul: 7,
+    truediv: 7,
     # Py2K
     div: 7,
     # end Py2K
index 32a7c02a21ab1da5037eb1cebc1d6d21b9ceef91..e1619cbc072c5ed911ca3a24c1e3dd820988e533 100644 (file)
@@ -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):
index 705eb22f3c63fabe5d66b16bebedb7a2d375efa9..9c06dafabd3c5a779e21ac69d7a6580edcf85550 100644 (file)
--- 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())
 
index 858213b77b5478843d41a49199c41eab095f80a9..782016e7d681a49152106dca4b09998c22e4d0b6 100644 (file)
@@ -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'),
index 5e28dfb576b75a955421cdaa6823c75827e3c269..30500068ca16b9221c13d54c2c408294f0432e2e 100644 (file)
@@ -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: