gogcli 实战:使用 `gog sheets datasource delete` 安全删除 Connected Sheets 数据源与其关联工作表

gogcli 实战:使用 `gog sheets datasource delete` 安全删除 Connected Sheets 数据源与其关联工作表 gogcli 实战使用gog sheets datasource delete安全删除 Connected Sheets 数据源与其关联工作表【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli本文以 gogcliGoogle Workspace in your terminal官方命令文档 docs/commands/gog-sheets-datasource-delete.md 为主体结合仓库源码 internal/cmd/sheets_datasource_delete.go 与测试用例 internal/cmd/sheets_datasource_delete_test.go完整讲解该破坏性命令的用法、安全机制、输出格式与排错方法。读完本文你将能在终端中准确删除一个 BigQuery Connected Sheets 数据源并理解其连带删除关联工作表、解绑图表透视表的副作用如何在源码层面被层层保护。命令概览一条命令拆除整条数据链路gog sheets datasource delete用于删除一个 Connected Sheets连接工作表数据源及其关联的DATA_SOURCE工作表。这里的删除并非只删元数据Connected Sheets 把一个 BigQuery 数据源接入电子表格后会生成一个承载数据的DATA_SOURCE类型工作表并可能有依赖该数据源的提取表extracts、图表charts与透视表pivot tables。执行本命令时这些依赖对象会被一并解绑。命令注册位置在 internal/cmd/sheets.goSheetsCmd中以别名data-source,data-sources,connected-sheets注册datasource子命令定义在 internal/cmd/sheets_datasource.godelete的别名是rm、remove。因此以下写法等价gog sheets datasource delete spreadsheetId dataSourceId gog sheets>$ gog sheets datasource delete ds-target error: empty spreadsheetId这一行为由测试用例TestSheetsDataSourceDeleteRejectsInvalidIDsBeforeConfirmationinternal/cmd/sheets_datasource_delete_test.go锁定验证。一个典型调用示例# 假设已列出数据源并确认 dataSourceId 为 ds-target gog sheets datasource delete 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms ds-target全局 Flags 说明与 gogcli 其他命令一致本命令继承全部全局标志完整表格如下Flag类型默认值说明--access-tokenstring直接使用提供的访问令牌绕过已存储的刷新令牌令牌约 1 小时过期-a--account--acctstring账户邮箱、别名或auto用于已认证的 Google API 命令--clientstringOAuth 客户端名称选择已存储的凭据与令牌桶--colorstringauto颜色输出auto\|always\|never--disable-commandsstring逗号分隔的禁用命令列表支持点路径-n--dry-run--dryrun--noop--previewbool不执行任何修改仅打印预期动作并以成功状态退出--enable-commandsstring逗号分隔的启用命令前缀列表支持点路径限制 CLI--enable-commands-exactstring逗号分隔的精确启用命令列表父命令不会启用子命令-y--force--assume-yes--yesbool跳过破坏性命令的确认提示--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全-h--helpkong.helpFlag显示上下文相关的帮助信息--homestring覆盖 gogcli 配置/数据/状态/缓存根目录等价于GOG_HOME-j--json--machineboolfalse以 JSON 输出到 stdout最适合脚本化--no-input--non-interactive--noninteractivebool绝不交互提示失败即退出适合 CI-p--plain--tsvboolfalse输出稳定可解析的纯文本到 stdoutTSV无颜色--quota-projectstring用于计费的 Google Cloud 项目以X-Goog-User-Project头发送部分 API 在--access-token或 ADC 场景下需要--readonlyboolfalse运行时阻止一切变更类 API 请求auth add也会只申请只读 OAuth 范围--results-onlyboolJSON 模式下仅输出主结果丢弃nextPageToken等信封字段--select--pick--projectstringJSON 模式下选择逗号分隔的字段尽力而为支持点路径多数命令推荐用--fields-v--verbosebool开启详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出时用外部不可信内容标记包裹抓取的文本字段其中与删除操作最相关的是--dry-run、--force、--readonly与--no-input它们共同构成了本命令的安全护栏详见下一节。破坏性操作的四层安全设计删除数据源是不可逆操作源码在 internal/cmd/sheets_datasource_delete.go 中按顺序实现了四层防护第一层参数校验两个位置参数必须非空否则在鉴权之前即以 usage 错误退出见上文参数详解。第二层只读保护ReadOnly执行任何写入前代码检查googleapi.ReadOnly(ctx) || flags.ReadOnly若处于只读模式则返回错误Connected Sheets deletion is disabled。测试用例TestSheetsDataSourceDeleteForceDoesNotBypassReadOnlyinternal/cmd/sheets_datasource_delete_test.go专门验证了--force不能绕过--readonly—— 两层保护是独立的。第三层破坏性操作确认删除属于破坏性命令必须显式确认。命令会打印将要执行的动作描述该描述在源码中明确定义internal/cmd/sheets_datasource_delete.godelete Connected Sheets data source dataSourceId from spreadsheet spreadsheetId, delete its linked DATA_SOURCE sheet, and unlink dependent extracts, charts, and pivot tables确认逻辑位于 internal/cmd/confirm.go交互式终端下会提示Proceed to ...? [y/N]:输入y才继续非交互上下文--no-input或 stdin 非终端下拒绝执行报错并退出码 2。测试TestSheetsDataSourceDeleteRequiresExplicitConfirmation验证了此时连写服务都不会被创建factoryCalls 0错误信息必须包含--force、DATA_SOURCE sheet、unlink dependent、extracts、charts、pivot tables等关键字样传入--force别名-y、--assume-yes、--yes则跳过确认。第四层破坏性请求永不重试executeConnectedSheetsWrite最终调用svc.Spreadsheets.BatchUpdate(...).Context(googleapi.WithoutRetries(ctx)).Do()internal/cmd/sheets_datasource_write.go。WithoutRetries明确禁止重试——对于删除这类幂等性不确定的请求一旦遇到 429/503 临时故障宁可报错失败也不冒重复删除的风险。测试TestSheetsDataSourceDeleteDoesNotRetryDestructiveRequest验证了在StatusTooManyRequests与StatusServiceUnavailable下请求只发出一次、且绝不输出成功信息。底层实现BatchUpdate 中的 DeleteDataSource 请求在通过所有安全检查后命令构造一个标准的 Google Sheets APIBatchUpdateSpreadsheetRequest内部仅含一个DeleteDataSource请求internal/cmd/sheets_datasource_delete.gorequest : sheets.BatchUpdateSpreadsheetRequest{ Requests: []*sheets.Request{{ DeleteDataSource: sheets.DeleteDataSourceRequest{DataSourceId: dataSourceID}, }}, }该请求通过POST /v4/spreadsheets/{spreadsheetId}:batchUpdate发送。测试TestSheetsDataSourceDeleteTargetsOneSourceinternal/cmd/sheets_datasource_delete_test.go在本地 httptest 服务上断言请求方法必须是POST、路径必须是/v4/spreadsheets/connected1:batchUpdate、请求体内恰好只有一个DeleteDataSource请求且DataSourceId精确等于目标值——确保不会误删其他数据源。与--dry-run配合时TestSheetsDataSourceDeleteDryRunAvoidsConfirmationAndAuthentication命令在离线状态输出一个 JSON 预览包含dry_run: true、op: sheets.datasource.delete、data_source_id、deletes_linked_sheet: true、unlinks_dependent_objects: true以及完整的batch_update载荷不触发确认、不进行任何鉴权与网络调用。输出与脚本化使用文本输出默认人类可读输出一行确认信息Deleted Connected Sheets data source ds-targetJSON 输出配合--json或--machine输出结构化结果适合脚本与 LLM 消费{ spreadsheetId: connected1, dataSourceId: ds-target, deleted: true }字段由源码固定生成internal/cmd/sheets_datasource_delete.gospreadsheetId、dataSourceId、deleted。预览 JSON--json --dry-run的输出是运维评审的最佳实践可在 CI 或人工流程中先行预览将要发生的改动{ dry_run: true, op: sheets.datasource.delete, request: { data_source_id: ds-target, deletes_linked_sheet: true, unlinks_dependent_objects: true, batch_update: { requests: [ { deleteDataSource: { dataSourceId: ds-target } } ] } } }非交互环境在 CI 中必须显式传--force否则会因refusing to ... without --force (non-interactive)而失败——这是设计使然防止自动化管道意外触发删除。权限与 Scope 排错Connected Sheets 数据源的操作依赖 BigQuery 相关的 OAuth 范围。源码中定义的常量为https://www.googleapis.com/auth/bigquery.readonlyinternal/cmd/sheets_datasource.go。当服务端返回 403 且错误信息包含insufficient authentication scopes、access_token_scope_insufficient、request scopes are not sufficient或please include bigquery.readonly scope时gogcli 会拦截错误并给出可恢复的指引internal/cmd/sheets_datasource_write.goConnected Sheets mutations require writable Sheets authorization plus OAuth scope bigquery.readonly; re-authenticate while preserving this accounts existing --services, --drive-scope, and --gmail-scope selections and append --extra-scopes ... --force-consent (for a Sheets-only token:gog auth add account --services sheets --extra-scopes scope --force-consent)即需要重新认证在保留账户原有--services、--drive-scope、--gmail-scope选择的前提下追加--extra-scopes https://www.googleapis.com/auth/bigquery.readonly --force-consent。测试TestSheetsDataSourceDeleteExplainsMissingBigQueryScope验证了该恢复路径一定出现在错误信息中且绝不停留在已删除的成功状态。认证相关命令详见 docs/commands/gog-auth-add.md 与 docs/commands/gog-auth.md。推荐操作流程由于删除会连带移除DATA_SOURCE工作表并解绑依赖对象建议按以下顺序执行# 1. 列出当前电子表格的所有数据源确认目标 dataSourceId gog sheets datasource list spreadsheetId # 2. 描述数据源确认其关联的 sheet、provider 与状态 gog sheets datasource describe spreadsheetId dataSourceId # 3. 以 dry-run 预览删除将产生的完整效果离线、无副作用 gog sheets datasource delete spreadsheetId dataSourceId --json --dry-run # 4. 交互式确认删除或脚本化时显式 --force gog sheets datasource delete spreadsheetId dataSourceId若希望从命令行直接查看数据源 ID可配合--plain/--tsv获取稳定可解析的表格输出。删除完成后可用gog sheets datasource list复查确认数据源已不存在。整个命令族的行为定义见父命令文档 docs/commands/gog-sheets-datasource.md 与 docs/commands/gog-sheets.md。【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考