static PyObject * Stream_func_write(Stream *self, PyObject *args) { uv_buf_t buf; stream_write_ctx *ctx; Py_buffer *view; PyObject *callback = Py_None; RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL); RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); ctx = PyMem_Malloc(sizeof *ctx); if (!ctx) { PyErr_NoMemory(); return NULL; } view = &ctx->view[0]; if (!PyArg_ParseTuple(args, PYUV_BYTES"*|O:write", view, &callback)) { PyMem_Free(ctx); return NULL; } if (callback != Py_None && !PyCallable_Check(callback)) { PyBuffer_Release(view); PyMem_Free(ctx); PyErr_SetString(PyExc_TypeError, "a callable or None is required"); return NULL; } buf = uv_buf_init(view->buf, view->len); return pyuv_stream_write(self, ctx, view, &buf, 1, callback, NULL); }
static PyObject * Pipe_func_write2(Pipe *self, PyObject *args) { Py_buffer pbuf; PyObject *callback, *send_handle; callback = Py_None; RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); if (!PyArg_ParseTuple(args, "s*O|O:write2", &pbuf, &send_handle, &callback)) { return NULL; } if (!PyObject_TypeCheck(send_handle, &TCPType) && !PyObject_TypeCheck(send_handle, &PipeType)) { PyErr_SetString(PyExc_TypeError, "Only TCP and Pipe objects are supported for write2"); return NULL; } if (callback != Py_None && !PyCallable_Check(callback)) { PyBuffer_Release(&pbuf); PyErr_SetString(PyExc_TypeError, "a callable or None is required"); return NULL; } return pyuv_stream_write((Stream *)self, pbuf, callback, send_handle); }
static PyObject * Pipe_func_write2(Pipe *self, PyObject *args) { uv_buf_t buf; stream_write_ctx *ctx; Py_buffer *view; PyObject *callback, *send_handle; callback = Py_None; RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL); RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); ctx = PyMem_Malloc(sizeof *ctx); if (!ctx) { PyErr_NoMemory(); return NULL; } view = &ctx->view[0]; if (!PyArg_ParseTuple(args, PYUV_BYTES"*O|O:write", view, &send_handle, &callback)) { PyMem_Free(ctx); return NULL; } if (PyObject_IsSubclass((PyObject *)send_handle->ob_type, (PyObject *)&StreamType)) { if (UV_HANDLE(send_handle)->type != UV_TCP && UV_HANDLE(send_handle)->type != UV_NAMED_PIPE) { PyErr_SetString(PyExc_TypeError, "Only TCP and Pipe objects are supported for write2"); goto error; } } else if (PyObject_IsSubclass((PyObject *)send_handle->ob_type, (PyObject *)&UDPType)) { /* empty */ } else { PyErr_SetString(PyExc_TypeError, "Only Stream and UDP objects are supported"); goto error; } if (callback != Py_None && !PyCallable_Check(callback)) { PyErr_SetString(PyExc_TypeError, "a callable or None is required"); goto error; } buf = uv_buf_init(view->buf, view->len); return pyuv_stream_write((Stream *)self, ctx, view, &buf, 1, callback, send_handle); error: PyBuffer_Release(view); PyMem_Free(ctx); return NULL; }
static PyObject * Stream_func_writelines(Stream *self, PyObject *args) { int r, buf_count; Py_buffer *views; PyObject *callback, *seq, *ret; uv_buf_t *bufs; stream_write_ctx *ctx; callback = Py_None; RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL); RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); if (!PyArg_ParseTuple(args, "O|O:writelines", &seq, &callback)) { return NULL; } if (callback != Py_None && !PyCallable_Check(callback)) { PyErr_SetString(PyExc_TypeError, "a callable or None is required"); return NULL; } ctx = PyMem_Malloc(sizeof *ctx); if (!ctx) { PyErr_NoMemory(); return NULL; } r = pyseq2uvbuf(seq, &views, &bufs, &buf_count); if (r != 0) { /* error is already set */ PyMem_Free(ctx); return NULL; } ret = pyuv_stream_write(self, ctx, views, bufs, buf_count, callback, NULL); /* uv_write copies the uv_buf_t structures, so we can free them now */ PyMem_Free(bufs); return ret; }
static PyObject * Pipe_func_write2(Pipe *self, PyObject *args) { uv_buf_t buf; Py_buffer *view; PyObject *callback, *send_handle; callback = Py_None; RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL); RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL); view = PyMem_Malloc(sizeof *view); if (!view) { PyErr_NoMemory(); return NULL; } #ifdef PYUV_PYTHON3 if (!PyArg_ParseTuple(args, "y*O|O:write", view, &send_handle, &callback)) { #else if (!PyArg_ParseTuple(args, "s*O|O:write", view, &send_handle, &callback)) { #endif return NULL; } if (PyObject_IsSubclass((PyObject *)send_handle->ob_type, (PyObject *)&StreamType)) { if (UV_HANDLE(send_handle)->type != UV_TCP && UV_HANDLE(send_handle)->type != UV_NAMED_PIPE) { PyErr_SetString(PyExc_TypeError, "Only TCP and Pipe objects are supported for write2"); goto error; } } else if (PyObject_IsSubclass((PyObject *)send_handle->ob_type, (PyObject *)&UDPType)) { /* empty */ } else { PyErr_SetString(PyExc_TypeError, "Only Stream and UDP objects are supported"); goto error; } if (callback != Py_None && !PyCallable_Check(callback)) { PyErr_SetString(PyExc_TypeError, "a callable or None is required"); goto error; } buf = uv_buf_init(view->buf, view->len); return pyuv_stream_write((Stream *)self, view, &buf, 1, callback, send_handle); error: PyBuffer_Release(view); PyMem_Free(view); return NULL; } static int Pipe_tp_init(Pipe *self, PyObject *args, PyObject *kwargs) { int r; Loop *loop; PyObject *ipc = Py_False; UNUSED_ARG(kwargs); RAISE_IF_HANDLE_INITIALIZED(self, -1); if (!PyArg_ParseTuple(args, "O!|O!:__init__", &LoopType, &loop, &PyBool_Type, &ipc)) { return -1; } r = uv_pipe_init(loop->uv_loop, (uv_pipe_t *)UV_HANDLE(self), (ipc == Py_True) ? 1 : 0); if (r != 0) { RAISE_UV_EXCEPTION(loop->uv_loop, PyExc_PipeError); return -1; } initialize_handle(HANDLE(self), loop); return 0; }