summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES8
-rw-r--r--lib/sqlalchemy/types.py3
-rw-r--r--lib/sqlalchemy/util/langhelpers.py6
-rw-r--r--test/sql/test_types.py6
4 files changed, 21 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 97f5061c0..084ab4ead 100644
--- a/CHANGES
+++ b/CHANGES
@@ -716,6 +716,14 @@ underneath "0.7.xx".
but not ForeignKeyConstraint or CheckConstraint.
[ticket:2410]
+ - [bug] TypeDecorator now includes a generic repr()
+ that works in terms of the "impl" type by default.
+ This is a behavioral change for those TypeDecorator
+ classes that specify a custom __init__ method; those
+ types will need to re-define __repr__() if they need
+ __repr__() to provide a faithful constructor representation.
+ [ticket:2594]
+
- [bug] column.label(None) now produces an
anonymous label, instead of returning the
column object itself, consistent with the behavior
diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py
index ebcffca6e..e31cecfe2 100644
--- a/lib/sqlalchemy/types.py
+++ b/lib/sqlalchemy/types.py
@@ -817,6 +817,9 @@ class TypeDecorator(TypeEngine):
"""
return self.impl.compare_values(x, y)
+ def __repr__(self):
+ return util.generic_repr(self, to_inspect=self.impl)
+
class Variant(TypeDecorator):
"""A wrapping type that selects among a variety of
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py
index 9761aeae9..55b78090a 100644
--- a/lib/sqlalchemy/util/langhelpers.py
+++ b/lib/sqlalchemy/util/langhelpers.py
@@ -281,14 +281,16 @@ def unbound_method_to_callable(func_or_cls):
else:
return func_or_cls
-def generic_repr(obj, additional_kw=()):
+def generic_repr(obj, additional_kw=(), to_inspect=None):
"""Produce a __repr__() based on direct association of the __init__()
specification vs. same-named attributes present.
"""
+ if to_inspect is None:
+ to_inspect = obj
def genargs():
try:
- (args, vargs, vkw, defaults) = inspect.getargspec(obj.__init__)
+ (args, vargs, vkw, defaults) = inspect.getargspec(to_inspect.__init__)
except TypeError:
return
diff --git a/test/sql/test_types.py b/test/sql/test_types.py
index 1d096d7c4..98bc51624 100644
--- a/test/sql/test_types.py
+++ b/test/sql/test_types.py
@@ -336,6 +336,12 @@ class UserDefinedTest(fixtures.TablesTest, AssertsCompiledSQL):
Float().dialect_impl(pg).__class__
)
+ def test_type_decorator_repr(self):
+ class MyType(TypeDecorator):
+ impl = VARCHAR
+
+ eq_(repr(MyType(45)), "MyType(length=45)")
+
def test_user_defined_typedec_impl_bind(self):
class TypeOne(types.TypeEngine):
def bind_processor(self, dialect):