""" Gather all members of a GitHub organization, all repos within that organization, and list each user's permission per repo. """ import requests GITHUB_TOKEN = 'your_personal_access_token' ORGANIZATION = 'your_organization' TIMEOUT = 30 # Headers for authentication headers = { 'Authorization': f'token {GITHUB_TOKEN}', 'Accept': 'application/vnd.github.v3+json' } def get_org_members(org): """ Get members of an organization """ url = f'https://api.github.com/orgs/{org}/members' response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() def get_org_repos(org): """ Get repositories of an organization """ url = f'https://api.github.com/orgs/{org}/repos' response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() def get_repo_collaborators(org, repo): """ Get collaborators of a repository with their permissions """ url = f'https://api.github.com/repos/{org}/{repo}/collaborators' response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() def get_user_permissions(org, repo, user): """ Get a user's permissions for a repository """ url = f'https://api.github.com/repos/{org}/{repo}/collaborators/{user}/permission' response = requests.get(url, headers=headers, timeout=TIMEOUT) response.raise_for_status() return response.json() # Main script if __name__ == '__main__': # Get organization members members = get_org_members(ORGANIZATION) print(f"Members of the organization '{ORGANIZATION}':") for member in members: print(f"- {member['login']}") # Get organization repositories repositories = get_org_repos(ORGANIZATION) print(f"\nRepositories in the organization '{ORGANIZATION}':") for repository in repositories: print(f"- {repository['name']}") # Get collaborators for each repository and their permissions for repository in repositories: repository_name = repository['name'] collaborators = get_repo_collaborators(ORGANIZATION, repository_name) print(f"\nCollaborators for the repository '{repository_name}':") for collaborator in collaborators: user_login = collaborator['login'] permissions = get_user_permissions(ORGANIZATION, repository_name, user_login) print(f"- {user_login}: {permissions['permission']}")