use lbl::Query;
use pyo3::{exceptions::PyTypeError, prelude::*};
use pyo3_polars::PyDataFrame;
#[pyfunction(
signature = (
address = None,
name = None,
collection = None,
network = None,
function = None,
// extra_data_contains = None,
// extra_data_equals = None,
added_by = None,
added_before = None,
added_after = None,
added_at = None,
hex = false,
_output_format = "polars".to_string(),
*,
)
)]
#[allow(clippy::too_many_arguments)]
pub fn _query(
_py: Python<'_>,
address: Option<Vec<Vec<u8>>>,
name: Option<Vec<String>>,
collection: Option<Vec<String>>,
network: Option<Vec<String>>,
function: Option<Vec<String>>,
added_by: Option<Vec<String>>,
added_before: Option<u64>,
added_after: Option<u64>,
added_at: Option<u64>,
hex: bool,
_output_format: String,
) -> PyResult<PyDataFrame> {
let query = Query {
collections: collection,
networks: network,
addresses: address,
names: name,
functions: function,
added_bys: added_by,
added_before,
added_after,
added_at,
..Default::default()
};
let result = lbl::query(&query);
match result {
Ok(df) => {
let df = if hex {
match lbl::address_to_hex(df) {
Ok(df) => df,
Err(_) => return Err(PyErr::new::<PyTypeError, _>("could not convert to hex")),
}
} else {
df
};
Ok(PyDataFrame(df))
}
Err(e) => Err(PyErr::new::<PyTypeError, _>(format!("{:?}", e))),
}
}