From 03e0f776beff157886d174284847868c8f2aed1d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 13 Jun 2010 16:09:13 -0400 Subject: [PATCH] - The warning emitted by the Unicode and String types with convert_unicode=True no longer embeds the actual value passed. This so that the Python warning registry does not continue to grow in size, the warning is emitted once as per the warning filter settings, and large string values don't pollute the output. [ticket:1822] --- CHANGES | 8 ++++++++ lib/sqlalchemy/types.py | 4 ++-- test/aaa_profiling/test_memusage.py | 25 ++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index b7a92783d7..efd95605de 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,14 @@ CHANGES 0.6.2 ===== - sql + - The warning emitted by the Unicode and String types + with convert_unicode=True no longer embeds the actual + value passed. This so that the Python warning + registry does not continue to grow in size, the warning + is emitted once as per the warning filter settings, + and large string values don't pollute the output. + [ticket:1822] + - Fixed bug in Enum type which blew away native_enum flag when used with TypeDecorators or other adaption scenarios. diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index 356ec2ecb7..84bd85ff2d 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -729,7 +729,7 @@ class String(Concatenable, TypeEngine): if isinstance(value, str): # end Py2K util.warn("Unicode type received non-unicode bind " - "param value %r" % value) + "param value.") return value return process else: @@ -741,7 +741,7 @@ class String(Concatenable, TypeEngine): return encoder(value, self.unicode_error)[0] elif value is not None: util.warn("Unicode type received non-unicode bind " - "param value %r" % value) + "param value") return value return process else: diff --git a/test/aaa_profiling/test_memusage.py b/test/aaa_profiling/test_memusage.py index 682411093d..491a57fb01 100644 --- a/test/aaa_profiling/test_memusage.py +++ b/test/aaa_profiling/test_memusage.py @@ -7,7 +7,7 @@ from sqlalchemy.util import jython import operator from sqlalchemy.test import testing, engines from sqlalchemy import MetaData, Integer, String, ForeignKey, \ - PickleType, create_engine + PickleType, create_engine, Unicode from sqlalchemy.test.schema import Table, Column import sqlalchemy as sa from sqlalchemy.sql import column @@ -252,6 +252,29 @@ class MemUsageTest(EnsureZeroed): go() finally: metadata.drop_all() + + def test_unicode_warnings(self): + metadata = MetaData(testing.db) + table1 = Table("mytable", metadata, + Column('col1', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('col2', Unicode(30))) + + metadata.create_all() + + i = [1] + @testing.emits_warning() + @profile_memory + def go(): + # execute with a non-unicode object. + # a warning is emitted, this warning shouldn't + # clog up memory. + testing.db.execute(table1.select().where(table1.c.col2=='foo%d' % i[0])) + i[0] += 1 + try: + go() + finally: + metadata.drop_all() def test_mapper_reset(self): metadata = MetaData(testing.db) -- 2.47.2