调用PyGithub的update_team_repository未更新GitHub仓库权限问题
问题原因与修复方案
核心问题原因
- 方法调用顺序错误:你当前先调用
update_team_repository设置权限,再调用add_to_repos添加仓库到团队,add_to_repos默认会给新增的仓库设置pull(只读)权限,直接覆盖了你之前的权限设置,这是权限未生效的最主要原因。 - 必要变量未初始化:你在函数中传入了pat参数,但没有使用该参数实例化
Github对象g,也没有定义org_name变量,实际运行时调用的是全局上下文的对象,存在目标组织不匹配、权限缺失的风险。 - PAT权限不足:修改组织团队的仓库权限,你使用的个人访问令牌(PAT)必须勾选
admin:org权限,否则API会静默返回成功但不会实际修改配置。 - 版本兼容问题:部分旧版本PyGithub的
update_team_repository方法要求权限参数为全大写格式,同时需确保传入的是仓库对象而非字符串类型的仓库名。
修正后代码示例
from github import Github def teams_permissions(pat, org_name): # 用传入的pat初始化Github对象 g = Github(pat) admin_keyword = 'ADMIN' org = g.get_organization(org_name) # 提前拉取所有符合要求的团队和仓库,减少重复API调用 admin_teams = [team for team in org.get_teams() if team.name and admin_keyword in team.name] all_repos = list(org.get_repos()) for team in admin_teams: for repo in all_repos: # 先添加仓库到团队,再修改权限 team.add_to_repos(repo) update_res = team.update_team_repository(repo, 'admin') print(f"仓库{repo.name}权限更新结果:{update_res}") print(f"实际权限:{team.get_repo_permission(repo)}")
内容的提问来源于stack exchange,提问作者raiv
相关产品推荐
相关产品推荐

