mirror of https://github.com/python/cpython.git
gh-91102: Port 8-argument _warnings.warn_explicit to Argument Clinic (#92891)
Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
6dadf6ca01
commit
41e0585ffa
|
@ -0,0 +1 @@
|
||||||
|
:meth:`_warnings.warn_explicit` is ported to Argument Clinic.
|
|
@ -1030,28 +1030,31 @@ get_source_line(PyInterpreterState *interp, PyObject *module_globals, int lineno
|
||||||
return source_line;
|
return source_line;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*[clinic input]
|
||||||
|
warn_explicit as warnings_warn_explicit
|
||||||
|
|
||||||
|
message: object
|
||||||
|
category: object
|
||||||
|
filename: unicode
|
||||||
|
lineno: int
|
||||||
|
module as mod: object = NULL
|
||||||
|
registry: object = None
|
||||||
|
module_globals: object = None
|
||||||
|
source as sourceobj: object = None
|
||||||
|
|
||||||
|
Issue a warning, or maybe ignore it or raise an exception.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds)
|
warnings_warn_explicit_impl(PyObject *module, PyObject *message,
|
||||||
|
PyObject *category, PyObject *filename,
|
||||||
|
int lineno, PyObject *mod, PyObject *registry,
|
||||||
|
PyObject *module_globals, PyObject *sourceobj)
|
||||||
|
/*[clinic end generated code: output=c49c62b15a49a186 input=df6eeb8b45e712f1]*/
|
||||||
{
|
{
|
||||||
static char *kwd_list[] = {"message", "category", "filename", "lineno",
|
|
||||||
"module", "registry", "module_globals",
|
|
||||||
"source", 0};
|
|
||||||
PyObject *message;
|
|
||||||
PyObject *category;
|
|
||||||
PyObject *filename;
|
|
||||||
int lineno;
|
|
||||||
PyObject *module = NULL;
|
|
||||||
PyObject *registry = NULL;
|
|
||||||
PyObject *module_globals = NULL;
|
|
||||||
PyObject *sourceobj = NULL;
|
|
||||||
PyObject *source_line = NULL;
|
PyObject *source_line = NULL;
|
||||||
PyObject *returned;
|
PyObject *returned;
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOUi|OOOO:warn_explicit",
|
|
||||||
kwd_list, &message, &category, &filename, &lineno, &module,
|
|
||||||
®istry, &module_globals, &sourceobj))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
PyThreadState *tstate = get_current_tstate();
|
PyThreadState *tstate = get_current_tstate();
|
||||||
if (tstate == NULL) {
|
if (tstate == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1070,8 +1073,8 @@ warnings_warn_explicit(PyObject *self, PyObject *args, PyObject *kwds)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
returned = warn_explicit(tstate, category, message, filename, lineno, module,
|
returned = warn_explicit(tstate, category, message, filename, lineno,
|
||||||
registry, source_line, sourceobj);
|
mod, registry, source_line, sourceobj);
|
||||||
Py_XDECREF(source_line);
|
Py_XDECREF(source_line);
|
||||||
return returned;
|
return returned;
|
||||||
}
|
}
|
||||||
|
@ -1331,13 +1334,9 @@ _PyErr_WarnUnawaitedCoroutine(PyObject *coro)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(warn_explicit_doc,
|
|
||||||
"Low-level interface to warnings functionality.");
|
|
||||||
|
|
||||||
static PyMethodDef warnings_functions[] = {
|
static PyMethodDef warnings_functions[] = {
|
||||||
WARNINGS_WARN_METHODDEF
|
WARNINGS_WARN_METHODDEF
|
||||||
{"warn_explicit", _PyCFunction_CAST(warnings_warn_explicit),
|
WARNINGS_WARN_EXPLICIT_METHODDEF
|
||||||
METH_VARARGS | METH_KEYWORDS, warn_explicit_doc},
|
|
||||||
{"_filters_mutated", _PyCFunction_CAST(warnings_filters_mutated), METH_NOARGS,
|
{"_filters_mutated", _PyCFunction_CAST(warnings_filters_mutated), METH_NOARGS,
|
||||||
NULL},
|
NULL},
|
||||||
/* XXX(brett.cannon): add showwarning? */
|
/* XXX(brett.cannon): add showwarning? */
|
||||||
|
|
|
@ -66,4 +66,85 @@ skip_optional_pos:
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=0435c68611fa2fe9 input=a9049054013a1b77]*/
|
|
||||||
|
PyDoc_STRVAR(warnings_warn_explicit__doc__,
|
||||||
|
"warn_explicit($module, /, message, category, filename, lineno,\n"
|
||||||
|
" module=<unrepresentable>, registry=None,\n"
|
||||||
|
" module_globals=None, source=None)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Issue a warning, or maybe ignore it or raise an exception.");
|
||||||
|
|
||||||
|
#define WARNINGS_WARN_EXPLICIT_METHODDEF \
|
||||||
|
{"warn_explicit", _PyCFunction_CAST(warnings_warn_explicit), METH_FASTCALL|METH_KEYWORDS, warnings_warn_explicit__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
warnings_warn_explicit_impl(PyObject *module, PyObject *message,
|
||||||
|
PyObject *category, PyObject *filename,
|
||||||
|
int lineno, PyObject *mod, PyObject *registry,
|
||||||
|
PyObject *module_globals, PyObject *sourceobj);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
warnings_warn_explicit(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
static const char * const _keywords[] = {"message", "category", "filename", "lineno", "module", "registry", "module_globals", "source", NULL};
|
||||||
|
static _PyArg_Parser _parser = {NULL, _keywords, "warn_explicit", 0};
|
||||||
|
PyObject *argsbuf[8];
|
||||||
|
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 4;
|
||||||
|
PyObject *message;
|
||||||
|
PyObject *category;
|
||||||
|
PyObject *filename;
|
||||||
|
int lineno;
|
||||||
|
PyObject *mod = NULL;
|
||||||
|
PyObject *registry = Py_None;
|
||||||
|
PyObject *module_globals = Py_None;
|
||||||
|
PyObject *sourceobj = Py_None;
|
||||||
|
|
||||||
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 4, 8, 0, argsbuf);
|
||||||
|
if (!args) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
message = args[0];
|
||||||
|
category = args[1];
|
||||||
|
if (!PyUnicode_Check(args[2])) {
|
||||||
|
_PyArg_BadArgument("warn_explicit", "argument 'filename'", "str", args[2]);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (PyUnicode_READY(args[2]) == -1) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
filename = args[2];
|
||||||
|
lineno = _PyLong_AsInt(args[3]);
|
||||||
|
if (lineno == -1 && PyErr_Occurred()) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!noptargs) {
|
||||||
|
goto skip_optional_pos;
|
||||||
|
}
|
||||||
|
if (args[4]) {
|
||||||
|
mod = args[4];
|
||||||
|
if (!--noptargs) {
|
||||||
|
goto skip_optional_pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args[5]) {
|
||||||
|
registry = args[5];
|
||||||
|
if (!--noptargs) {
|
||||||
|
goto skip_optional_pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args[6]) {
|
||||||
|
module_globals = args[6];
|
||||||
|
if (!--noptargs) {
|
||||||
|
goto skip_optional_pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sourceobj = args[7];
|
||||||
|
skip_optional_pos:
|
||||||
|
return_value = warnings_warn_explicit_impl(module, message, category, filename, lineno, mod, registry, module_globals, sourceobj);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
/*[clinic end generated code: output=596b370838b95386 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue