[Sqlalchemy-commits] sqlalchemy: - test_types, test_compiler, with sqlite at least
Brought to you by:
zzzeek
From: <co...@sq...> - 2013-04-28 18:44:44
|
details: http://hg.sqlalchemy.org/sqlalchemy/sqlalchemy/rev/d7d97a4df76e changeset: 9408:d7d97a4df76e user: Mike Bayer <mi...@zz...> date: Sun Apr 28 14:44:21 2013 -0400 description: - test_types, test_compiler, with sqlite at least diffstat: lib/sqlalchemy/engine/base.py | 4 +- lib/sqlalchemy/sql/expression.py | 3 +- lib/sqlalchemy/types.py | 31 ++++++++--------- test/sql/test_compiler.py | 3 +- test/sql/test_types.py | 70 +++++++++++++-------------------------- 5 files changed, 43 insertions(+), 68 deletions(-) diffs (263 lines): diff -r cb786e2c394a -r d7d97a4df76e lib/sqlalchemy/engine/base.py --- a/lib/sqlalchemy/engine/base.py Sun Apr 28 14:08:28 2013 -0400 +++ b/lib/sqlalchemy/engine/base.py Sun Apr 28 14:44:21 2013 -0400 @@ -734,7 +734,9 @@ 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 = [] diff -r cb786e2c394a -r d7d97a4df76e lib/sqlalchemy/sql/expression.py --- a/lib/sqlalchemy/sql/expression.py Sun Apr 28 14:08:28 2013 -0400 +++ b/lib/sqlalchemy/sql/expression.py Sun Apr 28 14:44:21 2013 -0400 @@ -2204,7 +2204,7 @@ def _check_literal(self, expr, operator, other): if isinstance(other, (ColumnElement, TextClause)): if isinstance(other, BindParameter) and \ - isinstance(other.type, sqltypes.NullType): + isinstance(other.type, sqltypes.NullType): # TODO: perhaps we should not mutate the incoming # bindparam() here and instead make a copy of it. # this might be the only place that we're mutating @@ -3116,7 +3116,6 @@ def execute(self, *multiparams, **params): """Compile and execute this :class:`.Executable`.""" - e = self.bind if e is None: label = getattr(self, 'description', self.__class__.__name__) diff -r cb786e2c394a -r d7d97a4df76e lib/sqlalchemy/types.py --- a/lib/sqlalchemy/types.py Sun Apr 28 14:08:28 2013 -0400 +++ b/lib/sqlalchemy/types.py Sun Apr 28 14:44:21 2013 -0400 @@ -1115,12 +1115,7 @@ self.convert_unicode != 'force': if self._warn_on_bytestring: def process(value): -# start Py3K - if isinstance(value, bytes): -# end Py3K -# start Py2K -# if isinstance(value, str): -# end Py2K + if isinstance(value, util.binary_type): util.warn("Unicode type received non-unicode bind " "param value.") return value @@ -1132,7 +1127,7 @@ warn_on_bytestring = self._warn_on_bytestring def process(value): - if isinstance(value, str): + if isinstance(value, util.text_type): return encoder(value, self.unicode_error)[0] elif warn_on_bytestring and value is not None: util.warn("Unicode type received non-unicode bind " @@ -1173,7 +1168,7 @@ @property def python_type(self): if self.convert_unicode: - return str + return util.text_type else: return str @@ -1744,7 +1739,7 @@ def coerce_compared_value(self, op, value): """See :meth:`.TypeEngine.coerce_compared_value` for a description.""" - if isinstance(value, str): + if isinstance(value, util.string_types): return self else: return super(_Binary, self).coerce_compared_value(op, value) @@ -2001,7 +1996,7 @@ convert_unicode = kw.pop('convert_unicode', None) if convert_unicode is None: for e in enums: - if isinstance(e, str): + if isinstance(e, util.string_types): convert_unicode = True break else: @@ -2454,13 +2449,6 @@ STRINGTYPE = String() _type_map = { - str: String(), -# start Py3K - bytes: LargeBinary(), -# end Py3K -# start Py2K -# unicode: Unicode(), -# end Py2K int: Integer(), float: Numeric(), bool: BOOLEANTYPE, @@ -2471,3 +2459,12 @@ dt.timedelta: Interval(), NoneType: NULLTYPE } + +if util.py3k: + _type_map[bytes] = LargeBinary() + _type_map[str] = Unicode() +else: + _type_map[unicode] = Unicode() + _type_map[str] = String() + + diff -r cb786e2c394a -r d7d97a4df76e test/sql/test_compiler.py --- a/test/sql/test_compiler.py Sun Apr 28 14:08:28 2013 -0400 +++ b/test/sql/test_compiler.py Sun Apr 28 14:44:21 2013 -0400 @@ -734,13 +734,14 @@ 'JOIN myothertable ON mytable.myid = ' 'myothertable.otherid') - def test_label_comparison(self): + def test_label_comparison_one(self): x = func.lala(table1.c.myid).label('foo') self.assert_compile(select([x], x == 5), 'SELECT lala(mytable.myid) AS foo FROM ' 'mytable WHERE lala(mytable.myid) = ' ':param_1') + def test_label_comparison_two(self): self.assert_compile( label('bar', column('foo', type_=String)) + 'foo', 'foo || :param_1') diff -r cb786e2c394a -r d7d97a4df76e test/sql/test_types.py --- a/test/sql/test_types.py Sun Apr 28 14:08:28 2013 -0400 +++ b/test/sql/test_types.py Sun Apr 28 14:44:21 2013 -0400 @@ -141,24 +141,14 @@ eq_(types.Integer().python_type, int) eq_(types.Numeric().python_type, decimal.Decimal) eq_(types.Numeric(asdecimal=False).python_type, float) -# start Py3K - eq_(types.LargeBinary().python_type, bytes) -# end Py3K -# start Py2K -# eq_(types.LargeBinary().python_type, str) -# end Py2K + eq_(types.LargeBinary().python_type, util.binary_type) eq_(types.Float().python_type, float) eq_(types.Interval().python_type, datetime.timedelta) eq_(types.Date().python_type, datetime.date) eq_(types.DateTime().python_type, datetime.datetime) -# start Py3K eq_(types.String().python_type, str) -# end Py3K -# start Py2K -# eq_(types.String().python_type, str) -# end Py2K - eq_(types.Unicode().python_type, str) - eq_(types.String(convert_unicode=True).python_type, str) + eq_(types.Unicode().python_type, util.text_type) + eq_(types.String(convert_unicode=True).python_type, util.text_type) assert_raises( NotImplementedError, @@ -259,14 +249,14 @@ def test_processing(self): users = self.tables.users users.insert().execute( - user_id=2, goofy='jack', goofy2='jack', goofy4='jack', - goofy7='jack', goofy8=12, goofy9=12) + user_id=2, goofy='jack', goofy2='jack', goofy4=util.u('jack'), + goofy7=util.u('jack'), goofy8=12, goofy9=12) users.insert().execute( - user_id=3, goofy='lala', goofy2='lala', goofy4='lala', - goofy7='lala', goofy8=15, goofy9=15) + user_id=3, goofy='lala', goofy2='lala', goofy4=util.u('lala'), + goofy7=util.u('lala'), goofy8=15, goofy9=15) users.insert().execute( - user_id=4, goofy='fred', goofy2='fred', goofy4='fred', - goofy7='fred', goofy8=9, goofy9=9) + user_id=4, goofy='fred', goofy2='fred', goofy4=util.u('fred'), + goofy7=util.u('fred'), goofy8=9, goofy9=9) l = users.select().order_by(users.c.user_id).execute().fetchall() for assertstr, assertint, assertint2, row in zip( @@ -280,7 +270,7 @@ eq_(row[5], assertint) eq_(row[6], assertint2) for col in row[3], row[4]: - assert isinstance(col, str) + assert isinstance(col, util.text_type) def test_typedecorator_impl(self): for impl_, exp, kw in [ @@ -717,9 +707,9 @@ expected ) - data = "Alors vous imaginez ma surprise, au lever du jour, quand "\ + data = util.u("Alors vous imaginez ma surprise, au lever du jour, quand "\ "une drôle de petite voix mâa réveillé. "\ - "Elle disait: « Sâil vous plaît⦠dessine-moi un mouton! »" + "Elle disait: « Sâil vous plaît⦠dessine-moi un mouton! »") def test_unicode_warnings_typelevel_native_unicode(self): @@ -728,14 +718,12 @@ dialect = default.DefaultDialect() dialect.supports_unicode_binds = True uni = u.dialect_impl(dialect).bind_processor(dialect) -# start Py3K - assert_raises(exc.SAWarning, uni, b'x') - assert isinstance(uni(unicodedata), str) -# end Py3K -# start Py2K -# assert_raises(exc.SAWarning, uni, 'x') -# assert isinstance(uni(unicodedata), unicode) -# end Py2K + if util.py3k: + assert_raises(exc.SAWarning, uni, b'x') + assert isinstance(uni(unicodedata), str) + else: + assert_raises(exc.SAWarning, uni, 'x') + assert isinstance(uni(unicodedata), unicode) def test_unicode_warnings_typelevel_sqla_unicode(self): unicodedata = self.data @@ -743,14 +731,8 @@ dialect = default.DefaultDialect() dialect.supports_unicode_binds = False uni = u.dialect_impl(dialect).bind_processor(dialect) -# start Py3K - assert_raises(exc.SAWarning, uni, b'x') - assert isinstance(uni(unicodedata), bytes) -# end Py3K -# start Py2K -# assert_raises(exc.SAWarning, uni, 'x') -# assert isinstance(uni(unicodedata), str) -# end Py2K + assert_raises(exc.SAWarning, uni, util.b('x')) + assert isinstance(uni(unicodedata), util.binary_type) eq_(uni(unicodedata), unicodedata.encode('utf-8')) @@ -763,15 +745,9 @@ s = String() uni = s.dialect_impl(dialect).bind_processor(dialect) - # this is not the unicode type - no warning -# start Py3K - uni(b'x') - assert isinstance(uni(unicodedata), bytes) -# end Py3K -# start Py2K -# uni('x') -# assert isinstance(uni(unicodedata), str) -# end Py2K + + uni(util.b('x')) + assert isinstance(uni(unicodedata), util.binary_type) eq_(uni(unicodedata), unicodedata.encode('utf-8')) |