diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 96b1f06c2..c2d00a14d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -272,7 +272,7 @@ jobs: submodules: true - name: Check docs run: | - python3 -m pip install sphinx + python3 -m pip install sphinx==7.2.6 python3 -m pip install --verbose . ./scripts/make-docs.py diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a0ca31620..1a28f6464 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -20,7 +20,7 @@ jobs: - name: Update docs branch run: | - python3 -m pip install sphinx + python3 -m pip install sphinx==7.2.6 python3 -m pip install --verbose . ./scripts/make-docs.py diff --git a/awscrt/mqtt.py b/awscrt/mqtt.py index 5a96f5632..7529168ea 100644 --- a/awscrt/mqtt.py +++ b/awscrt/mqtt.py @@ -444,11 +444,15 @@ def _on_connection_resumed(self, return_code, session_present): def _ws_handshake_transform(self, http_request_binding, http_headers_binding, native_userdata): if self._ws_handshake_transform_cb is None: - _awscrt.mqtt_ws_handshake_transform_complete(None, native_userdata) + _awscrt.mqtt_ws_handshake_transform_complete(None, native_userdata, 0) return def _on_complete(f): - _awscrt.mqtt_ws_handshake_transform_complete(f.exception(), native_userdata) + error_code = 0 + hs_exception = f.exception() + if isinstance(hs_exception, awscrt.exceptions.AwsCrtError): + error_code = hs_exception.code + _awscrt.mqtt_ws_handshake_transform_complete(f.exception(), native_userdata, error_code) future = Future() future.add_done_callback(_on_complete) diff --git a/awscrt/mqtt5.py b/awscrt/mqtt5.py index 80dd0d002..4f8bff98d 100644 --- a/awscrt/mqtt5.py +++ b/awscrt/mqtt5.py @@ -1391,11 +1391,15 @@ def __init__(self, client_options: ClientOptions): def _ws_handshake_transform(self, http_request_binding, http_headers_binding, native_userdata): if self._ws_handshake_transform_cb is None: - _awscrt.mqtt5_ws_handshake_transform_complete(None, native_userdata) + _awscrt.mqtt5_ws_handshake_transform_complete(None, native_userdata, 0) return def _on_complete(f): - _awscrt.mqtt5_ws_handshake_transform_complete(f.exception(), native_userdata) + error_code = 0 + hs_exception = f.exception() + if isinstance(hs_exception, exceptions.AwsCrtError): + error_code = hs_exception.code + _awscrt.mqtt5_ws_handshake_transform_complete(f.exception(), native_userdata, error_code) future = Future() future.add_done_callback(_on_complete) diff --git a/source/mqtt5_client.c b/source/mqtt5_client.c index 92e2b1ea1..eddc5ab7f 100644 --- a/source/mqtt5_client.c +++ b/source/mqtt5_client.c @@ -711,13 +711,13 @@ PyObject *aws_py_mqtt5_ws_handshake_transform_complete(PyObject *self, PyObject PyObject *exception_py; PyObject *ws_transform_capsule; - if (!PyArg_ParseTuple(args, "OO", &exception_py, &ws_transform_capsule)) { + int error_code = AWS_ERROR_SUCCESS; + if (!PyArg_ParseTuple(args, "OOi", &exception_py, &ws_transform_capsule, &error_code)) { return NULL; } - int error_code = AWS_ERROR_SUCCESS; - if (exception_py != Py_None) { - /* TODO: Translate Python exception to aws error. In the meantime here's a catch-all. */ + if (exception_py != Py_None && error_code == AWS_ERROR_SUCCESS) { + /* Fallback code for if the error source was outside the CRT native implementation */ error_code = AWS_ERROR_HTTP_CALLBACK_FAILURE; } diff --git a/source/mqtt_client_connection.c b/source/mqtt_client_connection.c index 70da32835..9eb73a950 100644 --- a/source/mqtt_client_connection.c +++ b/source/mqtt_client_connection.c @@ -615,13 +615,13 @@ PyObject *aws_py_mqtt_ws_handshake_transform_complete(PyObject *self, PyObject * PyObject *exception_py; PyObject *ws_transform_capsule; - if (!PyArg_ParseTuple(args, "OO", &exception_py, &ws_transform_capsule)) { + int error_code = AWS_ERROR_SUCCESS; + if (!PyArg_ParseTuple(args, "OOi", &exception_py, &ws_transform_capsule, &error_code)) { return NULL; } - int error_code = AWS_ERROR_SUCCESS; - if (exception_py != Py_None) { - /* TODO: Translate Python exception to aws error. In the meantime here's a catch-all. */ + if (exception_py != Py_None && error_code == AWS_ERROR_SUCCESS) { + /* Fallback code for if the error source was outside the CRT native implementation */ error_code = AWS_ERROR_HTTP_CALLBACK_FAILURE; }