Skip to content

Commit

Permalink
Pass CRT error, if it exists, into completion function (#563)
Browse files Browse the repository at this point in the history
  • Loading branch information
bretambrose authored and Bret Ambrose committed May 22, 2024
1 parent 9e33076 commit 1c98824
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 6 additions & 2 deletions awscrt/mqtt.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 6 additions & 2 deletions awscrt/mqtt5.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
8 changes: 4 additions & 4 deletions source/mqtt5_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
8 changes: 4 additions & 4 deletions source/mqtt_client_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 1c98824

Please sign in to comment.