From 4e930a7f780f0997e8f7f9ef4efe5c57ad86efd0 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 May 2013 16:58:37 -0400 Subject: [PATCH] - 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/dialects/sqlite/pysqlite.py | 3 ++- lib/sqlalchemy/engine/result.py | 2 ++ test/dialect/test_sqlite.py | 23 ++++++++++++++++++- test/orm/test_unitofwork.py | 26 +++++++++------------- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlite.py b/lib/sqlalchemy/dialects/sqlite/pysqlite.py index 32ee1299fd..ad0dd52922 100644 --- a/lib/sqlalchemy/dialects/sqlite/pysqlite.py +++ b/lib/sqlalchemy/dialects/sqlite/pysqlite.py @@ -267,7 +267,8 @@ class SQLiteDialect_pysqlite(SQLiteDialect): } ) - description_encoding = None + if not util.py2k: + description_encoding = None driver = 'pysqlite' diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py index 65ce3b7423..4261a5877b 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 diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py index 5410a64cbd..4ede13ff63 100644 --- a/test/dialect/test_sqlite.py +++ b/test/dialect/test_sqlite.py @@ -1,9 +1,16 @@ +#!coding: utf-8 + """SQLite-specific tests.""" from sqlalchemy.testing import eq_, assert_raises, \ assert_raises_message import datetime -from sqlalchemy import * +from sqlalchemy import Table, String, select, Text, CHAR, bindparam, Column,\ + Unicode, Date, MetaData, UnicodeText, Time, Integer, TIMESTAMP, \ + Boolean, func, NUMERIC, DateTime, extract, ForeignKey, text, Numeric,\ + DefaultClause, and_, DECIMAL, TypeDecorator, create_engine, Float, \ + INTEGER, UniqueConstraint, DATETIME, DATE, TIME, BOOLEAN +from sqlalchemy.util import u, ue from sqlalchemy import exc, sql, schema, pool, types as sqltypes, util from sqlalchemy.dialects.sqlite import base as sqlite, \ pysqlite as pysqlite_dialect @@ -485,6 +492,20 @@ class DialectTest(fixtures.TestBase, AssertsExecutionResults): 'constrained_columns': ['tid'] }]) + @testing.provide_metadata + def test_description_encoding(self): + # amazingly, pysqlite seems to still deliver cursor.description + # as encoded bytes in py2k + + t = Table('x', self.metadata, + Column(u('méil'), Integer, primary_key=True), + Column(ue('\u6e2c\u8a66'), Integer), + ) + self.metadata.create_all(testing.db) + + result = testing.db.execute(t.select()) + assert u('méil') in result.keys() + assert ue('\u6e2c\u8a66') in result.keys() def test_attached_as_schema(self): cx = testing.db.connect() diff --git a/test/orm/test_unitofwork.py b/test/orm/test_unitofwork.py index 1675ed60f1..4b9799d476 100644 --- a/test/orm/test_unitofwork.py +++ b/test/orm/test_unitofwork.py @@ -6,6 +6,7 @@ import datetime from sqlalchemy.orm import mapper as orm_mapper import sqlalchemy as sa +from sqlalchemy.util import u, ue, b from sqlalchemy import Integer, String, ForeignKey, literal_column, event from sqlalchemy.testing import engines from sqlalchemy import testing @@ -87,7 +88,7 @@ class UnicodeTest(fixtures.MappedTest): mapper(Test, uni_t1) - txt = "\u0160\u0110\u0106\u010c\u017d" + txt = ue("\u0160\u0110\u0106\u010c\u017d") t1 = Test(id=1, txt=txt) self.assert_(t1.txt == txt) @@ -107,7 +108,7 @@ class UnicodeTest(fixtures.MappedTest): 't2s': relationship(Test2)}) mapper(Test2, uni_t2) - txt = "\u0160\u0110\u0106\u010c\u017d" + txt = ue("\u0160\u0110\u0106\u010c\u017d") t1 = Test(txt=txt) t1.t2s.append(Test2()) t1.t2s.append(Test2()) @@ -132,16 +133,16 @@ class UnicodeSchemaTest(fixtures.MappedTest): @classmethod def define_tables(cls, metadata): t1 = Table('unitable1', metadata, - Column('méil', Integer, primary_key=True, key='a', test_needs_autoincrement=True), - Column('\u6e2c\u8a66', Integer, key='b'), + Column(u('méil'), Integer, primary_key=True, key='a', test_needs_autoincrement=True), + Column(ue('\u6e2c\u8a66'), Integer, key='b'), Column('type', String(20)), test_needs_fk=True, test_needs_autoincrement=True) - t2 = Table('Unitéble2', metadata, - Column('méil', Integer, primary_key=True, key="cc", test_needs_autoincrement=True), - Column('\u6e2c\u8a66', Integer, + t2 = Table(u('Unitéble2'), metadata, + Column(u('méil'), Integer, primary_key=True, key="cc", test_needs_autoincrement=True), + Column(ue('\u6e2c\u8a66'), Integer, ForeignKey('unitable1.a'), key="d"), - Column('\u6e2c\u8a66_2', Integer, key="e"), + Column(ue('\u6e2c\u8a66_2'), Integer, key="e"), test_needs_fk=True, test_needs_autoincrement=True) @@ -237,13 +238,7 @@ class BinaryHistTest(fixtures.MappedTest, testing.AssertsExecutionResults): def test_binary_equality(self): Foo, t1 = self.classes.Foo, self.tables.t1 - -# start Py3K - data = b"this is some data" -# end Py3K -# start Py2K -# data = "this is some data" -# end Py2K + data = b("this is some data") mapper(Foo, t1) @@ -2128,7 +2123,6 @@ class SaveTest3(fixtures.MappedTest): assert assoc.count().scalar() == 2 i.keywords = [] - print(i.keywords) session.flush() assert assoc.count().scalar() == 0 -- 2.47.3