summaryrefslogtreecommitdiffhomepage
path: root/src/python/nxt_python_asgi_http.c
diff options
context:
space:
mode:
authorDan Callahan <d.callahan@f5.com>2024-02-27 15:15:42 +0000
committerDan Callahan <d.callahan@f5.com>2024-02-27 15:15:42 +0000
commitd76761901c4084bcdbc5a449e9bbb47d56b7093c (patch)
treeb4b7b4e3d588b73a2adcc0094cab466d9194c679 /src/python/nxt_python_asgi_http.c
parentc43629880472bba8d389dfb0b7ae6d883b0ba499 (diff)
parent088117008c9e8f397a58cc8d8070ce047beff12f (diff)
downloadunit-1.32.0-1.tar.gz
unit-1.32.0-1.tar.bz2
Merge tag '1.32.0' into branches/packaging1.32.0-1
Unit 1.32.0 release.
Diffstat (limited to 'src/python/nxt_python_asgi_http.c')
-rw-r--r--src/python/nxt_python_asgi_http.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/python/nxt_python_asgi_http.c b/src/python/nxt_python_asgi_http.c
index 05c0da4f..cdd6357e 100644
--- a/src/python/nxt_python_asgi_http.c
+++ b/src/python/nxt_python_asgi_http.c
@@ -362,16 +362,6 @@ nxt_py_asgi_http_response_body(nxt_py_asgi_http_t *http, PyObject *dict)
Py_ssize_t body_len, body_off;
nxt_py_asgi_ctx_data_t *ctx_data;
- body = PyDict_GetItem(dict, nxt_py_body_str);
- if (nxt_slow_path(body != NULL && !PyBytes_Check(body))) {
- return PyErr_Format(PyExc_TypeError, "'body' is not a byte string");
- }
-
- more_body = PyDict_GetItem(dict, nxt_py_more_body_str);
- if (nxt_slow_path(more_body != NULL && !PyBool_Check(more_body))) {
- return PyErr_Format(PyExc_TypeError, "'more_body' is not a bool");
- }
-
if (nxt_slow_path(http->complete)) {
return PyErr_Format(PyExc_RuntimeError,
"Unexpected ASGI message 'http.response.body' "
@@ -382,9 +372,26 @@ nxt_py_asgi_http_response_body(nxt_py_asgi_http_t *http, PyObject *dict)
return PyErr_Format(PyExc_RuntimeError, "Concurrent send");
}
+ more_body = PyDict_GetItem(dict, nxt_py_more_body_str);
+ if (nxt_slow_path(more_body != NULL && !PyBool_Check(more_body))) {
+ return PyErr_Format(PyExc_TypeError, "'more_body' is not a bool");
+ }
+
+ body = PyDict_GetItem(dict, nxt_py_body_str);
+
if (body != NULL) {
- body_str = PyBytes_AS_STRING(body);
- body_len = PyBytes_GET_SIZE(body);
+ if (PyBytes_Check(body)) {
+ body_str = PyBytes_AS_STRING(body);
+ body_len = PyBytes_GET_SIZE(body);
+
+ } else if (PyByteArray_Check(body)) {
+ body_str = PyByteArray_AS_STRING(body);
+ body_len = PyByteArray_GET_SIZE(body);
+
+ } else {
+ return PyErr_Format(PyExc_TypeError,
+ "'body' is not a byte string or bytearray");
+ }
nxt_unit_req_debug(http->req, "asgi_http_response_body: %d, %d",
(int) body_len, (more_body == Py_True) );