Skip to content

data explorer: update comms with convert to code messages #873

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 64 additions & 1 deletion crates/amalthea/src/comm/data_explorer_comm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,20 @@ pub struct ExportedData {
pub format: ExportFormat
}

/// Code snippet for the data view
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct ConvertedCode {
/// Lines of code that implement filters and sort keys
pub converted_code: Vec<String>
}

/// Syntax to use for code conversion
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct CodeSyntaxName {
/// The name of the code syntax, eg, pandas, polars, dplyr, etc.
pub code_syntax_name: String
}

/// The result of applying filters to a table
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct FilterResult {
Expand Down Expand Up @@ -537,7 +551,10 @@ pub struct SupportedFeatures {
pub set_sort_columns: SetSortColumnsFeatures,

/// Support for 'export_data_selection' RPC and its features
pub export_data_selection: ExportDataSelectionFeatures
pub export_data_selection: ExportDataSelectionFeatures,

/// Support for 'convert_to_code' RPC and its features
pub convert_to_code: ConvertToCodeFeatures
}

/// Feature flags for 'search_schema' RPC
Expand Down Expand Up @@ -600,6 +617,16 @@ pub struct SetSortColumnsFeatures {
pub support_status: SupportStatus
}

/// Feature flags for convert to code RPC
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct ConvertToCodeFeatures {
/// The support status for this RPC method
pub support_status: SupportStatus,

/// The syntaxes for converted code
pub code_syntaxes: Option<Vec<CodeSyntaxName>>
}

/// A selection on the data grid, for copying to the clipboard or other
/// actions
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
Expand Down Expand Up @@ -1073,6 +1100,22 @@ pub struct ExportDataSelectionParams {
pub format: ExportFormat,
}

/// Parameters for the ConvertToCode method.
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct ConvertToCodeParams {
/// Zero or more column filters to apply
pub column_filters: Vec<ColumnFilter>,

/// Zero or more row filters to apply
pub row_filters: Vec<RowFilter>,

/// Zero or more sort keys to apply
pub sort_keys: Vec<ColumnSortKey>,

/// The code syntax to use for conversion
pub code_syntax_name: CodeSyntaxName,
}

/// Parameters for the SetColumnFilters method.
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct SetColumnFiltersParams {
Expand Down Expand Up @@ -1164,6 +1207,20 @@ pub enum DataExplorerBackendRequest {
#[serde(rename = "export_data_selection")]
ExportDataSelection(ExportDataSelectionParams),

/// Converts the current data view into a code snippet.
///
/// Converts filters and sort keys as code in different syntaxes like
/// pandas, polars, data.table, dplyr
#[serde(rename = "convert_to_code")]
ConvertToCode(ConvertToCodeParams),

/// Suggest code syntax for code conversion
///
/// Suggest code syntax for code conversion based on the current backend
/// state
#[serde(rename = "suggest_code_syntax")]
SuggestCodeSyntax,

/// Set column filters to select subset of table columns
///
/// Set or clear column filters on table, replacing any previous filters
Expand Down Expand Up @@ -1220,6 +1277,12 @@ pub enum DataExplorerBackendReply {
/// Exported result
ExportDataSelectionReply(ExportedData),

/// Code snippet for the data view
ConvertToCodeReply(ConvertedCode),

/// Syntax to use for code conversion
SuggestCodeSyntaxReply(CodeSyntaxName),

/// Reply for the set_column_filters method (no result)
SetColumnFiltersReply(),

Expand Down
27 changes: 27 additions & 0 deletions crates/ark/src/data_explorer/r_data_explorer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use std::collections::HashMap;
use amalthea::comm::comm_channel::CommMsg;
use amalthea::comm::data_explorer_comm::ArraySelection;
use amalthea::comm::data_explorer_comm::BackendState;
use amalthea::comm::data_explorer_comm::CodeSyntaxName;
use amalthea::comm::data_explorer_comm::ColumnDisplayType;
use amalthea::comm::data_explorer_comm::ColumnFilter;
use amalthea::comm::data_explorer_comm::ColumnProfileType;
Expand All @@ -19,6 +20,8 @@ use amalthea::comm::data_explorer_comm::ColumnSchema;
use amalthea::comm::data_explorer_comm::ColumnSelection;
use amalthea::comm::data_explorer_comm::ColumnSortKey;
use amalthea::comm::data_explorer_comm::ColumnValue;
use amalthea::comm::data_explorer_comm::ConvertToCodeFeatures;
use amalthea::comm::data_explorer_comm::ConvertedCode;
use amalthea::comm::data_explorer_comm::DataExplorerBackendReply;
use amalthea::comm::data_explorer_comm::DataExplorerBackendRequest;
use amalthea::comm::data_explorer_comm::DataExplorerFrontendEvent;
Expand Down Expand Up @@ -556,6 +559,16 @@ impl RDataExplorer {
format,
},
)),
DataExplorerBackendRequest::ConvertToCode(_) => Ok(
DataExplorerBackendReply::ConvertToCodeReply(ConvertedCode {
converted_code: vec!["not yet implemented".to_string()],
}),
),
DataExplorerBackendRequest::SuggestCodeSyntax => Ok(
DataExplorerBackendReply::SuggestCodeSyntaxReply(CodeSyntaxName {
code_syntax_name: "base".into(),
}),
),
}
}
}
Expand Down Expand Up @@ -981,6 +994,20 @@ impl RDataExplorer {
ExportFormat::Html,
],
},
convert_to_code: ConvertToCodeFeatures {
support_status: SupportStatus::Supported,
code_syntaxes: Some(vec![
CodeSyntaxName {
code_syntax_name: "base".into(),
},
CodeSyntaxName {
code_syntax_name: "data.table".into(),
},
CodeSyntaxName {
code_syntax_name: "dplyr".into(),
},
]),
},
},
};
Ok(DataExplorerBackendReply::GetStateReply(state))
Expand Down
Loading