Skip to main content

_native/
lib.rs

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
27// Re-exports for cross-module access (used by public_symbols.rs and tests).
28pub(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}