python: raise OSError when shared library is missing
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-arm64, ubuntu-latest-arm64, true) (pull_request) Successful in 52s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-arm64, ubuntu-latest-arm64, false) (pull_request) Successful in 50s
CI / pre-commit (pull_request) Successful in 52s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-amd64, ubuntu-latest-amd64, true) (pull_request) Successful in 1m31s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-amd64, ubuntu-latest-amd64, false) (pull_request) Successful in 1m25s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-arm64, ubuntu-latest-arm64, true) (pull_request) Successful in 52s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-arm64, ubuntu-latest-arm64, false) (pull_request) Successful in 50s
CI / pre-commit (pull_request) Successful in 52s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-amd64, ubuntu-latest-amd64, true) (pull_request) Successful in 1m31s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-amd64, ubuntu-latest-amd64, false) (pull_request) Successful in 1m25s
Replace sys.exit(1) in WeaselJsonParser.__init__ with an OSError so callers can handle a missing libweaseljson gracefully. Also add a test that verifies the constructor raises OSError for a non-existent build directory. Closes #38
This commit is contained in:
@@ -95,8 +95,20 @@ def test_create_rejects_too_small_stack():
|
||||
raise AssertionError(f"expected ValueError for stackSize={stack_size}")
|
||||
|
||||
|
||||
def test_missing_library_raises_oserror():
|
||||
try:
|
||||
weaseljson.WeaselJsonParser(
|
||||
weaseljson.WeaselJsonCallbacksBase(),
|
||||
build_dir="/nonexistent",
|
||||
)
|
||||
except OSError:
|
||||
return
|
||||
raise AssertionError("expected OSError when the shared library is missing")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_object_keys_routed_correctly()
|
||||
test_mixed_values()
|
||||
test_create_rejects_too_small_stack()
|
||||
test_missing_library_raises_oserror()
|
||||
print("python bindings ok")
|
||||
|
||||
+1
-7
@@ -84,13 +84,7 @@ class WeaselJsonParser:
|
||||
pass
|
||||
|
||||
if self._lib is None:
|
||||
import sys
|
||||
|
||||
print(
|
||||
"Could not find libweaseljson implementation",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
raise OSError(f"Could not load libweaseljson from {build_dir}")
|
||||
|
||||
self._lib.WeaselJsonParser_create.argtypes = (
|
||||
ctypes.c_int,
|
||||
|
||||
Reference in New Issue
Block a user