gogcli 实战指南:用 `gog classroom guardian-invitations list` 管理 Google Classroom 监护人邀请
2026/9/16 20:37:30 网站建设 项目流程

gogcli 实战指南:用gog classroom guardian-invitations list管理 Google Classroom 监护人邀请

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

导读

gog classroom guardian-invitations list是 gogcli(Google Workspace in your terminal)中用于列出指定学生监护人邀请记录的核心命令。本文围绕该命令,完整讲解其用法、参数语义、分页机制、过滤与状态筛选,并结合仓库源码(命令定义、分页助手、表格渲染与测试用例)剖析其底层实现,帮助你掌握在终端与脚本中批量查询监护人邀请、对接自动化运维场景的完整方法。

命令概览:一条命令,四种写法

该命令在 gogcli 的 Classroom 命令树中位于classroom → guardian-invitations之下,支持多级别名,官方文档给出的完整用法为:

gog classroom (class) guardian-invitations (guardian-invites) list (ls) <studentId> [flags]

其中括号中的classguardian-invitesls均为别名,因此下面四种写法等价:

gog classroom guardian-invitations list <studentId> gog class guardian-invites ls <studentId> gog classroom guardian-invites list <studentId> gog class guardian-invitations ls <studentId>

位置参数<studentId>必填的 Google Classroom 学生 ID(userProfiles.guardianInvitations.listAPI 要求按学生维度查询)。从命令树定义看,guardian-invitations的别名为guardian-inviteslist的别名为ls,且list是该子命令树的默认命令(cmd:"" default:"withargs"),见 internal/cmd/classroom.go 与 internal/cmd/classroom_guardians.go。与它并列的子命令还包括get(别名info,show)与create(别名add,new),三者共同构成监护人邀请的完整操作闭环。

命令特有参数:过滤、状态与分页

除全局通用 flag 外,list命令专属的参数定义在 internal/cmd/classroom_guardians.go 中:

参数类型默认值说明
<studentId>string必填。学生 ID,用于定位查询范围
--emailstring按受邀监护人邮箱地址精确过滤
--statestring邀请状态过滤,逗号分隔,取值PENDING,COMPLETE
--max/--limitint64100单页最大结果数(即传给 API 的 pageSize)
--page/--cursorstring分页游标(API 返回的 nextPageToken)
--all/--all-pages/--allpagesboolfalse自动翻页拉取全部结果
--fail-empty/--non-empty/--require-resultsboolfalse无结果时以退出码 3 结束(便于脚本判断)

状态过滤的源码细节

--state参数在底层并不会被直接原样透传,而是先经过upperClassroomStates大写归一化:该函数将逗号分隔的输入按 CSV 拆分后逐个strings.ToUpper(见 internal/cmd/classroom_list_helpers.go)。这意味着--state pending,complete--state PENDING,COMPLETE均可被接受,最终调用call.States(states...)传给 Google Classroom API。同理,--email会先strings.TrimSpace去空白,非空时才调用call.InvitedEmailAddress(email)(见 internal/cmd/classroom_guardians.go)。

典型用法示例

1. 基础查询:列出某学生全部监护人邀请

gog classroom guardian-invitations list student-id-123

默认返回前 100 条(--max默认值为 100),输出为表格形式,列头为INVITATION_IDEMAILSTATECREATED。这四列的定义见 internal/cmd/classroom_presentation.go:分别取自InvitationIdInvitedEmailAddressStateCreationTime字段,输出前经sanitizeTab清洗以保证表格对齐。

2. 按邮箱与状态组合过滤

gog classroom guardian-invitations list student-id-123 \ --email guardian@example.com \ --state pending,complete

服务端会同时应用邮箱过滤与状态过滤;状态值不区分大小写。

3. 拉取全部结果并限制单页大小

gog classroom guardian-invitations list student-id-123 --all --max 50

--all会忽略返回的nextPageToken,在客户端自动翻页直至取完;--max控制每次请求的pageSize

4. 手动翻页

# 第一页 gog classroom guardian-invitations list student-id-123 --page "" # 用上一页返回的 nextPageToken 取下一页 gog classroom guardian-invitations list student-id-123 --page <nextPageToken>

5. 脚本化:JSON 输出 + 空结果检测

gog classroom guardian-invitations list student-id-123 --json --fail-empty if [ $? -eq 3 ]; then echo "no guardian invitations found" fi

--fail-empty在无结果时返回退出码 3,便于 CI 或 Shell 脚本做存在性校验。

输出格式与分页行为

表格输出(默认)

无结果时打印No guardian invitations提示;有结果时以表格输出,并在存在下一页时打印继续翻页的提示(--all/--all-pages),逻辑见 internal/cmd/classroom_list_helpers.go。

JSON 输出(-j/--json

结果以信封结构输出到 stdout:

{ "invitations": [ { "invitationId": "gi1", "invitedEmailAddress": "guardian@example.com", "state": "PENDING", "creationTime": "2024-01-01T00:00:00Z" } ], "nextPageToken": "gip" }

顶层键invitations为结果数组,nextPageToken为翻页游标(见 internal/cmd/classroom_list_helpers.go)。如需只输出主结果、丢弃信封字段,可加--results-only

其他常用全局 flag

  • -p/--plain/--tsv:输出稳定的 TSV 纯文本,无颜色,适合解析;
  • --select/--pick/--project:JSON 模式下按逗号分隔字段挑选输出(支持点路径);
  • --max必须大于 0,否则返回max must be > 0的用法错误(见 internal/cmd/classroom_list_helpers.go);
  • --account/--acct:指定账户邮箱、别名或auto
  • --client:指定 OAuth 客户端名称;
  • --access-token:直接使用访问令牌(绕过存储的刷新令牌,令牌约 1 小时过期);
  • --readonly:运行时拦截所有变更类 API 请求;--gmail-no-send用于阻断 Gmail 发送(agent 安全场景);
  • --no-input:禁止交互提示,失败即退出,适合 CI;
  • --home:覆盖 gogcli 配置/数据/状态/缓存根目录(等价于GOG_HOME)。

底层实现:一次 list 调用经历了什么

该命令的核心执行路径集中在两个文件:

  1. 参数定义与 API 调用:internal/cmd/classroom_guardians.go 中的Run方法构造classroomPagedListOptions,在fetch闭包内调用svc.UserProfiles.GuardianInvitations.List(studentID).PageSize(pageSize).Context(ctx),并按需追加PageTokenInvitedEmailAddressStates过滤条件,最后执行Do()发起 HTTP 请求并返回resp.GuardianInvitationsresp.NextPageToken
  2. 分页与输出编排:internal/cmd/classroom_list_helpers.go 中的runClassroomPagedList负责校验参数、调用loadPagedItems完成单页或全量翻页,再交给writeClassroomPagedList统一处理表格/JSON 输出与空结果逻辑。loadPagedItems--all时通过collectAllPages循环取完所有页(见 internal/cmd/paged_list_helpers.go)。

测试用例:命令行为如何被验证

仓库通过 httptest 模拟 Classroom API 来验证该命令的完整链路。在 internal/cmd/execute_classroom_more_commands_test.go 中,mock 服务器根据路径/userProfiles/.../guardianInvitations与 HTTP 方法分发响应:GET 列表返回guardianInvitations数组与nextPageToken,GET 单条返回invitationId等字段,POST 创建返回新邀请。测试随后以--email--state--max--page等参数组合运行 JSON 模式(见 internal/cmd/execute_classroom_more_commands_test.go),同时覆盖--max 0--max -1等非法参数的错误路径。

表格渲染同样有独立单测:internal/cmd/classroom_presentation_test.go 断言INVITATION_ID / EMAIL / STATE / CREATED四列的纯文本输出格式与字段映射完全一致,确保默认人读输出稳定可解析。

相关命令与延伸阅读

  • 创建监护人邀请:gog classroom guardian-invitations create
  • 查询单条邀请:gog classroom guardian-invitations get
  • 已确认的监护人管理:gog classroom guardians
  • Classroom 命令树总览:gog classroom
  • 全部命令索引:命令索引

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询