--- /dev/null
+.. change::
+ :tags: orm, bug
+ :tickets: 5196
+
+ Fixed regression in 1.3.14 due to :ticket:`4849` where a sys.exc_info()
+ call failed to be invoked correctly when a flush error would occur. Test
+ coverage has been added for this exception case.
+
"consider using a session.no_autoflush block if this "
"flush is occurring prematurely"
)
- util.raise_(e, with_traceback=sys.exc_info[2])
+ util.raise_(e, with_traceback=sys.exc_info()[2])
def refresh(
self,
is_true(sess.autoflush)
+ def test_autoflush_exception_addition(self):
+ User, users = self.classes.User, self.tables.users
+ Address, addresses = self.classes.Address, self.tables.addresses
+ mapper(User, users, properties={"addresses": relationship(Address)})
+ mapper(Address, addresses)
+
+ s = Session(testing.db)
+
+ u1 = User(name="first")
+
+ s.add(u1)
+ s.commit()
+
+ u1.addresses.append(Address(email=None))
+
+ # will raise for null email address
+ assert_raises_message(
+ sa.exc.DBAPIError,
+ ".*raised as a result of Query-invoked autoflush; consider using "
+ "a session.no_autoflush block.*",
+ s.query(User).first,
+ )
+
def test_deleted_flag(self):
users, User = self.tables.users, self.classes.User