mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-126579: Adapt sys.audit() to Argument Clinic (GH-126580)
This commit is contained in:
parent
a3e8e7bbc3
commit
a93fc0969e
2 changed files with 63 additions and 42 deletions
51
Python/clinic/sysmodule.c.h
generated
51
Python/clinic/sysmodule.c.h
generated
|
@ -7,6 +7,7 @@ preserve
|
||||||
# include "pycore_runtime.h" // _Py_ID()
|
# include "pycore_runtime.h" // _Py_ID()
|
||||||
#endif
|
#endif
|
||||||
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
|
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
|
||||||
|
#include "pycore_tuple.h" // _PyTuple_FromArray()
|
||||||
|
|
||||||
PyDoc_STRVAR(sys_addaudithook__doc__,
|
PyDoc_STRVAR(sys_addaudithook__doc__,
|
||||||
"addaudithook($module, /, hook)\n"
|
"addaudithook($module, /, hook)\n"
|
||||||
|
@ -64,6 +65,54 @@ exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyDoc_STRVAR(sys_audit__doc__,
|
||||||
|
"audit($module, event, /, *args)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Passes the event to any audit hooks that are attached.");
|
||||||
|
|
||||||
|
#define SYS_AUDIT_METHODDEF \
|
||||||
|
{"audit", _PyCFunction_CAST(sys_audit), METH_FASTCALL, sys_audit__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
sys_audit_impl(PyObject *module, const char *event, PyObject *args);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
sys_audit(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
const char *event;
|
||||||
|
PyObject *__clinic_args = NULL;
|
||||||
|
|
||||||
|
if (!_PyArg_CheckPositional("audit", nargs, 1, PY_SSIZE_T_MAX)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (!PyUnicode_Check(args[0])) {
|
||||||
|
_PyArg_BadArgument("audit", "argument 1", "str", args[0]);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
Py_ssize_t event_length;
|
||||||
|
event = PyUnicode_AsUTF8AndSize(args[0], &event_length);
|
||||||
|
if (event == NULL) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
if (strlen(event) != (size_t)event_length) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "embedded null character");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
__clinic_args = _PyTuple_FromArray(args + 1, nargs - 1);
|
||||||
|
if (__clinic_args == NULL) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
return_value = sys_audit_impl(module, event, __clinic_args);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
/* Cleanup for args */
|
||||||
|
Py_XDECREF(__clinic_args);
|
||||||
|
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(sys_displayhook__doc__,
|
PyDoc_STRVAR(sys_displayhook__doc__,
|
||||||
"displayhook($module, object, /)\n"
|
"displayhook($module, object, /)\n"
|
||||||
"--\n"
|
"--\n"
|
||||||
|
@ -1619,4 +1668,4 @@ exit:
|
||||||
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
|
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
|
||||||
#define SYS_GETANDROIDAPILEVEL_METHODDEF
|
#define SYS_GETANDROIDAPILEVEL_METHODDEF
|
||||||
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
|
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
|
||||||
/*[clinic end generated code: output=cf24c260a269a5d2 input=a9049054013a1b77]*/
|
/*[clinic end generated code: output=6d4f6cd20419b675 input=a9049054013a1b77]*/
|
||||||
|
|
|
@ -499,56 +499,28 @@ sys_addaudithook_impl(PyObject *module, PyObject *hook)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(audit_doc,
|
/*[clinic input]
|
||||||
"audit($module, event, /, *args)\n\
|
sys.audit
|
||||||
--\n\
|
|
||||||
\n\
|
event: str
|
||||||
Passes the event to any audit hooks that are attached.");
|
/
|
||||||
|
*args: tuple
|
||||||
|
|
||||||
|
Passes the event to any audit hooks that are attached.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
sys_audit(PyObject *self, PyObject *const *args, Py_ssize_t argc)
|
sys_audit_impl(PyObject *module, const char *event, PyObject *args)
|
||||||
|
/*[clinic end generated code: output=1d0fc82da768f49d input=ec3b688527945109]*/
|
||||||
{
|
{
|
||||||
PyThreadState *tstate = _PyThreadState_GET();
|
PyThreadState *tstate = _PyThreadState_GET();
|
||||||
_Py_EnsureTstateNotNULL(tstate);
|
_Py_EnsureTstateNotNULL(tstate);
|
||||||
|
|
||||||
if (argc == 0) {
|
|
||||||
_PyErr_SetString(tstate, PyExc_TypeError,
|
|
||||||
"audit() missing 1 required positional argument: "
|
|
||||||
"'event'");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(args[0] != NULL);
|
|
||||||
|
|
||||||
if (!should_audit(tstate->interp)) {
|
if (!should_audit(tstate->interp)) {
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *auditEvent = args[0];
|
int res = _PySys_Audit(tstate, event, "O", args);
|
||||||
if (!auditEvent) {
|
|
||||||
_PyErr_SetString(tstate, PyExc_TypeError,
|
|
||||||
"expected str for argument 'event'");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!PyUnicode_Check(auditEvent)) {
|
|
||||||
_PyErr_Format(tstate, PyExc_TypeError,
|
|
||||||
"expected str for argument 'event', not %.200s",
|
|
||||||
Py_TYPE(auditEvent)->tp_name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
const char *event = PyUnicode_AsUTF8(auditEvent);
|
|
||||||
if (!event) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
PyObject *auditArgs = _PyTuple_FromArray(args + 1, argc - 1);
|
|
||||||
if (!auditArgs) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int res = _PySys_Audit(tstate, event, "O", auditArgs);
|
|
||||||
Py_DECREF(auditArgs);
|
|
||||||
|
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2564,7 +2536,7 @@ close_and_release:
|
||||||
static PyMethodDef sys_methods[] = {
|
static PyMethodDef sys_methods[] = {
|
||||||
/* Might as well keep this in alphabetic order */
|
/* Might as well keep this in alphabetic order */
|
||||||
SYS_ADDAUDITHOOK_METHODDEF
|
SYS_ADDAUDITHOOK_METHODDEF
|
||||||
{"audit", _PyCFunction_CAST(sys_audit), METH_FASTCALL, audit_doc },
|
SYS_AUDIT_METHODDEF
|
||||||
{"breakpointhook", _PyCFunction_CAST(sys_breakpointhook),
|
{"breakpointhook", _PyCFunction_CAST(sys_breakpointhook),
|
||||||
METH_FASTCALL | METH_KEYWORDS, breakpointhook_doc},
|
METH_FASTCALL | METH_KEYWORDS, breakpointhook_doc},
|
||||||
SYS__CLEAR_INTERNAL_CACHES_METHODDEF
|
SYS__CLEAR_INTERNAL_CACHES_METHODDEF
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue