@@ -48,15 +48,39 @@ async def get_org_repos(session, org):
48
48
49
49
async def main ():
50
50
async with aiohttp .ClientSession () as session :
51
+ # Check rate limit before making requests
52
+ headers = {
53
+ 'Authorization' : f'token { token } ' ,
54
+ 'Accept' : 'application/vnd.github.v3+json'
55
+ }
56
+ async with session .get ('https://api.github.com/rate_limit' , headers = headers ) as response :
57
+ if response .status == 200 :
58
+ rate_data = await response .json ()
59
+ remaining = rate_data ['resources' ]['core' ]['remaining' ]
60
+ reset_time = datetime .fromtimestamp (rate_data ['resources' ]['core' ]['reset' ])
61
+ reset_in = humanize .naturaltime (reset_time )
62
+ print (f"Rate limit remaining: { remaining } " )
63
+ print (f"Rate limit resets { reset_in } " )
64
+ if remaining < 100 :
65
+ print ("[red]Warning: Rate limit is low![/red]" )
66
+ if remaining < 10 :
67
+ print ("[red]Aborting due to very low rate limit[/red]" )
68
+ return
69
+ else :
70
+ print (f"[red]Error checking rate limit: { response .status } [/red]" )
51
71
tasks = []
52
- for org in orgs :
53
- repos = await get_org_repos (session , org )
72
+ org_tasks = [(org , get_org_repos (session , org )) for org in orgs ]
73
+ org_results = await asyncio .gather (* (task for _ , task in org_tasks ))
74
+ repos = []
75
+ for (org , _ ), org_repos in zip (org_tasks , org_results ):
76
+ for repo in org_repos :
77
+ repos .append ((org , repo ))
54
78
55
- for repo in sorted (repos , key = lambda x : x ['name' ]):
56
- repo_name = repo ['name' ]
79
+ for org , repo in sorted (repos , key = lambda x : x [ 1 ] ['name' ]):
80
+ repo_name = repo ['name' ]
57
81
58
- task = check_private_vulnerability_reporting (session , org , repo_name )
59
- tasks .append ((repo , org , repo_name , task ))
82
+ task = check_private_vulnerability_reporting (session , org , repo_name )
83
+ tasks .append ((repo , org , repo_name , task ))
60
84
61
85
results = await asyncio .gather (* [task for _ ,_ ,_ , task in tasks ])
62
86
0 commit comments