@@ -62,57 +62,9 @@ def __repr__(self):
62
62
)
63
63
64
64
65
- def run_graphql_query (
66
- query : str , variables : dict , token : str , retry : bool = True
67
- ) -> dict :
68
- """
69
- This function submits a graphql query and returns the results as a
70
- dictionary.
71
- """
72
- s = requests .Session ()
73
- retries = requests .adapters .Retry (total = 8 , backoff_factor = 2 , status_forcelist = [504 ])
74
- s .mount ("https://" , requests .adapters .HTTPAdapter (max_retries = retries ))
75
-
76
- headers = {
77
- "Authorization" : "bearer {}" .format (token ),
78
- # See
79
- # https://github.blog/2021-11-16-graphql-global-id-migration-update/
80
- "X-Github-Next-Global-ID" : "1" ,
81
- }
82
- request = s .post (
83
- url = "https://api.github.com/graphql" ,
84
- json = {"query" : query , "variables" : variables },
85
- headers = headers ,
86
- )
87
-
88
- rate_limit = request .headers .get ("X-RateLimit-Remaining" )
89
- print (rate_limit )
90
- if rate_limit and int (rate_limit ) < 10 :
91
- reset_time = int (request .headers ["X-RateLimit-Reset" ])
92
- while reset_time - int (time .time ()) > 0 :
93
- time .sleep (60 )
94
- print (
95
- "Waiting until rate limit reset" ,
96
- reset_time - int (time .time ()),
97
- "seconds remaining" ,
98
- )
99
-
100
- if request .status_code == 200 :
101
- if "data" not in request .json ():
102
- print (request .json ())
103
- sys .exit (1 )
104
- return request .json ()["data" ]
105
- elif retry :
106
- return run_graphql_query (query , variables , token , False )
107
- else :
108
- raise Exception (
109
- "Failed to run graphql query\n query: {}\n error: {}" .format (
110
- query , request .json ()
111
- )
112
- )
113
-
114
-
115
- def check_manual_requests (start_date : datetime .datetime , token : str ) -> list [str ]:
65
+ def check_manual_requests (
66
+ gh : github .Github , start_date : datetime .datetime
67
+ ) -> list [str ]:
116
68
"""
117
69
Return a list of users who have been asked since ``start_date`` if they
118
70
want to keep their commit access.
@@ -140,15 +92,18 @@ def check_manual_requests(start_date: datetime.datetime, token: str) -> list[str
140
92
"query" : f"type:issue created:>{ formatted_start_date } org:llvm repo:llvm-project label:infra:commit-access"
141
93
}
142
94
143
- data = run_graphql_query (query , variables , token )
95
+ res_header , res_data = gh ._Github__requester .graphql_query (
96
+ query = query , variables = variables
97
+ )
98
+ data = res_data ["data" ]
144
99
users = []
145
100
for issue in data ["search" ]["nodes" ]:
146
101
users .extend ([user [1 :] for user in re .findall ("@[^ ,\n ]+" , issue ["body" ])])
147
102
148
103
return users
149
104
150
105
151
- def get_num_commits (user : str , start_date : datetime .datetime , token : str ) -> int :
106
+ def get_num_commits (gh : github . Github , user : str , start_date : datetime .datetime ) -> int :
152
107
"""
153
108
Get number of commits that ``user`` has been made since ``start_date`.
154
109
"""
@@ -166,7 +121,10 @@ def get_num_commits(user: str, start_date: datetime.datetime, token: str) -> int
166
121
}
167
122
"""
168
123
169
- data = run_graphql_query (user_query , variables , token )
124
+ res_header , res_data = gh ._Github__requester .graphql_query (
125
+ query = user_query , variables = variables
126
+ )
127
+ data = res_data ["data" ]
170
128
variables ["user_id" ] = data ["user" ]["id" ]
171
129
172
130
query = """
@@ -193,7 +151,10 @@ def get_num_commits(user: str, start_date: datetime.datetime, token: str) -> int
193
151
}
194
152
"""
195
153
count = 0
196
- data = run_graphql_query (query , variables , token )
154
+ res_header , res_data = gh ._Github__requester .graphql_query (
155
+ query = query , variables = variables
156
+ )
157
+ data = res_data ["data" ]
197
158
for repo in data ["organization" ]["teams" ]["nodes" ][0 ]["repositories" ]["nodes" ]:
198
159
count += int (repo ["ref" ]["target" ]["history" ]["totalCount" ])
199
160
if count >= User .THRESHOLD :
@@ -202,7 +163,7 @@ def get_num_commits(user: str, start_date: datetime.datetime, token: str) -> int
202
163
203
164
204
165
def is_new_committer_query_repo (
205
- user : str , start_date : datetime .datetime , token : str
166
+ gh : github . Github , user : str , start_date : datetime .datetime
206
167
) -> bool :
207
168
"""
208
169
Determine if ``user`` is a new committer. A new committer can keep their
@@ -220,7 +181,10 @@ def is_new_committer_query_repo(
220
181
}
221
182
"""
222
183
223
- data = run_graphql_query (user_query , variables , token )
184
+ res_header , res_data = gh ._Github__requester .graphql_query (
185
+ query = user_query , variables = variables
186
+ )
187
+ data = res_data ["data" ]
224
188
variables ["owner" ] = "llvm"
225
189
variables ["user_id" ] = data ["user" ]["id" ]
226
190
variables ["start_date" ] = start_date .strftime ("%Y-%m-%dT%H:%M:%S" )
@@ -245,7 +209,10 @@ def is_new_committer_query_repo(
245
209
}
246
210
"""
247
211
248
- data = run_graphql_query (query , variables , token )
212
+ res_header , res_data = gh ._Github__requester .graphql_query (
213
+ query = query , variables = variables
214
+ )
215
+ data = res_data ["data" ]
249
216
repo = data ["organization" ]["repository" ]
250
217
commits = repo ["ref" ]["target" ]["history" ]["nodes" ]
251
218
if len (commits ) == 0 :
@@ -256,18 +223,22 @@ def is_new_committer_query_repo(
256
223
return True
257
224
258
225
259
- def is_new_committer (user : str , start_date : datetime .datetime , token : str ) -> bool :
226
+ def is_new_committer (
227
+ gh : github .Github , user : str , start_date : datetime .datetime
228
+ ) -> bool :
260
229
"""
261
230
Wrapper around is_new_commiter_query_repo to handle exceptions.
262
231
"""
263
232
try :
264
- return is_new_committer_query_repo (user , start_date , token )
233
+ return is_new_committer_query_repo (gh , user , start_date )
265
234
except :
266
235
pass
267
236
return True
268
237
269
238
270
- def get_review_count (user : str , start_date : datetime .datetime , token : str ) -> int :
239
+ def get_review_count (
240
+ gh : github .Github , user : str , start_date : datetime .datetime
241
+ ) -> int :
271
242
"""
272
243
Return the number of reviews that ``user`` has done since ``start_date``.
273
244
"""
@@ -286,11 +257,14 @@ def get_review_count(user: str, start_date: datetime.datetime, token: str) -> in
286
257
"query" : f"type:pr commenter:{ user } -author:{ user } merged:>{ formatted_start_date } org:llvm" ,
287
258
}
288
259
289
- data = run_graphql_query (query , variables , token )
260
+ res_header , res_data = gh ._Github__requester .graphql_query (
261
+ query = query , variables = variables
262
+ )
263
+ data = res_data ["data" ]
290
264
return int (data ["search" ]["issueCount" ])
291
265
292
266
293
- def count_prs (triage_list : dict , start_date : datetime .datetime , token : str ):
267
+ def count_prs (gh : github . Github , triage_list : dict , start_date : datetime .datetime ):
294
268
"""
295
269
Fetch all the merged PRs for the project since ``start_date`` and update
296
270
``triage_list`` with the number of PRs merged for each user.
@@ -329,7 +303,10 @@ def count_prs(triage_list: dict, start_date: datetime.datetime, token: str):
329
303
has_next_page = True
330
304
while has_next_page :
331
305
print (variables )
332
- data = run_graphql_query (query , variables , token )
306
+ res_header , res_data = gh ._Github__requester .graphql_query (
307
+ query = query , variables = variables
308
+ )
309
+ data = res_data ["data" ]
333
310
for pr in data ["search" ]["nodes" ]:
334
311
# Users can be None if the user has been deleted.
335
312
if not pr ["author" ]:
@@ -365,14 +342,14 @@ def main():
365
342
366
343
print ("Start:" , len (triage_list ), "triagers" )
367
344
# Step 0 Check if users have requested commit access in the last year.
368
- for user in check_manual_requests (one_year_ago , token ):
345
+ for user in check_manual_requests (gh , one_year_ago ):
369
346
if user in triage_list :
370
347
print (user , "requested commit access in the last year." )
371
348
del triage_list [user ]
372
349
print ("After Request Check:" , len (triage_list ), "triagers" )
373
350
374
351
# Step 1 count all PRs authored or merged
375
- count_prs (triage_list , one_year_ago , token )
352
+ count_prs (gh , triage_list , one_year_ago )
376
353
377
354
print ("After PRs:" , len (triage_list ), "triagers" )
378
355
@@ -381,7 +358,7 @@ def main():
381
358
382
359
# Step 2 check for reviews
383
360
for user in list (triage_list .keys ()):
384
- review_count = get_review_count (user , one_year_ago , token )
361
+ review_count = get_review_count (gh , user , one_year_ago )
385
362
triage_list [user ].add_reviewed (review_count )
386
363
387
364
print ("After Reviews:" , len (triage_list ), "triagers" )
@@ -391,7 +368,7 @@ def main():
391
368
392
369
# Step 3 check for number of commits
393
370
for user in list (triage_list .keys ()):
394
- num_commits = get_num_commits (user , one_year_ago , token )
371
+ num_commits = get_num_commits (gh , user , one_year_ago )
395
372
# Override the total number of commits to not double count commits and
396
373
# authored PRs.
397
374
triage_list [user ].set_authored (num_commits )
@@ -401,7 +378,7 @@ def main():
401
378
# Step 4 check for new committers
402
379
for user in list (triage_list .keys ()):
403
380
print ("Checking" , user )
404
- if is_new_committer (user , one_year_ago , token ):
381
+ if is_new_committer (gh , user , one_year_ago ):
405
382
print ("Removing new committer: " , user )
406
383
del triage_list [user ]
407
384
0 commit comments