#![allow(clippy::useless_conversion)]
pub mod analysis;
pub mod arrow_export;
pub mod config;
pub mod partial;
pub mod progress;
pub mod sampling;
pub mod stop_condition;
pub mod types;
#[cfg(all(feature = "python-async", feature = "database"))]
pub mod database_async;
#[cfg(all(feature = "python-async", feature = "async-streaming"))]
pub mod async_streaming;
pub use analysis::analyze_file;
pub use arrow_export::{
PyRecordBatch, analyze_csv_to_arrow, analyze_parquet_to_arrow, profile_arrow, profile_dataframe,
};
pub use config::PyProfilerConfig;
pub use partial::{PyRowCountEstimate, PySchemaResult, infer_schema, quick_row_count};
pub use progress::PyProgressEvent;
pub use sampling::PySamplingStrategy;
pub use stop_condition::PyStopCondition;
pub use types::{PyColumnProfile, PyDataQualityMetrics, PyProfileReport};
use pyo3::prelude::*;
use pyo3::types::PyModule;
use pyo3::wrap_pyfunction;
#[pymodule]
#[pyo3(name = "_dataprof")]
pub fn dataprof(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add("__version__", env!("CARGO_PKG_VERSION"))?;
m.add_class::<PyProfilerConfig>()?;
m.add_class::<PyProfileReport>()?;
m.add_class::<PyColumnProfile>()?;
m.add_class::<PyDataQualityMetrics>()?;
m.add_class::<PyRecordBatch>()?;
m.add_class::<PySchemaResult>()?;
m.add_class::<PyRowCountEstimate>()?;
m.add_class::<PySamplingStrategy>()?;
m.add_class::<PyStopCondition>()?;
m.add_class::<PyProgressEvent>()?;
m.add_function(wrap_pyfunction!(analyze_file, m)?)?;
m.add_function(wrap_pyfunction!(profile_dataframe, m)?)?;
m.add_function(wrap_pyfunction!(profile_arrow, m)?)?;
m.add_function(wrap_pyfunction!(analyze_csv_to_arrow, m)?)?;
m.add_function(wrap_pyfunction!(analyze_parquet_to_arrow, m)?)?;
m.add_function(wrap_pyfunction!(infer_schema, m)?)?;
m.add_function(wrap_pyfunction!(quick_row_count, m)?)?;
#[cfg(all(feature = "python-async", feature = "database"))]
{
m.add_function(wrap_pyfunction!(database_async::analyze_database_async, m)?)?;
m.add_function(wrap_pyfunction!(database_async::test_connection_async, m)?)?;
m.add_function(wrap_pyfunction!(database_async::get_table_schema_async, m)?)?;
m.add_function(wrap_pyfunction!(database_async::count_table_rows_async, m)?)?;
}
#[cfg(all(feature = "python-async", feature = "async-streaming"))]
{
m.add_function(wrap_pyfunction!(async_streaming::profile_bytes_async, m)?)?;
m.add_function(wrap_pyfunction!(async_streaming::profile_file_async, m)?)?;
m.add_function(wrap_pyfunction!(
async_streaming::infer_schema_stream_async,
m
)?)?;
m.add_function(wrap_pyfunction!(
async_streaming::quick_row_count_stream_async,
m
)?)?;
}
#[cfg(all(feature = "python-async", feature = "parquet-async"))]
{
m.add_function(wrap_pyfunction!(async_streaming::profile_url_async, m)?)?;
}
Ok(())
}