[#7047] Fixed substitute_extensions not switching back on exception
Signed-off-by: Cory Johns <cjohns@slashdotmedia.com>
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 82973ce..77f8645 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -222,8 +222,10 @@
session.close()
session._kwargs['extensions'] = exts
_set_exts(extensions or [])
- yield session
- _set_exts(original_exts)
+ try:
+ yield session
+ finally:
+ _set_exts(original_exts)
main_doc_session = Session.by_name('main')
diff --git a/Allura/allura/tests/unit/test_session.py b/Allura/allura/tests/unit/test_session.py
index b079004..1c5ea08 100644
--- a/Allura/allura/tests/unit/test_session.py
+++ b/Allura/allura/tests/unit/test_session.py
@@ -27,11 +27,17 @@
def test_extensions_cm():
session = mock.Mock(_kwargs=dict(extensions=[]))
extension = mock.Mock()
- with substitute_extensions(session, [extension]) as sess:
- assert session.flush.call_count == 1
- assert session.close.call_count == 1
- assert sess == session
- assert sess._kwargs['extensions'] == [extension]
+ try:
+ with substitute_extensions(session, [extension]) as sess:
+ assert session.flush.call_count == 1
+ assert session.close.call_count == 1
+ assert sess == session
+ assert sess._kwargs['extensions'] == [extension]
+ raise ValueError('test')
+ except ValueError as e:
+ pass
+ else:
+ assert False, "Exception didn't propagate"
assert session.flush.call_count == 2
assert session.close.call_count == 2
assert session._kwargs['extensions'] == []