Skip to content

Commit 3fc4e9a

Browse files
DEVOPS-95 repos.py pagination
1 parent badeef0 commit 3fc4e9a

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

repos.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import os
2+
import requests
3+
import argparse
4+
from dotenv import load_dotenv
5+
6+
def list_repos_in_org(org_name: str):
7+
"""
8+
list all repos in github organization
9+
:param org_name:
10+
:return:
11+
"""
12+
repo_endpoint = f'https://api.github.com/orgs/{org_name}/repos'
13+
headers = {
14+
"Accept": "application/vnd.github+json",
15+
"Authorization": f"Bearer {os.getenv('GH_TOKEN')}",
16+
"X-GitHub-Api-Version": "2022-11-28"
17+
}
18+
params = {
19+
'sort': 'created',
20+
'per_page': 30,
21+
'page': 1
22+
}
23+
24+
# List to hold all repositories
25+
all_repositories = []
26+
# Paginate through all pages
27+
while True:
28+
# Make the GET request with query parameters
29+
response = requests.get(url=repo_endpoint, headers=headers, params=params)
30+
31+
# Check the response status code
32+
if response.status_code == 200:
33+
# Parse the JSON response
34+
repositories = response.json()
35+
if not repositories:
36+
break
37+
all_repositories.extend(repositories)
38+
params["page"] += 1
39+
else:
40+
print(f"Failed to fetch repositories: {response.status_code}")
41+
break
42+
43+
# response = requests.get(url=repo_endpoint, headers=headers)
44+
# response_json = response.json()
45+
repo_names = []
46+
for repos in all_repositories:
47+
repo_names.append(repos['name'])
48+
49+
return repo_names
50+
51+
52+
def main():
53+
""" To test the script"""
54+
load_dotenv()
55+
parser = argparse.ArgumentParser(description='List github organization repos')
56+
parser.add_argument('--organization', help='Github org name', type=str, required=True)
57+
args = parser.parse_args()
58+
organization = args.organization
59+
repo_names = list_repos_in_org(org_name=organization)
60+
61+
62+
if __name__ == "__main__":
63+
main()

0 commit comments

Comments
 (0)