1use pyo3::prelude::*;
2use pyo3::types::PyString;
3
4mod daemon_client;
5mod public_symbols;
6
7mod containment;
8mod debug_traces;
9mod helpers;
10mod idle_detector;
11mod metrics;
12mod originator;
13mod pid_tracking;
14mod priority;
15mod process;
16mod process_tree;
17mod pty_buffer;
18mod pty_process;
19mod py_native_process;
20mod registry;
21mod signal_bool;
22mod terminal_input;
23
24#[cfg(test)]
25mod tests;
26
27pub(crate) use containment::PyContainedProcessGroup;
29#[cfg(windows)]
30pub(crate) use debug_traces::native_test_hang_in_rust;
31pub(crate) use debug_traces::{
32 monitor_console_windows, native_dump_rust_debug_traces, native_test_capture_rust_debug_trace,
33 native_windows_terminal_input_bytes,
34};
35pub(crate) use idle_detector::NativeIdleDetector;
36pub(crate) use metrics::NativeProcessMetrics;
37pub(crate) use originator::{py_find_processes_by_originator, PyOriginatorProcessInfo};
38pub(crate) use pid_tracking::{
39 list_tracked_processes, native_cleanup_tracked_processes, native_list_active_processes,
40 native_register_process, native_unregister_process, track_process_pid, tracked_pid_db_path_py,
41 untrack_process_pid,
42};
43pub(crate) use priority::native_apply_process_nice;
44pub(crate) use process::NativeRunningProcess;
45pub(crate) use process_tree::{
46 native_get_process_tree_info, native_is_same_process, native_kill_process_tree,
47 native_launch_detached, native_process_created_at,
48};
49pub(crate) use pty_buffer::NativePtyBuffer;
50pub(crate) use pty_process::NativePtyProcess;
51pub(crate) use py_native_process::PyNativeProcess;
52pub(crate) use signal_bool::NativeSignalBool;
53pub(crate) use terminal_input::{NativeTerminalInput, NativeTerminalInputEvent};
54
55#[pymodule]
56fn _native(_py: Python<'_>, module: &Bound<'_, PyModule>) -> PyResult<()> {
57 module.add_class::<PyNativeProcess>()?;
58 module.add_class::<NativeRunningProcess>()?;
59 module.add_class::<PyContainedProcessGroup>()?;
60 module.add_class::<PyOriginatorProcessInfo>()?;
61 module.add_function(wrap_pyfunction!(py_find_processes_by_originator, module)?)?;
62 module.add_class::<NativePtyProcess>()?;
63 module.add_class::<NativeProcessMetrics>()?;
64 module.add_class::<NativeSignalBool>()?;
65 module.add_class::<NativeIdleDetector>()?;
66 module.add_class::<NativePtyBuffer>()?;
67 module.add_class::<NativeTerminalInput>()?;
68 module.add_class::<NativeTerminalInputEvent>()?;
69 module.add_function(wrap_pyfunction!(tracked_pid_db_path_py, module)?)?;
70 module.add_function(wrap_pyfunction!(track_process_pid, module)?)?;
71 module.add_function(wrap_pyfunction!(untrack_process_pid, module)?)?;
72 module.add_function(wrap_pyfunction!(native_register_process, module)?)?;
73 module.add_function(wrap_pyfunction!(native_unregister_process, module)?)?;
74 module.add_function(wrap_pyfunction!(list_tracked_processes, module)?)?;
75 module.add_function(wrap_pyfunction!(native_list_active_processes, module)?)?;
76 module.add_function(wrap_pyfunction!(native_launch_detached, module)?)?;
77 module.add_function(wrap_pyfunction!(native_get_process_tree_info, module)?)?;
78 module.add_function(wrap_pyfunction!(native_kill_process_tree, module)?)?;
79 module.add_function(wrap_pyfunction!(native_process_created_at, module)?)?;
80 module.add_function(wrap_pyfunction!(native_is_same_process, module)?)?;
81 module.add_function(wrap_pyfunction!(native_cleanup_tracked_processes, module)?)?;
82 module.add_function(wrap_pyfunction!(native_apply_process_nice, module)?)?;
83 module.add_function(wrap_pyfunction!(
84 native_windows_terminal_input_bytes,
85 module
86 )?)?;
87 module.add_function(wrap_pyfunction!(native_dump_rust_debug_traces, module)?)?;
88 module.add_function(wrap_pyfunction!(
89 native_test_capture_rust_debug_trace,
90 module
91 )?)?;
92 #[cfg(windows)]
93 module.add_function(wrap_pyfunction!(native_test_hang_in_rust, module)?)?;
94 module.add_function(wrap_pyfunction!(monitor_console_windows, module)?)?;
95 module.add("VERSION", PyString::new(_py, env!("CARGO_PKG_VERSION")))?;
96 Ok(())
97}