(ctx context.Context, flags *RootFlags)
| 467 | } |
| 468 | |
| 469 | func (c *SheetsAppendCmd) Run(ctx context.Context, flags *RootFlags) error { |
| 470 | u := ui.FromContext(ctx) |
| 471 | |
| 472 | spreadsheetID := normalizeGoogleID(strings.TrimSpace(c.SpreadsheetID)) |
| 473 | rangeSpec := cleanRange(c.Range) |
| 474 | if spreadsheetID == "" { |
| 475 | return usage("empty spreadsheetId") |
| 476 | } |
| 477 | if strings.TrimSpace(rangeSpec) == "" { |
| 478 | return usage("empty range") |
| 479 | } |
| 480 | |
| 481 | var values [][]interface{} |
| 482 | |
| 483 | switch { |
| 484 | case strings.TrimSpace(c.ValuesJSON) != "": |
| 485 | b, err := resolveInlineOrFileBytes(c.ValuesJSON, stdinReader(ctx)) |
| 486 | if err != nil { |
| 487 | return usagef("read --values-json: %v", err) |
| 488 | } |
| 489 | |
| 490 | values, err = sheetsvalues.Decode(b) |
| 491 | if err != nil { |
| 492 | return sheetsValuesPlannerError(err) |
| 493 | } |
| 494 | case len(c.Values) > 0: |
| 495 | values = sheetsvalues.ParseArgs(c.Values) |
| 496 | default: |
| 497 | return usage("provide values as args or via --values-json") |
| 498 | } |
| 499 | |
| 500 | valueInputOption := strings.TrimSpace(c.ValueInput) |
| 501 | if valueInputOption == "" { |
| 502 | valueInputOption = sheetsDefaultValueInputOption |
| 503 | } |
| 504 | insertDataOption := strings.TrimSpace(c.Insert) |
| 505 | |
| 506 | if err := dryRunExit(ctx, flags, "sheets.append", map[string]any{ |
| 507 | "spreadsheet_id": spreadsheetID, |
| 508 | "range": rangeSpec, |
| 509 | "values": values, |
| 510 | "value_input_option": valueInputOption, |
| 511 | "insert_data_option": insertDataOption, |
| 512 | "copy_validation_from": strings.TrimSpace(c.CopyValidationFrom), |
| 513 | }); err != nil { |
| 514 | return err |
| 515 | } |
| 516 | |
| 517 | account, err := requireAccount(flags) |
| 518 | if err != nil { |
| 519 | return err |
| 520 | } |
| 521 | |
| 522 | svc, err := sheetsService(ctx, account) |
| 523 | if err != nil { |
| 524 | return err |
| 525 | } |
| 526 |
nothing calls this directly
no test coverage detected