From afc69d605dd0d1d72e200f7ca1b182a0b98a674b Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Thu, 12 Dec 2024 19:49:36 +0100 Subject: [PATCH 01/11] added: error handling and nice output for cell set --- module/move/gspread/src/actions/gspread.rs | 9 ++++++- .../gspread/src/actions/gspread_cell_set.rs | 26 +++++++++++++------ .../move/gspread/src/commands/gspread_cell.rs | 4 +-- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/module/move/gspread/src/actions/gspread.rs b/module/move/gspread/src/actions/gspread.rs index 60b0fd980c..176be99829 100644 --- a/module/move/gspread/src/actions/gspread.rs +++ b/module/move/gspread/src/actions/gspread.rs @@ -25,11 +25,17 @@ mod private google_sheets4::Error ), - #[ error( "Invalid URL format: {0}" ) ] + #[ error( "Invalid URL format:\n{0}" ) ] InvalidUrl ( String ), + + #[ error( "Cell error:\n{0}" ) ] + CellError + ( + String + ), } pub fn get_spreadsheet_id_from_url @@ -60,6 +66,7 @@ crate::mod_interface! { own use { + Error, Result, get_spreadsheet_id_from_url, }; diff --git a/module/move/gspread/src/actions/gspread_cell_set.rs b/module/move/gspread/src/actions/gspread_cell_set.rs index 818a667f1c..6d4aeb160f 100644 --- a/module/move/gspread/src/actions/gspread_cell_set.rs +++ b/module/move/gspread/src/actions/gspread_cell_set.rs @@ -9,7 +9,7 @@ mod private { use google_sheets4::api::ValueRange; use crate::*; - use actions::gspread::Result; + use actions::gspread::{ Result, Error }; use client::SheetsType; use ser::JsonValue; @@ -20,7 +20,7 @@ mod private table_name : &str, cell_id : &str, value : &str - ) -> Result< i32 > + ) -> Result< String > { let value = JsonValue::String( value.to_string() ); @@ -30,17 +30,27 @@ mod private ..ValueRange::default() }; - let result = hub + match hub .spreadsheets() .values_update( value_range, spreadsheet_id, format!( "{}!{}", table_name, cell_id ).as_str() ) .value_input_option( "USER_ENTERED" ) .doit() - .await? - .1 - .updated_cells - .unwrap(); + .await + { + Ok( ( _, response) ) => + { + match response.updated_cells + { + Some( number ) => Ok( format!( "You successfully update {} cell!", number ) ), + None => Err( Error::CellError( "Some problem with cell updating".to_string() ) ) + } + } + Err( error) => + { + Err( Error::ApiError( error ) ) + } + } - Ok( result ) } } diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index 057da2dd09..6312cbfc85 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -103,8 +103,8 @@ mod private match result { - Ok( value ) => println!( "Success: {:?}", value ), - Err( error ) => println!( "Error: {}", error ), + Ok( msg ) => println!( "{}", msg ), + Err( error ) => println!( "Error:\n{}", error ), } } From 9a0921b8cd61ebaf9aab36d37aec25bb52f08ca7 Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 13 Dec 2024 03:59:59 +0100 Subject: [PATCH 02/11] fixed: cell get --- .../gspread/src/actions/gspread_cell_get.rs | 28 +++++++++++++------ .../gspread/src/actions/gspread_cell_set.rs | 6 +++- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/module/move/gspread/src/actions/gspread_cell_get.rs b/module/move/gspread/src/actions/gspread_cell_get.rs index 3a4d6b1be3..033aa3372c 100644 --- a/module/move/gspread/src/actions/gspread_cell_get.rs +++ b/module/move/gspread/src/actions/gspread_cell_get.rs @@ -6,8 +6,14 @@ mod private { + + use crate::*; - use actions::gspread::Result; + use actions::gspread:: + { + Error, + Result + }; use client::SheetsType; use ser::JsonValue; @@ -19,18 +25,22 @@ mod private cell_id : &str, ) -> Result< JsonValue > { - let result = hub + match hub .spreadsheets() .values_get( spreadsheet_id, format!( "{}!{}", table_name, cell_id ).as_str() ) .doit() - .await? - .1 - .values; - - match result + .await { - Some( values ) => Ok( values.get( 0 ).unwrap().get( 0 ).unwrap().clone() ), - None => Ok( JsonValue::Null.clone() ) + Ok( (_, response ) ) => + match response.values + { + Some( values ) => Ok( values.get( 0 ).unwrap().get( 0 ).unwrap().clone() ), + None => Ok( JsonValue::Null.clone() ) + } + Err( error ) => + { + Err( Error::ApiError( error ) ) + } } } diff --git a/module/move/gspread/src/actions/gspread_cell_set.rs b/module/move/gspread/src/actions/gspread_cell_set.rs index 6d4aeb160f..70e667726f 100644 --- a/module/move/gspread/src/actions/gspread_cell_set.rs +++ b/module/move/gspread/src/actions/gspread_cell_set.rs @@ -9,7 +9,11 @@ mod private { use google_sheets4::api::ValueRange; use crate::*; - use actions::gspread::{ Result, Error }; + use actions::gspread:: + { + Result, + Error + }; use client::SheetsType; use ser::JsonValue; From aea57b0936002468f29e8c2fd2f9630d7494df3b Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 13 Dec 2024 04:33:03 +0100 Subject: [PATCH 03/11] fixed: error handling for all actions --- module/move/gspread/src/actions/gspread.rs | 12 ++++++ .../gspread/src/actions/gspread_cells_set.rs | 37 ++++++++++++------- .../gspread/src/actions/gspread_get_header.rs | 30 ++++++++++----- .../gspread/src/actions/gspread_get_rows.rs | 26 +++++++++---- .../move/gspread/src/commands/gspread_cell.rs | 14 +++---- .../gspread/src/commands/gspread_cells.rs | 9 ++--- .../gspread/src/commands/gspread_header.rs | 19 +++++----- .../move/gspread/src/commands/gspread_rows.rs | 17 ++++----- 8 files changed, 102 insertions(+), 62 deletions(-) diff --git a/module/move/gspread/src/actions/gspread.rs b/module/move/gspread/src/actions/gspread.rs index 176be99829..528c631bb8 100644 --- a/module/move/gspread/src/actions/gspread.rs +++ b/module/move/gspread/src/actions/gspread.rs @@ -36,6 +36,18 @@ mod private ( String ), + + #[ error( "Invalid JSON format:\n{0}" ) ] + InvalidJSON + ( + String + ), + + #[ error( "Parse error:\n{0}" ) ] + ParseError + ( + String + ) } pub fn get_spreadsheet_id_from_url diff --git a/module/move/gspread/src/actions/gspread_cells_set.rs b/module/move/gspread/src/actions/gspread_cells_set.rs index a6528b6c4b..9d38a93d96 100644 --- a/module/move/gspread/src/actions/gspread_cells_set.rs +++ b/module/move/gspread/src/actions/gspread_cells_set.rs @@ -5,6 +5,11 @@ mod private { use crate::*; + use actions::gspread:: + { + Error, + Result + }; use google_sheets4::api:: { BatchUpdateValuesRequest, @@ -29,11 +34,11 @@ mod private fn parse_json ( json_str : &str - ) -> Result< ParsedJson, String > + ) -> Result< ParsedJson > { serde_json::from_str::< ParsedJson >( json_str ).map_err ( - | err | format!( "Failed to parse JSON: {}", err ) + | error | Error::InvalidJSON( format!( "Failed to parse JSON: {}", error ) ) ) } @@ -42,7 +47,7 @@ mod private fn check_select_row_by_key ( key : &str - ) -> Result< (), String > + ) -> Result< () > { let keys = vec![ "id" ]; if keys.contains( &key ) @@ -51,14 +56,17 @@ mod private } else { - Err( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) ) + Err + ( + Error::ParseError( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) ) + ) } } fn is_all_uppercase_letters ( s : &str - ) -> Result< (), String > + ) -> Result< () > { if s.chars().all( | c | c.is_ascii_uppercase() ) { @@ -66,7 +74,10 @@ mod private } else { - Err( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) ) + Err + ( + Error::ParseError( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) ) + ) } } @@ -77,7 +88,7 @@ mod private json_str : &str, spreadsheet_id : &str, table_name : &str - ) -> Result< String, String > + ) -> Result< String > { check_select_row_by_key( select_row_by_key )?; @@ -86,7 +97,8 @@ mod private let row_id = pairs .columns .remove( select_row_by_key ) - .ok_or_else( || format!( "Key '{}' not found in JSON", select_row_by_key ) )?; + .ok_or_else( || Error::ParseError( format!( "Key '{}' not found in JSON", select_row_by_key ) ) )?; + let mut value_ranges= Vec::new(); @@ -112,18 +124,17 @@ mod private ..Default::default() }; - let result = hub + match hub .spreadsheets() .values_batch_update( req, spreadsheet_id ) .doit() - .await; - - match result + .await { Ok( _ ) => Ok( format!( "Cells were sucsessfully updated!" ) ), - Err( error ) => Err( format!( "{}", error ) ) + Err( error ) => Err( Error::ApiError( error ) ) } } + } crate::mod_interface! diff --git a/module/move/gspread/src/actions/gspread_get_header.rs b/module/move/gspread/src/actions/gspread_get_header.rs index 8f7b83c477..e8de1dc4bc 100644 --- a/module/move/gspread/src/actions/gspread_get_header.rs +++ b/module/move/gspread/src/actions/gspread_get_header.rs @@ -10,7 +10,11 @@ mod private use std::fmt; use crate::*; use client::SheetsType; - use actions::gspread::Result; + use actions::gspread:: + { + Error, + Result + }; use format_tools::AsTable; use util::display_table::display_header; use ser::JsonValue; @@ -37,19 +41,27 @@ mod private ( hub : &SheetsType, spreadsheet_id : &str, - table_name: &str) -> Result< Vec< Vec< JsonValue > > > + table_name : &str + ) -> Result< Vec< Vec< JsonValue > > > { - let result = hub + match hub .spreadsheets() .values_get( spreadsheet_id, format!( "{}!A1:Z1", table_name ).as_str() ) .doit() - .await? - .1 - .values - .unwrap_or_else( | | Vec::new() ); - - Ok( result ) + .await + { + Ok( ( _, response ) ) => + { + match response.values + { + Some( values ) => Ok( values ), + None => Ok( Vec::new() ) + } + }, + Err( error ) => Err( Error::ApiError( error ) ) + } } + } crate::mod_interface! diff --git a/module/move/gspread/src/actions/gspread_get_rows.rs b/module/move/gspread/src/actions/gspread_get_rows.rs index 3a083217ed..7f1f7a5c26 100644 --- a/module/move/gspread/src/actions/gspread_get_rows.rs +++ b/module/move/gspread/src/actions/gspread_get_rows.rs @@ -9,7 +9,11 @@ mod private { use crate::*; use client::SheetsType; - use actions::gspread::Result; + use actions::gspread:: + { + Error, + Result + }; use ser::JsonValue; pub async fn action @@ -19,16 +23,22 @@ mod private table_name : &str ) -> Result< Vec< Vec < JsonValue > > > { - let result = hub + match hub .spreadsheets() .values_get( spreadsheet_id, format!( "{}!A2:Z", table_name ).as_str() ) .doit() - .await? - .1 - .values - .unwrap_or_else( | | Vec::new() ); - - Ok( result ) + .await + { + Ok( ( _, response ) ) => + { + match response.values + { + Some( values ) => Ok( values ), + None => Ok( Vec::new() ) + } + }, + Err( error ) => Err( Error::ApiError( error ) ) + } } } diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index 6312cbfc85..bcdc68cc1a 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -65,15 +65,14 @@ mod private } }; - let result = actions::gspread_cell_get::action + match actions::gspread_cell_get::action ( hub, spreadsheet_id, tab.as_str(), cel.as_str() - ).await; - - match result + ) + .await { Ok( value ) => println!( "Value: {}", value ), Err( error ) => println!( "Error: {}", error ), @@ -92,16 +91,15 @@ mod private } }; - let result = actions::gspread_cell_set::action + match actions::gspread_cell_set::action ( hub, spreadsheet_id, tab.as_str(), cel.as_str(), val.as_str() - ).await; - - match result + ) + .await { Ok( msg ) => println!( "{}", msg ), Err( error ) => println!( "Error:\n{}", error ), diff --git a/module/move/gspread/src/commands/gspread_cells.rs b/module/move/gspread/src/commands/gspread_cells.rs index 13ecf1e378..99e252e371 100644 --- a/module/move/gspread/src/commands/gspread_cells.rs +++ b/module/move/gspread/src/commands/gspread_cells.rs @@ -51,19 +51,18 @@ mod private } }; - let result = actions::gspread_cells_set::action + match actions::gspread_cells_set::action ( &hub, select_row_by_key.as_str(), json.as_str(), spreadsheet_id, tab.as_str() - ).await; - - match result + ) + .await { Ok( msg ) => println!( "{}", msg ), - Err( error ) => println!( "{}", error ) + Err( error ) => println!( "Error:\n{}", error ) } } } diff --git a/module/move/gspread/src/commands/gspread_header.rs b/module/move/gspread/src/commands/gspread_header.rs index 5048d3e4ed..0fd56741e2 100644 --- a/module/move/gspread/src/commands/gspread_header.rs +++ b/module/move/gspread/src/commands/gspread_header.rs @@ -51,14 +51,13 @@ mod private } }; - let result = actions::gspread_get_header::action - ( - hub, - spreadsheet_id, - tab.as_str() - ).await; - - match result + match actions::gspread_get_header::action + ( + hub, + spreadsheet_id, + tab.as_str() + ) + .await { Ok( header ) => { @@ -67,9 +66,9 @@ mod private .map( | row | RowWrapper{ max_len: row.len(), row } ) .collect(); - println!( "Header: \n {}", Report{ rows: header_wrapped } ); + println!( "Header:\n{}", Report{ rows: header_wrapped } ); } - Err( error ) => println!( "Error: {}", error ), + Err( error ) => eprintln!( "Error:\n{}", error ), } } } diff --git a/module/move/gspread/src/commands/gspread_rows.rs b/module/move/gspread/src/commands/gspread_rows.rs index 426d7f2dde..6c526d0f78 100644 --- a/module/move/gspread/src/commands/gspread_rows.rs +++ b/module/move/gspread/src/commands/gspread_rows.rs @@ -50,26 +50,25 @@ mod private } }; - let result = actions::gspread_get_rows::action + match actions::gspread_get_rows::action ( hub, spreadsheet_id, tab.as_str() - ).await; - - match result + ) + .await { Ok( rows ) => { let max_len = rows.iter().map(|row| row.len()).max().unwrap_or(0); let rows_wrapped: Vec = rows - .into_iter() - .map(|row| RowWrapper { row, max_len }) - .collect(); + .into_iter() + .map(|row| RowWrapper { row, max_len }) + .collect(); - println!( "Rows: \n {}", Report{ rows: rows_wrapped } ); + println!( "Rows:\n{}", Report{ rows: rows_wrapped } ); } - Err( error ) => println!( "Error: {}", error ), + Err( error ) => eprintln!( "Error:\n{}", error ), } } } From 6516d0a3bb8b0faed556c4e29f156aa4325021a3 Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 13 Dec 2024 05:30:45 +0100 Subject: [PATCH 04/11] added: help description --- .../gspread/src/actions/gspread_cell_get.rs | 5 +-- .../gspread/src/actions/gspread_cell_set.rs | 5 +-- module/move/gspread/src/commands/gspread.rs | 12 ++++-- .../move/gspread/src/commands/gspread_cell.rs | 38 ++++++++++++------- .../gspread/src/commands/gspread_cells.rs | 22 ++++++++--- 5 files changed, 52 insertions(+), 30 deletions(-) diff --git a/module/move/gspread/src/actions/gspread_cell_get.rs b/module/move/gspread/src/actions/gspread_cell_get.rs index 033aa3372c..effa3a9170 100644 --- a/module/move/gspread/src/actions/gspread_cell_get.rs +++ b/module/move/gspread/src/actions/gspread_cell_get.rs @@ -37,10 +37,7 @@ mod private Some( values ) => Ok( values.get( 0 ).unwrap().get( 0 ).unwrap().clone() ), None => Ok( JsonValue::Null.clone() ) } - Err( error ) => - { - Err( Error::ApiError( error ) ) - } + Err( error ) => Err( Error::ApiError( error ) ) } } diff --git a/module/move/gspread/src/actions/gspread_cell_set.rs b/module/move/gspread/src/actions/gspread_cell_set.rs index 70e667726f..62297b7331 100644 --- a/module/move/gspread/src/actions/gspread_cell_set.rs +++ b/module/move/gspread/src/actions/gspread_cell_set.rs @@ -49,10 +49,7 @@ mod private None => Err( Error::CellError( "Some problem with cell updating".to_string() ) ) } } - Err( error) => - { - Err( Error::ApiError( error ) ) - } + Err( error) => Err( Error::ApiError( error ) ) } } diff --git a/module/move/gspread/src/commands/gspread.rs b/module/move/gspread/src/commands/gspread.rs index 8398aa3ec6..5cbaaeeb13 100644 --- a/module/move/gspread/src/commands/gspread.rs +++ b/module/move/gspread/src/commands/gspread.rs @@ -22,35 +22,41 @@ mod private #[ derive( Debug, Parser ) ] pub struct CommonArgs { - #[ arg( long ) ] + #[ arg( long, help = "Full URL of Google Sheet.\n\ + It has to be inside of '' to avoid parse errors.\n\ + Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] pub url : String, - #[ arg( long ) ] + #[ arg( long, help = "Sheet name.\nExample: List1" ) ] pub tab : String } #[ derive( Debug, Subcommand ) ] pub enum Command { - + + /// Command to get header of a sheet. Header is a first raw. #[ command ( name = "header" ) ] Header ( CommonArgs ), + /// Command to get all raws of a sheet but not header. #[ command( name = "rows" ) ] Rows ( CommonArgs ), + /// Command to get or update a cell from a sheet. #[ command ( subcommand, name = "cell" ) ] Cell ( gspread_cell::Commands ), + /// Commands to set a new value to a cell or get a value from a cell. #[ command ( subcommand, name = "cells" ) ] Cells ( diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index bcdc68cc1a..ea213d92a2 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -15,32 +15,42 @@ mod private #[ derive( Debug, Subcommand ) ] pub enum Commands { + /// Command to get a value from a sheet's cell #[ command( name = "get" ) ] Get { - #[ arg( long ) ] + #[ arg( long, help = "Full URL of Google Sheet.\n\ + It has to be inside of '' to avoid parse errors.\n\ + Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long ) ] + #[ arg( long, help = "Sheet name.\nExample: List1" ) ] tab : String, - #[ arg( long ) ] - cel : String, + #[ arg( long, help = "Cell id. You can set it in format:\n \ + - A1, where A is column name and 1 is row number\n\ + Example: --cell A4" ) ] + cell : String, }, + /// Command to set a new value to a sheet's cell. #[ command( name = "set" ) ] Set { - #[ arg( long ) ] + #[ arg( long, help = "Full URL of Google Sheet.\n\ + It has to be inside of '' to avoid parse errors.\n\ + Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long ) ] + #[ arg( long, help = "Sheet name.\nExample: List1" ) ] tab : String, - #[ arg( long ) ] - cel : String, + #[ arg( long, help = "Cell id. You can set it in format:\n \ + - A1, where A is column name and 1 is row number\n\ + Example: --cell A4" ) ] + cell : String, - #[ arg( long ) ] + #[ arg( long, help = "Value you want to set. It can be written on any language.\nExample: --val hello" ) ] val : String } } @@ -53,7 +63,7 @@ mod private { match commands { - Commands::Get { url, tab, cel } => + Commands::Get { url, tab, cell } => { let spreadsheet_id = match get_spreadsheet_id_from_url( url.as_str() ) { @@ -70,16 +80,16 @@ mod private hub, spreadsheet_id, tab.as_str(), - cel.as_str() + cell.as_str() ) .await { Ok( value ) => println!( "Value: {}", value ), - Err( error ) => println!( "Error: {}", error ), + Err( error ) => println!( "Error:\n{}", error ), } }, - Commands::Set { url, tab, cel, val } => + Commands::Set { url, tab, cell, val } => { let spreadsheet_id = match get_spreadsheet_id_from_url( url.as_str() ) { @@ -96,7 +106,7 @@ mod private hub, spreadsheet_id, tab.as_str(), - cel.as_str(), + cell.as_str(), val.as_str() ) .await diff --git a/module/move/gspread/src/commands/gspread_cells.rs b/module/move/gspread/src/commands/gspread_cells.rs index 99e252e371..3c0f2538be 100644 --- a/module/move/gspread/src/commands/gspread_cells.rs +++ b/module/move/gspread/src/commands/gspread_cells.rs @@ -13,19 +13,31 @@ mod private #[ derive( Debug, Subcommand ) ] pub enum Commands { + /// Command to set values range to a google sheet #[ command( name = "set" ) ] Set { - #[ arg( long ) ] + #[ arg( long, help = "Identifier of a row. Available identifiers: id (row's unique identifier).\n\ + Example: --select_row_by_key \"id\"" ) ] select_row_by_key : String, - - #[ arg( long ) ] + + #[ arg( long, help = "Value range. It must contain select_row_by_key. + The key is a column name (not a header name, but a column name, which can only contain Latin letters). + Every key and value must be a string. + Depending on the shell, different handling might be required.\n\ + Examples:\n\ + 1. --json '\"id\": \"3\", \"A\": \"1\", \"B\": \"2\"'\n\ + 2. --json \"\"id\": \"3\", \"A\": \"1\", \"B\": \"2\"\"\n\ + 3. --json '\\\"id\\\": \\\"3\\\", \\\"A\\\": \\\"1\\\", \\\"B\\\": \\\"2\\\"'\n\ + 4. --json \"\\\"id\\\": \\\"3\\\", \\\"A\\\": \\\"1\\\", \\\"B\\\": \\\"2\\\"\" " ) ] json : String, - #[ arg( long ) ] + #[ arg( long, help = "Full URL of Google Sheet.\n\ + It has to be inside of '' to avoid parse errors.\n\ + Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long ) ] + #[ arg( long, help = "Sheet name.\nExample: List1" ) ] tab : String } From afb293ce376589205cbe5e2976c9403ef5d3c496 Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 20 Dec 2024 13:57:38 +0100 Subject: [PATCH 05/11] fixed gspread_cell_set action returning value --- module/move/gspread/Cargo.toml | 1 + module/move/gspread/src/actions/gspread_cell_set.rs | 4 ++-- module/move/gspread/src/commands/gspread_cell.rs | 2 +- module/move/gspread/src/commands/gspread_header.rs | 2 +- module/move/gspread/src/debug/row_wrapper.rs | 11 ++++++++++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/module/move/gspread/Cargo.toml b/module/move/gspread/Cargo.toml index 8d1d86b4a3..a75b3a2d2b 100644 --- a/module/move/gspread/Cargo.toml +++ b/module/move/gspread/Cargo.toml @@ -44,6 +44,7 @@ error_tools = "0.19.0" derive_tools = { version = "0.32.0", features = ["full"] } serde_json = "1.0.132" regex = "1.11.1" +unicode-width = "0.2.0" [dev-dependencies] test_tools = { workspace = true } diff --git a/module/move/gspread/src/actions/gspread_cell_set.rs b/module/move/gspread/src/actions/gspread_cell_set.rs index 62297b7331..5743a45f97 100644 --- a/module/move/gspread/src/actions/gspread_cell_set.rs +++ b/module/move/gspread/src/actions/gspread_cell_set.rs @@ -24,7 +24,7 @@ mod private table_name : &str, cell_id : &str, value : &str - ) -> Result< String > + ) -> Result< i32 > { let value = JsonValue::String( value.to_string() ); @@ -45,7 +45,7 @@ mod private { match response.updated_cells { - Some( number ) => Ok( format!( "You successfully update {} cell!", number ) ), + Some( number ) => Ok( number ), None => Err( Error::CellError( "Some problem with cell updating".to_string() ) ) } } diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index ea213d92a2..84a0cd2116 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -111,7 +111,7 @@ mod private ) .await { - Ok( msg ) => println!( "{}", msg ), + Ok( number ) => println!( "You successfully update {} cell!", number ), Err( error ) => println!( "Error:\n{}", error ), } } diff --git a/module/move/gspread/src/commands/gspread_header.rs b/module/move/gspread/src/commands/gspread_header.rs index 0fd56741e2..6ee00db284 100644 --- a/module/move/gspread/src/commands/gspread_header.rs +++ b/module/move/gspread/src/commands/gspread_header.rs @@ -65,7 +65,7 @@ mod private .into_iter() .map( | row | RowWrapper{ max_len: row.len(), row } ) .collect(); - + println!( "Header:\n{}", Report{ rows: header_wrapped } ); } Err( error ) => eprintln!( "Error:\n{}", error ), diff --git a/module/move/gspread/src/debug/row_wrapper.rs b/module/move/gspread/src/debug/row_wrapper.rs index b8e1635ac7..23051e6a7a 100644 --- a/module/move/gspread/src/debug/row_wrapper.rs +++ b/module/move/gspread/src/debug/row_wrapper.rs @@ -7,7 +7,7 @@ use super::*; use crate::*; use ser::JsonValue; - +use unicode_width::UnicodeWidthStr; #[ derive( Debug ) ] pub struct RowWrapper @@ -43,6 +43,15 @@ for RowWrapper { let column_name = format!( "Column{}", index ); let title = Box::leak( column_name.into_boxed_str() ) as &str; + + let value_str = value.to_string().trim_matches('"').to_string(); + let char_count = value_str.chars().count(); + let byte_count = value_str.as_bytes().len(); + let display_width = UnicodeWidthStr::width(value_str.as_str()); + + eprintln!("DEBUG: Value: {}, Chars: {}, Bytes: {}, Display Width: {}", + value_str, char_count, byte_count, display_width); + dst.push( ( title, Some( Cow::Owned( value.to_string() ) ) ) ) } From fcb2f10f55a503ecf5e9eabcc50817325009d4e0 Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 20 Dec 2024 14:05:19 +0100 Subject: [PATCH 06/11] fixed: sheet name in description --- module/move/gspread/src/commands/gspread.rs | 2 +- module/move/gspread/src/commands/gspread_cell.rs | 4 ++-- module/move/gspread/src/commands/gspread_cells.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/module/move/gspread/src/commands/gspread.rs b/module/move/gspread/src/commands/gspread.rs index 5cbaaeeb13..479eda899a 100644 --- a/module/move/gspread/src/commands/gspread.rs +++ b/module/move/gspread/src/commands/gspread.rs @@ -27,7 +27,7 @@ mod private Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] pub url : String, - #[ arg( long, help = "Sheet name.\nExample: List1" ) ] + #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] pub tab : String } diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index 84a0cd2116..7f632ab724 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -24,7 +24,7 @@ mod private Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long, help = "Sheet name.\nExample: List1" ) ] + #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] tab : String, #[ arg( long, help = "Cell id. You can set it in format:\n \ @@ -42,7 +42,7 @@ mod private Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long, help = "Sheet name.\nExample: List1" ) ] + #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] tab : String, #[ arg( long, help = "Cell id. You can set it in format:\n \ diff --git a/module/move/gspread/src/commands/gspread_cells.rs b/module/move/gspread/src/commands/gspread_cells.rs index 3c0f2538be..87762be0e3 100644 --- a/module/move/gspread/src/commands/gspread_cells.rs +++ b/module/move/gspread/src/commands/gspread_cells.rs @@ -37,7 +37,7 @@ mod private Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] url : String, - #[ arg( long, help = "Sheet name.\nExample: List1" ) ] + #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] tab : String } From c1619ed944eb987351b2dfd6719a345a0fa52ada Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Wed, 25 Dec 2024 01:59:07 +0100 Subject: [PATCH 07/11] draft commit --- module/core/format_tools/tests/inc/utf8_test.rs | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 module/core/format_tools/tests/inc/utf8_test.rs diff --git a/module/core/format_tools/tests/inc/utf8_test.rs b/module/core/format_tools/tests/inc/utf8_test.rs new file mode 100644 index 0000000000..e69de29bb2 From 91c02932ee335161519cd7299de71cf1cc6f1cfe Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Fri, 27 Dec 2024 05:08:49 +0100 Subject: [PATCH 08/11] working with utf-8 --- module/core/format_tools/src/format/string.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module/core/format_tools/src/format/string.rs b/module/core/format_tools/src/format/string.rs index ee34e9e718..00ba7dedc6 100644 --- a/module/core/format_tools/src/format/string.rs +++ b/module/core/format_tools/src/format/string.rs @@ -7,7 +7,6 @@ /// Define a private namespace for all its items. mod private { - // use crate::*; /// Returns the size of the text in `src` as a `[ width, height ]` array. @@ -74,7 +73,7 @@ mod private for line in lines( text ) { height += 1; - let line_length = line.chars().count(); + let line_length = line.as_bytes().len(); if line_length > width { width = line_length; From db651f022e651387618a39e1e0d0c5dc0fbc16ad Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Thu, 6 Mar 2025 15:41:54 +0100 Subject: [PATCH 09/11] fixed file ending --- .../gspread/src/actions/gspread_cells_set.rs | 284 +++++++++--------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/module/move/gspread/src/actions/gspread_cells_set.rs b/module/move/gspread/src/actions/gspread_cells_set.rs index 9d38a93d96..4e487a32f0 100644 --- a/module/move/gspread/src/actions/gspread_cells_set.rs +++ b/module/move/gspread/src/actions/gspread_cells_set.rs @@ -1,143 +1,143 @@ -//! -//! Set command -> set specified values in specified columns in specified row -//! - -mod private -{ - use crate::*; - use actions::gspread:: - { - Error, - Result - }; - use google_sheets4::api:: - { - BatchUpdateValuesRequest, - ValueRange - }; - use ser:: - { - Deserialize, - JsonValue - }; - use std::collections::HashMap; - - /// Structure for --json value - #[ derive( Deserialize, Debug ) ] - struct ParsedJson - { - #[ serde( flatten ) ] - columns : HashMap< String, String > - } - - /// Parse --json value - fn parse_json - ( - json_str : &str - ) -> Result< ParsedJson > - { - serde_json::from_str::< ParsedJson >( json_str ).map_err - ( - | error | Error::InvalidJSON( format!( "Failed to parse JSON: {}", error ) ) - ) - } - - /// Check availables keys. - /// Available keys: "id" -> row's id - fn check_select_row_by_key - ( - key : &str - ) -> Result< () > - { - let keys = vec![ "id" ]; - if keys.contains( &key ) - { - Ok( () ) - } - else - { - Err - ( - Error::ParseError( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) ) - ) - } - } - - fn is_all_uppercase_letters - ( - s : &str - ) -> Result< () > - { - if s.chars().all( | c | c.is_ascii_uppercase() ) - { - Ok( () ) - } - else - { - Err - ( - Error::ParseError( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) ) - ) - } - } - - pub async fn action - ( - hub : &SheetsType, - select_row_by_key : &str, - json_str : &str, - spreadsheet_id : &str, - table_name : &str - ) -> Result< String > - { - check_select_row_by_key( select_row_by_key )?; - - let mut pairs = parse_json( json_str )?; - - let row_id = pairs - .columns - .remove( select_row_by_key ) - .ok_or_else( || Error::ParseError( format!( "Key '{}' not found in JSON", select_row_by_key ) ) )?; - - - let mut value_ranges= Vec::new(); - - for ( key, value ) in pairs.columns.into_iter() - { - is_all_uppercase_letters( key.as_str() )?; - value_ranges.push - ( - ValueRange - { - range: Some( format!( "{}!{}{}", table_name, key, row_id ) ), - values: Some( vec![ vec![ JsonValue::String( value.to_string() ) ] ] ), - ..Default::default() - } - ); - }; - - let req = BatchUpdateValuesRequest - { - value_input_option: Some( "USER_ENTERED".to_string() ), - data: Some( value_ranges ), - include_values_in_response: Some( true ), - ..Default::default() - }; - - match hub - .spreadsheets() - .values_batch_update( req, spreadsheet_id ) - .doit() - .await - { - Ok( _ ) => Ok( format!( "Cells were sucsessfully updated!" ) ), - Err( error ) => Err( Error::ApiError( error ) ) - } - } - -} - -crate::mod_interface! -{ - own use action; +//! +//! Set command -> set specified values in specified columns in specified row +//! + +mod private +{ + use crate::*; + use actions::gspread:: + { + Error, + Result + }; + use google_sheets4::api:: + { + BatchUpdateValuesRequest, + ValueRange + }; + use ser:: + { + Deserialize, + JsonValue + }; + use std::collections::HashMap; + + /// Structure for --json value + #[ derive( Deserialize, Debug ) ] + struct ParsedJson + { + #[ serde( flatten ) ] + columns : HashMap< String, String > + } + + /// Parse --json value + fn parse_json + ( + json_str : &str + ) -> Result< ParsedJson > + { + serde_json::from_str::< ParsedJson >( json_str ).map_err + ( + | error | Error::InvalidJSON( format!( "Failed to parse JSON: {}", error ) ) + ) + } + + /// Check availables keys. + /// Available keys: "id" -> row's id + fn check_select_row_by_key + ( + key : &str + ) -> Result< () > + { + let keys = vec![ "id" ]; + if keys.contains( &key ) + { + Ok( () ) + } + else + { + Err + ( + Error::ParseError( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) ) + ) + } + } + + fn is_all_uppercase_letters + ( + s : &str + ) -> Result< () > + { + if s.chars().all( | c | c.is_ascii_uppercase() ) + { + Ok( () ) + } + else + { + Err + ( + Error::ParseError( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) ) + ) + } + } + + pub async fn action + ( + hub : &SheetsType, + select_row_by_key : &str, + json_str : &str, + spreadsheet_id : &str, + table_name : &str + ) -> Result< String > + { + check_select_row_by_key( select_row_by_key )?; + + let mut pairs = parse_json( json_str )?; + + let row_id = pairs + .columns + .remove( select_row_by_key ) + .ok_or_else( || Error::ParseError( format!( "Key '{}' not found in JSON", select_row_by_key ) ) )?; + + + let mut value_ranges= Vec::new(); + + for ( key, value ) in pairs.columns.into_iter() + { + is_all_uppercase_letters( key.as_str() )?; + value_ranges.push + ( + ValueRange + { + range: Some( format!( "{}!{}{}", table_name, key, row_id ) ), + values: Some( vec![ vec![ JsonValue::String( value.to_string() ) ] ] ), + ..Default::default() + } + ); + }; + + let req = BatchUpdateValuesRequest + { + value_input_option: Some( "USER_ENTERED".to_string() ), + data: Some( value_ranges ), + include_values_in_response: Some( true ), + ..Default::default() + }; + + match hub + .spreadsheets() + .values_batch_update( req, spreadsheet_id ) + .doit() + .await + { + Ok( _ ) => Ok( format!( "Cells were sucsessfully updated!" ) ), + Err( error ) => Err( Error::ApiError( error ) ) + } + } + +} + +crate::mod_interface! +{ + own use action; } \ No newline at end of file From dec41e87d48db48fc4d067ba9d205d06721b1d2d Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Thu, 6 Mar 2025 15:49:44 +0100 Subject: [PATCH 10/11] removed git logs --- .../gspread/src/actions/gspread_cells_set.rs | 143 ------------------ .../gspread/src/actions/gspread_get_header.rs | 70 --------- .../gspread/src/actions/gspread_get_rows.rs | 48 ------ module/move/gspread/src/commands/gspread.rs | 35 ----- .../move/gspread/src/commands/gspread_cell.rs | 18 --- .../gspread/src/commands/gspread_cells.rs | 91 ----------- .../gspread/src/commands/gspread_header.rs | 15 -- .../move/gspread/src/commands/gspread_rows.rs | 14 -- 8 files changed, 434 deletions(-) delete mode 100644 module/move/gspread/src/actions/gspread_cells_set.rs delete mode 100644 module/move/gspread/src/actions/gspread_get_header.rs delete mode 100644 module/move/gspread/src/actions/gspread_get_rows.rs delete mode 100644 module/move/gspread/src/commands/gspread_cells.rs diff --git a/module/move/gspread/src/actions/gspread_cells_set.rs b/module/move/gspread/src/actions/gspread_cells_set.rs deleted file mode 100644 index 4e487a32f0..0000000000 --- a/module/move/gspread/src/actions/gspread_cells_set.rs +++ /dev/null @@ -1,143 +0,0 @@ -//! -//! Set command -> set specified values in specified columns in specified row -//! - -mod private -{ - use crate::*; - use actions::gspread:: - { - Error, - Result - }; - use google_sheets4::api:: - { - BatchUpdateValuesRequest, - ValueRange - }; - use ser:: - { - Deserialize, - JsonValue - }; - use std::collections::HashMap; - - /// Structure for --json value - #[ derive( Deserialize, Debug ) ] - struct ParsedJson - { - #[ serde( flatten ) ] - columns : HashMap< String, String > - } - - /// Parse --json value - fn parse_json - ( - json_str : &str - ) -> Result< ParsedJson > - { - serde_json::from_str::< ParsedJson >( json_str ).map_err - ( - | error | Error::InvalidJSON( format!( "Failed to parse JSON: {}", error ) ) - ) - } - - /// Check availables keys. - /// Available keys: "id" -> row's id - fn check_select_row_by_key - ( - key : &str - ) -> Result< () > - { - let keys = vec![ "id" ]; - if keys.contains( &key ) - { - Ok( () ) - } - else - { - Err - ( - Error::ParseError( format!( "Invalid select_row_by_key: '{}'. Allowed keys: {:?}", key, keys ) ) - ) - } - } - - fn is_all_uppercase_letters - ( - s : &str - ) -> Result< () > - { - if s.chars().all( | c | c.is_ascii_uppercase() ) - { - Ok( () ) - } - else - { - Err - ( - Error::ParseError( format!( "The string '{}' contains invalid characters. Only uppercase letters (A-Z) are allowed.", s ) ) - ) - } - } - - pub async fn action - ( - hub : &SheetsType, - select_row_by_key : &str, - json_str : &str, - spreadsheet_id : &str, - table_name : &str - ) -> Result< String > - { - check_select_row_by_key( select_row_by_key )?; - - let mut pairs = parse_json( json_str )?; - - let row_id = pairs - .columns - .remove( select_row_by_key ) - .ok_or_else( || Error::ParseError( format!( "Key '{}' not found in JSON", select_row_by_key ) ) )?; - - - let mut value_ranges= Vec::new(); - - for ( key, value ) in pairs.columns.into_iter() - { - is_all_uppercase_letters( key.as_str() )?; - value_ranges.push - ( - ValueRange - { - range: Some( format!( "{}!{}{}", table_name, key, row_id ) ), - values: Some( vec![ vec![ JsonValue::String( value.to_string() ) ] ] ), - ..Default::default() - } - ); - }; - - let req = BatchUpdateValuesRequest - { - value_input_option: Some( "USER_ENTERED".to_string() ), - data: Some( value_ranges ), - include_values_in_response: Some( true ), - ..Default::default() - }; - - match hub - .spreadsheets() - .values_batch_update( req, spreadsheet_id ) - .doit() - .await - { - Ok( _ ) => Ok( format!( "Cells were sucsessfully updated!" ) ), - Err( error ) => Err( Error::ApiError( error ) ) - } - } - -} - -crate::mod_interface! -{ - own use action; -} \ No newline at end of file diff --git a/module/move/gspread/src/actions/gspread_get_header.rs b/module/move/gspread/src/actions/gspread_get_header.rs deleted file mode 100644 index e8de1dc4bc..0000000000 --- a/module/move/gspread/src/actions/gspread_get_header.rs +++ /dev/null @@ -1,70 +0,0 @@ -//! -//! Action for command "header" -//! -//! It returns header (first row) -//! - - -mod private -{ - use std::fmt; - use crate::*; - use client::SheetsType; - use actions::gspread:: - { - Error, - Result - }; - use format_tools::AsTable; - use util::display_table::display_header; - use ser::JsonValue; - - #[ derive( Debug ) ] - pub struct Report - { - pub rows : Vec< RowWrapper > - } - - impl fmt::Display for Report - { - fn fmt - ( - &self, - f : &mut fmt::Formatter - ) -> fmt::Result - { - display_header( &AsTable::new( &self.rows ), f ) - } - } - - pub async fn action - ( - hub : &SheetsType, - spreadsheet_id : &str, - table_name : &str - ) -> Result< Vec< Vec< JsonValue > > > - { - match hub - .spreadsheets() - .values_get( spreadsheet_id, format!( "{}!A1:Z1", table_name ).as_str() ) - .doit() - .await - { - Ok( ( _, response ) ) => - { - match response.values - { - Some( values ) => Ok( values ), - None => Ok( Vec::new() ) - } - }, - Err( error ) => Err( Error::ApiError( error ) ) - } - } - -} - -crate::mod_interface! -{ - own use action; -} \ No newline at end of file diff --git a/module/move/gspread/src/actions/gspread_get_rows.rs b/module/move/gspread/src/actions/gspread_get_rows.rs deleted file mode 100644 index 7f1f7a5c26..0000000000 --- a/module/move/gspread/src/actions/gspread_get_rows.rs +++ /dev/null @@ -1,48 +0,0 @@ -//! -//! Action for command "rows" -//! -//! It returns all rows but not header -//! - - -mod private -{ - use crate::*; - use client::SheetsType; - use actions::gspread:: - { - Error, - Result - }; - use ser::JsonValue; - - pub async fn action - ( - hub : &SheetsType, - spreadsheet_id : &str, - table_name : &str - ) -> Result< Vec< Vec < JsonValue > > > - { - match hub - .spreadsheets() - .values_get( spreadsheet_id, format!( "{}!A2:Z", table_name ).as_str() ) - .doit() - .await - { - Ok( ( _, response ) ) => - { - match response.values - { - Some( values ) => Ok( values ), - None => Ok( Vec::new() ) - } - }, - Err( error ) => Err( Error::ApiError( error ) ) - } - } -} - -crate::mod_interface! -{ - own use action; -} diff --git a/module/move/gspread/src/commands/gspread.rs b/module/move/gspread/src/commands/gspread.rs index 0eead89682..653dfaf0e4 100644 --- a/module/move/gspread/src/commands/gspread.rs +++ b/module/move/gspread/src/commands/gspread.rs @@ -43,11 +43,7 @@ mod private { #[ arg( long, help = "Full URL of Google Sheet.\n\ It has to be inside of '' to avoid parse errors.\n\ -<<<<<<< HEAD - Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] -======= Example: 'https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit?gid={sheet_id}#gid={sheet_id}'" ) ] ->>>>>>> updstream/alpha pub url : String, #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] @@ -125,36 +121,6 @@ mod private #[ derive( Debug, Subcommand ) ] pub enum Command { -<<<<<<< HEAD - - /// Command to get header of a sheet. Header is a first raw. - #[ command ( name = "header" ) ] - Header - ( - CommonArgs - ), - - /// Command to get all raws of a sheet but not header. - #[ command( name = "rows" ) ] - Rows - ( - CommonArgs - ), - - /// Command to get or update a cell from a sheet. - #[ command ( subcommand, name = "cell" ) ] - Cell - ( - gspread_cell::Commands - ), - - /// Commands to set a new value to a cell or get a value from a cell. - #[ command ( subcommand, name = "cells" ) ] - Cells - ( - gspread_cells::Commands - ) -======= #[ command( name = "header", about = "Retrieves the header (first row).", long_about = r#" --------------------------------------------------------------------------------------------------------------- HEADER @@ -419,7 +385,6 @@ mod private --------------------------------------------------------------------------------------------------------------- "# )] Copy( gspread_copy::Args ) ->>>>>>> updstream/alpha } diff --git a/module/move/gspread/src/commands/gspread_cell.rs b/module/move/gspread/src/commands/gspread_cell.rs index 5e8fa535fe..24e2815b3d 100644 --- a/module/move/gspread/src/commands/gspread_cell.rs +++ b/module/move/gspread/src/commands/gspread_cell.rs @@ -77,10 +77,6 @@ mod private #[ command( long_about = "\n\nSubcommands for the `CELL` command, used to interact with individual cells in a Google Sheet." ) ] pub enum Commands { -<<<<<<< HEAD - /// Command to get a value from a sheet's cell - #[ command( name = "get" ) ] -======= #[ command( name = "get", about = "Retrieves a single cell.", long_about = r#" --------------------------------------------------------------------------------------------------------------- CELL GET @@ -123,16 +119,11 @@ mod private --------------------------------------------------------------------------------------------------------------- "# ) ] ->>>>>>> updstream/alpha Get { #[ arg( long, help = "Full URL of Google Sheet.\n\ It has to be inside of '' to avoid parse errors.\n\ -<<<<<<< HEAD - Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] -======= Example: 'https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit?gid={sheet_id}#gid={sheet_id}'" ) ] ->>>>>>> updstream/alpha url : String, #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] @@ -144,10 +135,6 @@ mod private cell : String, }, -<<<<<<< HEAD - /// Command to set a new value to a sheet's cell. - #[ command( name = "set" ) ] -======= #[ command( name = "set", about = "Updates a single cell.", long_about = r#" --------------------------------------------------------------------------------------------------------------- CELL SET @@ -196,16 +183,11 @@ mod private --------------------------------------------------------------------------------------------------------------- "# ) ] ->>>>>>> updstream/alpha Set { #[ arg( long, help = "Full URL of Google Sheet.\n\ It has to be inside of '' to avoid parse errors.\n\ -<<<<<<< HEAD - Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] -======= Example: 'https://docs.google.com/spreadsheets/d/{spreadsheet_id}/edit?gid={sheet_id}#gid={sheet_id}'" ) ] ->>>>>>> updstream/alpha url : String, #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] diff --git a/module/move/gspread/src/commands/gspread_cells.rs b/module/move/gspread/src/commands/gspread_cells.rs deleted file mode 100644 index 87762be0e3..0000000000 --- a/module/move/gspread/src/commands/gspread_cells.rs +++ /dev/null @@ -1,91 +0,0 @@ -//! -//! Cells commands. -//! set command -> set specified values in specified columns in specified row. -//! - -mod private -{ - use clap::Subcommand; - - use crate::*; - use actions::gspread::get_spreadsheet_id_from_url; - - #[ derive( Debug, Subcommand ) ] - pub enum Commands - { - /// Command to set values range to a google sheet - #[ command( name = "set" ) ] - Set - { - #[ arg( long, help = "Identifier of a row. Available identifiers: id (row's unique identifier).\n\ - Example: --select_row_by_key \"id\"" ) ] - select_row_by_key : String, - - #[ arg( long, help = "Value range. It must contain select_row_by_key. - The key is a column name (not a header name, but a column name, which can only contain Latin letters). - Every key and value must be a string. - Depending on the shell, different handling might be required.\n\ - Examples:\n\ - 1. --json '\"id\": \"3\", \"A\": \"1\", \"B\": \"2\"'\n\ - 2. --json \"\"id\": \"3\", \"A\": \"1\", \"B\": \"2\"\"\n\ - 3. --json '\\\"id\\\": \\\"3\\\", \\\"A\\\": \\\"1\\\", \\\"B\\\": \\\"2\\\"'\n\ - 4. --json \"\\\"id\\\": \\\"3\\\", \\\"A\\\": \\\"1\\\", \\\"B\\\": \\\"2\\\"\" " ) ] - json : String, - - #[ arg( long, help = "Full URL of Google Sheet.\n\ - It has to be inside of '' to avoid parse errors.\n\ - Example: 'https://docs.google.com/spreadsheets/d/your_spreadsheet_id/edit?gid=0#gid=0'" ) ] - url : String, - - #[ arg( long, help = "Sheet name.\nExample: Sheet1" ) ] - tab : String - } - - } - - pub async fn command - ( - hub : &SheetsType, - commands : Commands - ) - { - match commands - { - Commands::Set { select_row_by_key, json, url, tab } => - { - let spreadsheet_id = match get_spreadsheet_id_from_url( url.as_str() ) - { - Ok( id ) => id, - Err( error ) => - { - eprintln!( "Error extracting spreadsheet ID: {}", error ); - return; - } - }; - - match actions::gspread_cells_set::action - ( - &hub, - select_row_by_key.as_str(), - json.as_str(), - spreadsheet_id, - tab.as_str() - ) - .await - { - Ok( msg ) => println!( "{}", msg ), - Err( error ) => println!( "Error:\n{}", error ) - } - } - } - } -} - -crate::mod_interface! -{ - own use - { - command, - Commands - }; -} \ No newline at end of file diff --git a/module/move/gspread/src/commands/gspread_header.rs b/module/move/gspread/src/commands/gspread_header.rs index b009bcceec..5cce477af7 100644 --- a/module/move/gspread/src/commands/gspread_header.rs +++ b/module/move/gspread/src/commands/gspread_header.rs @@ -79,15 +79,9 @@ mod private } }; -<<<<<<< HEAD - match actions::gspread_get_header::action - ( - hub, -======= match actions::gspread_header_get::action ( client, ->>>>>>> updstream/alpha spreadsheet_id, tab.as_str() ) @@ -95,21 +89,12 @@ mod private { Ok( header ) => { -<<<<<<< HEAD - let header_wrapped = header - .into_iter() - .map( | row | RowWrapper{ max_len: row.len(), row } ) - .collect(); - - println!( "Header:\n{}", Report{ rows: header_wrapped } ); -======= let header_wrapped = RowWrapper { max_len : header.len(), row : header }; println!( "Header:\n{}", Report{ header : vec![ header_wrapped ] } ); ->>>>>>> updstream/alpha } Err( error ) => eprintln!( "Error:\n{}", error ), } diff --git a/module/move/gspread/src/commands/gspread_rows.rs b/module/move/gspread/src/commands/gspread_rows.rs index c0dc801613..349eddf61c 100644 --- a/module/move/gspread/src/commands/gspread_rows.rs +++ b/module/move/gspread/src/commands/gspread_rows.rs @@ -43,11 +43,7 @@ mod private } }; -<<<<<<< HEAD - match actions::gspread_get_rows::action -======= match actions::gspread_rows_get::action ->>>>>>> updstream/alpha ( client, spreadsheet_id, @@ -57,15 +53,6 @@ mod private { Ok( rows ) => { -<<<<<<< HEAD - let max_len = rows.iter().map(|row| row.len()).max().unwrap_or(0); - let rows_wrapped: Vec = rows - .into_iter() - .map(|row| RowWrapper { row, max_len }) - .collect(); - - println!( "Rows:\n{}", Report{ rows: rows_wrapped } ); -======= let max_len = rows .iter() .map( | row | row.len() ) @@ -78,7 +65,6 @@ mod private .collect(); println!( "Rows:\n{}", Report{ rows : rows_wrapped } ); ->>>>>>> updstream/alpha } Err( error ) => eprintln!( "Error:\n{}", error ), } From 2106c9aa4814e9f368e2090cc9e85864f036fe10 Mon Sep 17 00:00:00 2001 From: Vsevolod Date: Thu, 6 Mar 2025 15:50:46 +0100 Subject: [PATCH 11/11] removed empty test file --- module/core/format_tools/tests/inc/utf8_test.rs | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 module/core/format_tools/tests/inc/utf8_test.rs diff --git a/module/core/format_tools/tests/inc/utf8_test.rs b/module/core/format_tools/tests/inc/utf8_test.rs deleted file mode 100644 index e69de29bb2..0000000000