mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
gh-101819: Adapt _io._BufferedIOBase_Type methods to Argument Clinic (#104355)
Make sure the defining class is passed to all methods, so we can easily fetch module state from them in the future.
This commit is contained in:
parent
13ac1766bc
commit
ce8d3db256
2 changed files with 236 additions and 44 deletions
|
|
@ -115,6 +115,9 @@ bufferediobase_unsupported(_PyIO_State *state, const char *message)
|
|||
/*[clinic input]
|
||||
_io._BufferedIOBase.detach
|
||||
|
||||
cls: defining_class
|
||||
/
|
||||
|
||||
Disconnect this buffer from its underlying raw stream and return it.
|
||||
|
||||
After the raw stream has been detached, the buffer is in an unusable
|
||||
|
|
@ -122,63 +125,89 @@ state.
|
|||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_detach_impl(PyObject *self)
|
||||
/*[clinic end generated code: output=754977c8d10ed88c input=822427fb58fe4169]*/
|
||||
_io__BufferedIOBase_detach_impl(PyObject *self, PyTypeObject *cls)
|
||||
/*[clinic end generated code: output=b87b135d67cd4448 input=0b61a7b4357c1ea7]*/
|
||||
{
|
||||
_PyIO_State *state = IO_STATE();
|
||||
return bufferediobase_unsupported(state, "detach");
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(bufferediobase_read_doc,
|
||||
"Read and return up to n bytes.\n"
|
||||
"\n"
|
||||
"If the argument is omitted, None, or negative, reads and\n"
|
||||
"returns all data until EOF.\n"
|
||||
"\n"
|
||||
"If the argument is positive, and the underlying raw stream is\n"
|
||||
"not 'interactive', multiple raw reads may be issued to satisfy\n"
|
||||
"the byte count (unless EOF is reached first). But for\n"
|
||||
"interactive raw streams (as well as sockets and pipes), at most\n"
|
||||
"one raw read will be issued, and a short result does not imply\n"
|
||||
"that EOF is imminent.\n"
|
||||
"\n"
|
||||
"Returns an empty bytes object on EOF.\n"
|
||||
"\n"
|
||||
"Returns None if the underlying raw stream was open in non-blocking\n"
|
||||
"mode and no data is available at the moment.\n");
|
||||
/*[clinic input]
|
||||
_io._BufferedIOBase.read
|
||||
|
||||
cls: defining_class
|
||||
/
|
||||
*args: object
|
||||
|
||||
Read and return up to n bytes.
|
||||
|
||||
If the argument is omitted, None, or negative, read and
|
||||
return all data until EOF.
|
||||
|
||||
If the argument is positive, and the underlying raw stream is
|
||||
not 'interactive', multiple raw reads may be issued to satisfy
|
||||
the byte count (unless EOF is reached first).
|
||||
However, for interactive raw streams (as well as sockets and pipes),
|
||||
at most one raw read will be issued, and a short result does not
|
||||
imply that EOF is imminent.
|
||||
|
||||
Return an empty bytes object on EOF.
|
||||
|
||||
Return None if the underlying raw stream was open in non-blocking
|
||||
mode and no data is available at the moment.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
bufferediobase_read(PyObject *self, PyObject *args)
|
||||
_io__BufferedIOBase_read_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args)
|
||||
/*[clinic end generated code: output=4521b30940fd7b67 input=390205758adc8510]*/
|
||||
{
|
||||
_PyIO_State *state = IO_STATE();
|
||||
return bufferediobase_unsupported(state, "read");
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(bufferediobase_read1_doc,
|
||||
"Read and return up to n bytes, with at most one read() call\n"
|
||||
"to the underlying raw stream. A short result does not imply\n"
|
||||
"that EOF is imminent.\n"
|
||||
"\n"
|
||||
"Returns an empty bytes object on EOF.\n");
|
||||
/*[clinic input]
|
||||
_io._BufferedIOBase.read1
|
||||
|
||||
cls: defining_class
|
||||
/
|
||||
*args: object
|
||||
|
||||
Read and return up to n bytes, with at most one read() call to the underlying raw stream.
|
||||
|
||||
Return an empty bytes object on EOF.
|
||||
A short result does not imply that EOF is imminent.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
bufferediobase_read1(PyObject *self, PyObject *args)
|
||||
_io__BufferedIOBase_read1_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args)
|
||||
/*[clinic end generated code: output=636fd241c21e050a input=ef546a1238c5b41c]*/
|
||||
{
|
||||
_PyIO_State *state = IO_STATE();
|
||||
return bufferediobase_unsupported(state, "read1");
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(bufferediobase_write_doc,
|
||||
"Write the given buffer to the IO stream.\n"
|
||||
"\n"
|
||||
"Returns the number of bytes written, which is always the length of b\n"
|
||||
"in bytes.\n"
|
||||
"\n"
|
||||
"Raises BlockingIOError if the buffer is full and the\n"
|
||||
"underlying raw stream cannot accept more data at the moment.\n");
|
||||
/*[clinic input]
|
||||
_io._BufferedIOBase.write
|
||||
|
||||
cls: defining_class
|
||||
/
|
||||
*args: object
|
||||
|
||||
Write the given buffer to the IO stream.
|
||||
|
||||
Return the number of bytes written, which is always
|
||||
the length of b in bytes.
|
||||
|
||||
Raise BlockingIOError if the buffer is full and the
|
||||
underlying raw stream cannot accept more data at the moment.
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
bufferediobase_write(PyObject *self, PyObject *args)
|
||||
_io__BufferedIOBase_write_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args)
|
||||
/*[clinic end generated code: output=d51feea4bcac9892 input=f79b72c4dccb3dc2]*/
|
||||
{
|
||||
_PyIO_State *state = IO_STATE();
|
||||
return bufferediobase_unsupported(state, "write");
|
||||
|
|
@ -2336,11 +2365,11 @@ _io_BufferedRandom___init___impl(buffered *self, PyObject *raw,
|
|||
|
||||
static PyMethodDef bufferediobase_methods[] = {
|
||||
_IO__BUFFEREDIOBASE_DETACH_METHODDEF
|
||||
{"read", bufferediobase_read, METH_VARARGS, bufferediobase_read_doc},
|
||||
{"read1", bufferediobase_read1, METH_VARARGS, bufferediobase_read1_doc},
|
||||
_IO__BUFFEREDIOBASE_READ_METHODDEF
|
||||
_IO__BUFFEREDIOBASE_READ1_METHODDEF
|
||||
_IO__BUFFEREDIOBASE_READINTO_METHODDEF
|
||||
_IO__BUFFEREDIOBASE_READINTO1_METHODDEF
|
||||
{"write", bufferediobase_write, METH_VARARGS, bufferediobase_write_doc},
|
||||
_IO__BUFFEREDIOBASE_WRITE_METHODDEF
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
|||
173
Modules/_io/clinic/bufferedio.c.h
generated
173
Modules/_io/clinic/bufferedio.c.h
generated
|
|
@ -92,15 +92,178 @@ PyDoc_STRVAR(_io__BufferedIOBase_detach__doc__,
|
|||
"state.");
|
||||
|
||||
#define _IO__BUFFEREDIOBASE_DETACH_METHODDEF \
|
||||
{"detach", (PyCFunction)_io__BufferedIOBase_detach, METH_NOARGS, _io__BufferedIOBase_detach__doc__},
|
||||
{"detach", _PyCFunction_CAST(_io__BufferedIOBase_detach), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__BufferedIOBase_detach__doc__},
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_detach_impl(PyObject *self);
|
||||
_io__BufferedIOBase_detach_impl(PyObject *self, PyTypeObject *cls);
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_detach(PyObject *self, PyObject *Py_UNUSED(ignored))
|
||||
_io__BufferedIOBase_detach(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
return _io__BufferedIOBase_detach_impl(self);
|
||||
if (nargs) {
|
||||
PyErr_SetString(PyExc_TypeError, "detach() takes no arguments");
|
||||
return NULL;
|
||||
}
|
||||
return _io__BufferedIOBase_detach_impl(self, cls);
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_io__BufferedIOBase_read__doc__,
|
||||
"read($self, /, *args)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Read and return up to n bytes.\n"
|
||||
"\n"
|
||||
"If the argument is omitted, None, or negative, read and\n"
|
||||
"return all data until EOF.\n"
|
||||
"\n"
|
||||
"If the argument is positive, and the underlying raw stream is\n"
|
||||
"not \'interactive\', multiple raw reads may be issued to satisfy\n"
|
||||
"the byte count (unless EOF is reached first).\n"
|
||||
"However, for interactive raw streams (as well as sockets and pipes),\n"
|
||||
"at most one raw read will be issued, and a short result does not\n"
|
||||
"imply that EOF is imminent.\n"
|
||||
"\n"
|
||||
"Return an empty bytes object on EOF.\n"
|
||||
"\n"
|
||||
"Return None if the underlying raw stream was open in non-blocking\n"
|
||||
"mode and no data is available at the moment.");
|
||||
|
||||
#define _IO__BUFFEREDIOBASE_READ_METHODDEF \
|
||||
{"read", _PyCFunction_CAST(_io__BufferedIOBase_read), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__BufferedIOBase_read__doc__},
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_read_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args);
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_read(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||
#else
|
||||
# define KWTUPLE NULL
|
||||
#endif
|
||||
|
||||
static const char * const _keywords[] = { NULL};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "read",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[1];
|
||||
PyObject *__clinic_args = NULL;
|
||||
|
||||
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
__clinic_args = args[0];
|
||||
return_value = _io__BufferedIOBase_read_impl(self, cls, __clinic_args);
|
||||
|
||||
exit:
|
||||
Py_XDECREF(__clinic_args);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_io__BufferedIOBase_read1__doc__,
|
||||
"read1($self, /, *args)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Read and return up to n bytes, with at most one read() call to the underlying raw stream.\n"
|
||||
"\n"
|
||||
"Return an empty bytes object on EOF.\n"
|
||||
"A short result does not imply that EOF is imminent.");
|
||||
|
||||
#define _IO__BUFFEREDIOBASE_READ1_METHODDEF \
|
||||
{"read1", _PyCFunction_CAST(_io__BufferedIOBase_read1), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__BufferedIOBase_read1__doc__},
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_read1_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args);
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_read1(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||
#else
|
||||
# define KWTUPLE NULL
|
||||
#endif
|
||||
|
||||
static const char * const _keywords[] = { NULL};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "read1",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[1];
|
||||
PyObject *__clinic_args = NULL;
|
||||
|
||||
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
__clinic_args = args[0];
|
||||
return_value = _io__BufferedIOBase_read1_impl(self, cls, __clinic_args);
|
||||
|
||||
exit:
|
||||
Py_XDECREF(__clinic_args);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_io__BufferedIOBase_write__doc__,
|
||||
"write($self, /, *args)\n"
|
||||
"--\n"
|
||||
"\n"
|
||||
"Write the given buffer to the IO stream.\n"
|
||||
"\n"
|
||||
"Return the number of bytes written, which is always\n"
|
||||
"the length of b in bytes.\n"
|
||||
"\n"
|
||||
"Raise BlockingIOError if the buffer is full and the\n"
|
||||
"underlying raw stream cannot accept more data at the moment.");
|
||||
|
||||
#define _IO__BUFFEREDIOBASE_WRITE_METHODDEF \
|
||||
{"write", _PyCFunction_CAST(_io__BufferedIOBase_write), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _io__BufferedIOBase_write__doc__},
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_write_impl(PyObject *self, PyTypeObject *cls,
|
||||
PyObject *args);
|
||||
|
||||
static PyObject *
|
||||
_io__BufferedIOBase_write(PyObject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
||||
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
||||
#else
|
||||
# define KWTUPLE NULL
|
||||
#endif
|
||||
|
||||
static const char * const _keywords[] = { NULL};
|
||||
static _PyArg_Parser _parser = {
|
||||
.keywords = _keywords,
|
||||
.fname = "write",
|
||||
.kwtuple = KWTUPLE,
|
||||
};
|
||||
#undef KWTUPLE
|
||||
PyObject *argsbuf[1];
|
||||
PyObject *__clinic_args = NULL;
|
||||
|
||||
args = _PyArg_UnpackKeywordsWithVararg(args, nargs, NULL, kwnames, &_parser, 0, 0, 0, 0, argsbuf);
|
||||
if (!args) {
|
||||
goto exit;
|
||||
}
|
||||
__clinic_args = args[0];
|
||||
return_value = _io__BufferedIOBase_write_impl(self, cls, __clinic_args);
|
||||
|
||||
exit:
|
||||
Py_XDECREF(__clinic_args);
|
||||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_io__Buffered_peek__doc__,
|
||||
|
|
@ -714,4 +877,4 @@ skip_optional_pos:
|
|||
exit:
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=8412b10c04259bb8 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=c4ea041ccc91b5d2 input=a9049054013a1b77]*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue