# -*- coding: utf-8 -*- | |
""" | |
Helper for testing a C++ exception throw aborts the process. | |
Takes one argument, the name of the function in :mod:`_test_extension_cpp` to call. | |
""" | |
import sys | |
import greenlet | |
from greenlet.tests import _test_extension_cpp | |
print('fail_cpp_exception is running') | |
def run_unhandled_exception_in_greenlet_aborts(): | |
def _(): | |
_test_extension_cpp.test_exception_switch_and_do_in_g2( | |
_test_extension_cpp.test_exception_throw_nonstd | |
) | |
g1 = greenlet.greenlet(_) | |
g1.switch() | |
func_name = sys.argv[1] | |
try: | |
func = getattr(_test_extension_cpp, func_name) | |
except AttributeError: | |
if func_name == run_unhandled_exception_in_greenlet_aborts.__name__: | |
func = run_unhandled_exception_in_greenlet_aborts | |
elif func_name == 'run_as_greenlet_target': | |
g = greenlet.greenlet(_test_extension_cpp.test_exception_throw_std) | |
func = g.switch | |
else: | |
raise | |
print('raising', func, flush=True) | |
func() | |