8000 gh-108294: Add time.sleep audit event (GH-108298) · python/cpython@31b61d1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 31b61d1

Browse files
authored
gh-108294: Add time.sleep audit event (GH-108298)
1 parent 2dfbd4f commit 31b61d1

File tree

5 files changed

+38
-0
lines changed

5 files changed

+38
-0
lines changed

Doc/library/time.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,8 @@ Functions
379379
* Or use ``nanosleep()`` if available (resolution: 1 nanosecond);
380380
* Or use ``select()`` (resolution: 1 microsecond).
381381

382+
.. audit-event:: time.sleep secs
383+
382384
.. versionchanged:: 3.11
383385
On Unix, the ``clock_nanosleep()`` and ``nanosleep()`` functions are now
384386
used if available. On Windows, a waitable timer is now used.
@@ -389,6 +391,9 @@ Functions
389391
:pep:`475` for the rationale).
390392

391393

394+
.. versionchanged:: 3.13
395+
Raises an auditing event.
396+
392397
.. index::
393398
single: % (percent); datetime format
394399

Lib/test/audit-tests.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,21 @@ def test_not_in_gc():
514514
assert hook not in o
515515

516516

517+
def test_time():
518+
import time
519+
520+
def hook(event, args):
521+
if event.startswith("time."):
522+
print(event, *args)
523+
sys.addaudithook(hook)
524+
525+
time.sleep(0)
526+
time.sleep(0.0625) # 1/16, a small exact float
527+
try:
528+
time.sleep(-1)
529+
except ValueError:
530+
pass
531+
517532
def test_sys_monitoring_register_callback():
518533
import sys
519534

Lib/test/test_audit.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,21 @@ def test_not_in_gc(self):
256256
if returncode:
257257
self.fail(stderr)
258258

259+
def test_time(self):
260+
returncode, events, stderr = self.run_python("test_time")
261+
if returncode:
262+
self.fail(stderr)
263+
264+
if support.verbose:
265+
print(*events, sep='\n')
266+
267+
actual = [(ev[0], ev[2]) for ev in events]
268+
expected = [("time.sleep", "0"),
269+
("time.sleep", "0.0625"),
270+
("time.sleep", "-1")]
271+
272+
self.assertEqual(actual, expected)
273+
259274

260275
def test_sys_monitoring_register_callback(self):
261276
returncode, events, stderr = self.run_python("test_sys_monitoring_register_callback")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:func:`time.sleep` now raises an auditing event.

Modules/timemodule.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,8 @@ Return the clk_id of a thread's CPU time clock.");
414414
static PyObject *
415415
time_sleep(PyObject *self, PyObject *timeout_obj)
416416
{
417+
PySys_Audit("time.sleep", "O", timeout_obj);
418+
417419
_PyTime_t timeout;
418420
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT))
419421
return NULL;

0 commit comments

Comments
 (0)
0