mirror of
https://github.com/nushell/nushell.git
synced 2025-04-24 21:28:20 +02:00
# Description This PR: - Removes the lazy_command, expr_command macros and migrates the commands that were utilizing them. - Removes the custom logic in DataFrameValues::is_equals to use the polars DataFrame version of PartialEq - Adds examples to commands that previously did not have examples or had inadequate ones. NOTE: A lot of examples now have a `polars sort` at the end. This is needed due to the comparison in the result. The new polars version of equals cares about the ordering. I removed the custom equals logic as it causes comparisons to lock up when comparing dataframes that contain a row that contains a list. I discovered this issue when adding examples to `polars implode`
81 lines
2.4 KiB
Rust
81 lines
2.4 KiB
Rust
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
|
|
use nu_protocol::{Category, Example, LabeledError, PipelineData, Signature, Span, Type, Value};
|
|
|
|
use crate::{
|
|
values::{Column, CustomValueSupport, NuDataFrame, NuLazyFrame},
|
|
PolarsPlugin,
|
|
};
|
|
|
|
pub struct LazyReverse;
|
|
|
|
impl PluginCommand for LazyReverse {
|
|
type Plugin = PolarsPlugin;
|
|
|
|
fn name(&self) -> &str {
|
|
"polars reverse"
|
|
}
|
|
|
|
fn description(&self) -> &str {
|
|
"Reverses the LazyFrame"
|
|
}
|
|
|
|
fn signature(&self) -> Signature {
|
|
Signature::build(self.name())
|
|
.input_output_type(
|
|
Type::Custom("dataframe".into()),
|
|
Type::Custom("dataframe".into()),
|
|
)
|
|
.category(Category::Custom("dataframe".into()))
|
|
}
|
|
|
|
fn examples(&self) -> Vec<Example> {
|
|
vec![Example {
|
|
description: "Reverses the dataframe.",
|
|
example: "[[a b]; [6 2] [4 2] [2 2]] | polars into-df | polars reverse",
|
|
result: Some(
|
|
NuDataFrame::try_from_columns(
|
|
vec![
|
|
Column::new(
|
|
"a".to_string(),
|
|
vec![Value::test_int(2), Value::test_int(4), Value::test_int(6)],
|
|
),
|
|
Column::new(
|
|
"b".to_string(),
|
|
vec![Value::test_int(2), Value::test_int(2), Value::test_int(2)],
|
|
),
|
|
],
|
|
None,
|
|
)
|
|
.expect("simple df for test should not fail")
|
|
.into_value(Span::test_data()),
|
|
),
|
|
}]
|
|
}
|
|
|
|
fn run(
|
|
&self,
|
|
plugin: &Self::Plugin,
|
|
engine: &EngineInterface,
|
|
call: &EvaluatedCall,
|
|
input: PipelineData,
|
|
) -> Result<PipelineData, LabeledError> {
|
|
let lazy = NuLazyFrame::try_from_pipeline_coerce(plugin, input, call.head)
|
|
.map_err(LabeledError::from)?;
|
|
let lazy = NuLazyFrame::new(lazy.from_eager, lazy.to_polars().reverse());
|
|
lazy.to_pipeline_data(plugin, engine, call.head)
|
|
.map_err(LabeledError::from)
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use super::*;
|
|
use crate::test::test_polars_plugin_command;
|
|
use nu_protocol::ShellError;
|
|
|
|
#[test]
|
|
fn test_examples() -> Result<(), ShellError> {
|
|
test_polars_plugin_command(&LazyReverse)
|
|
}
|
|
}
|