lbl-python 0.1.0

lbl is a toolkit for managing address labels
Documentation
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>>,
    // extra_data_contains: Option<HashMap<String, serde_json::Value>>,
    // extra_data_equals: Option<HashMap<String, serde_json::Value>>,
    added_by: Option<Vec<String>>,
    added_before: Option<u64>,
    added_after: Option<u64>,
    added_at: Option<u64>,
    hex: bool,
    _output_format: String,
) -> PyResult<PyDataFrame> {
    // build query
    let query = Query {
        collections: collection,
        networks: network,
        addresses: address,
        names: name,
        functions: function,
        // extra_data_contains,
        // extra_data_equals,
        added_bys: added_by,
        added_before,
        added_after,
        added_at,
        ..Default::default()
    };

    // fetch result
    let result = lbl::query(&query);

    // package result
    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))),
    }
}