=======
0.7.2
=====
+- orm
+ - Added the same "columns-only" check to
+ mapper.polymorphic_on as used in
+ relationship.order_by, foreign_keys,
+ remote_side, etc.
+
- mssql
- Adjusted the pyodbc dialect such that bound
values are passed as bytes and not unicode
self.batch = batch
self.eager_defaults = eager_defaults
self.column_prefix = column_prefix
- self.polymorphic_on = polymorphic_on
+ self.polymorphic_on = expression._only_column_elements_or_none(
+ polymorphic_on,
+ "polymorphic_on")
self._dependency_processors = []
self._validators = {}
self.passive_updates = passive_updates
else:
return element
+def _only_column_elements_or_none(element, name):
+ if element is None:
+ return None
+ else:
+ return _only_column_elements(element, name)
+
def _only_column_elements(element, name):
if hasattr(element, '__clause_element__'):
element = element.__clause_element__()
if not isinstance(element, ColumnElement):
- raise exc.ArgumentError("Column-based expression object expected for argument '%s'; "
- "got: '%s', type %s" % (name, element, type(element)))
+ raise exc.ArgumentError(
+ "Column-based expression object expected for argument "
+ "'%s'; got: '%s', type %s" % (name, element, type(element)))
return element
def _corresponding_column_or_error(fromclause, column,
Column('y', String(10)),
Column('xid', ForeignKey('t1.id')))
+ def test_non_col_polymorphic_on(self):
+ class InterfaceBase(object):
+ pass
+
+ assert_raises_message(
+ sa_exc.ArgumentError,
+ "Column-based expression object expected "
+ "for argument 'polymorphic_on'; got: "
+ "'im not a column', type",
+ mapper,
+ InterfaceBase, t2, polymorphic_on="im not a column"
+ )
+
def test_bad_polymorphic_on(self):
t2, t1 = self.tables.t2, self.tables.t1