Schema editors leak transaction state on exception
|Reported by:||Michal Petrucha||Owned by:||nobody|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
When a schema editor is used as a context manager and an uncaught exception is raised within its block,
__exit__ method doesn't call
atomic.__exit__, which leaves the transaction opened when entering the block open.
I'm going to open a pull request shortly with a simple patch which does fix things for me, but I'm not sure about its correctness and I have no idea how to test this. An alternative approach might be to store an instance of
Atomic as an attribute in
BaseDatabaseSchemaEditor and call its
__exit__ instead of creating separate instances; I have no idea whether that makes any difference or not.