mirror of
https://github.com/ChristianLempa/scripts.git
synced 2026-11-11 19:29:28 +01:00
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
import requests
|
|
|
|
|
|
def getReposFromPage(github_token: str, organization: str, page: int):
|
|
# Get all repos from a specific page for an organization from GitHub.
|
|
# https://docs.github.com/en/rest/reference/repos#list-organization-repositories
|
|
try:
|
|
url = f"https://api.github.com/orgs/{organization}/repos"
|
|
payload = {}
|
|
headers = {
|
|
'Authorization': f'token {github_token}'
|
|
}
|
|
params = {
|
|
'per_page': '100',
|
|
'page': page,
|
|
'sort': 'full_name'
|
|
}
|
|
|
|
response = requests.request("GET", url, headers=headers, data=payload, params=params)
|
|
|
|
if response.status_code == 200:
|
|
return response.json()
|
|
else:
|
|
raise Exception(f"status code {response.status_code}")
|
|
except Exception as e:
|
|
print(f"error: {e}")
|
|
return None
|
|
|
|
|
|
def getRepos(github_token: str, organization: str):
|
|
# Get all repos for an organization from GitHub by iterating over all pages.
|
|
# https://docs.github.com/en/rest/reference/repos#list-organization-repositories
|
|
try:
|
|
repos = []
|
|
page = 1
|
|
while True:
|
|
repos_page = getReposFromPage(github_token, organization, page)
|
|
if repos_page is not None:
|
|
repos.extend(repos_page)
|
|
if len(repos_page) < 100:
|
|
break
|
|
else:
|
|
page += 1
|
|
else:
|
|
raise Exception("repos_page is None")
|
|
return repos
|
|
except Exception as e:
|
|
print(f"error: {e}")
|
|
return None
|