mirror of
https://github.com/nushell/nushell.git
synced 2025-04-10 14:08:40 +02:00
dataframe list command (#4681)
This commit is contained in:
parent
a6a96b29cb
commit
ece5e7dbb7
102
crates/nu-command/src/dataframe/eager/list.rs
Normal file
102
crates/nu-command/src/dataframe/eager/list.rs
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
use nu_protocol::{
|
||||||
|
ast::Call,
|
||||||
|
engine::{Command, EngineState, Stack},
|
||||||
|
Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Value,
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::dataframe::values::NuDataFrame;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct ListDF;
|
||||||
|
|
||||||
|
impl Command for ListDF {
|
||||||
|
fn name(&self) -> &str {
|
||||||
|
"dfr list"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn usage(&self) -> &str {
|
||||||
|
"Lists stored dataframes"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signature(&self) -> Signature {
|
||||||
|
Signature::build(self.name()).category(Category::Custom("dataframe".into()))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn examples(&self) -> Vec<Example> {
|
||||||
|
vec![Example {
|
||||||
|
description: "Creates a new dataframe and shows it in the dataframe list",
|
||||||
|
example: r#"let test = ([[a b];[1 2] [3 4]] | dfr to-df);
|
||||||
|
dfr list"#,
|
||||||
|
result: None,
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(
|
||||||
|
&self,
|
||||||
|
engine_state: &EngineState,
|
||||||
|
stack: &mut Stack,
|
||||||
|
call: &Call,
|
||||||
|
_input: PipelineData,
|
||||||
|
) -> Result<PipelineData, ShellError> {
|
||||||
|
let vals = engine_state
|
||||||
|
.scope
|
||||||
|
.iter()
|
||||||
|
.flat_map(|frame| {
|
||||||
|
frame
|
||||||
|
.vars
|
||||||
|
.iter()
|
||||||
|
.filter_map(|var| {
|
||||||
|
let value = stack.get_var(*var.1, call.head);
|
||||||
|
match value {
|
||||||
|
Ok(value) => {
|
||||||
|
let name = String::from_utf8_lossy(var.0).to_string();
|
||||||
|
Some((name, value))
|
||||||
|
}
|
||||||
|
Err(_) => None,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect::<Vec<(String, Value)>>()
|
||||||
|
})
|
||||||
|
.filter_map(|(name, value)| match NuDataFrame::try_from_value(value) {
|
||||||
|
Ok(df) => Some((name, df)),
|
||||||
|
Err(_) => None,
|
||||||
|
})
|
||||||
|
.map(|(name, df)| {
|
||||||
|
let name = Value::String {
|
||||||
|
val: name,
|
||||||
|
span: call.head,
|
||||||
|
};
|
||||||
|
|
||||||
|
let columns = Value::Int {
|
||||||
|
val: df.as_ref().width() as i64,
|
||||||
|
span: call.head,
|
||||||
|
};
|
||||||
|
|
||||||
|
let rows = Value::Int {
|
||||||
|
val: df.as_ref().height() as i64,
|
||||||
|
span: call.head,
|
||||||
|
};
|
||||||
|
|
||||||
|
let cols = vec![
|
||||||
|
"name".to_string(),
|
||||||
|
"columns".to_string(),
|
||||||
|
"rows".to_string(),
|
||||||
|
];
|
||||||
|
let vals = vec![name, columns, rows];
|
||||||
|
|
||||||
|
Value::Record {
|
||||||
|
cols,
|
||||||
|
vals,
|
||||||
|
span: call.head,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect::<Vec<Value>>();
|
||||||
|
|
||||||
|
let list = Value::List {
|
||||||
|
vals,
|
||||||
|
span: call.head,
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(list.into_pipeline_data())
|
||||||
|
}
|
||||||
|
}
|
@ -14,6 +14,7 @@ mod get;
|
|||||||
mod groupby;
|
mod groupby;
|
||||||
mod join;
|
mod join;
|
||||||
mod last;
|
mod last;
|
||||||
|
mod list;
|
||||||
mod melt;
|
mod melt;
|
||||||
mod open;
|
mod open;
|
||||||
mod pivot;
|
mod pivot;
|
||||||
@ -47,6 +48,7 @@ pub use get::GetDF;
|
|||||||
pub use groupby::CreateGroupBy;
|
pub use groupby::CreateGroupBy;
|
||||||
pub use join::JoinDF;
|
pub use join::JoinDF;
|
||||||
pub use last::LastDF;
|
pub use last::LastDF;
|
||||||
|
pub use list::ListDF;
|
||||||
pub use melt::MeltDF;
|
pub use melt::MeltDF;
|
||||||
pub use open::OpenDataFrame;
|
pub use open::OpenDataFrame;
|
||||||
pub use pivot::PivotDF;
|
pub use pivot::PivotDF;
|
||||||
@ -90,6 +92,7 @@ pub fn add_eager_decls(working_set: &mut StateWorkingSet) {
|
|||||||
GetDF,
|
GetDF,
|
||||||
JoinDF,
|
JoinDF,
|
||||||
LastDF,
|
LastDF,
|
||||||
|
ListDF,
|
||||||
MeltDF,
|
MeltDF,
|
||||||
OpenDataFrame,
|
OpenDataFrame,
|
||||||
PivotDF,
|
PivotDF,
|
||||||
|
Loading…
Reference in New Issue
Block a user