11import logging
22import subprocess
33import sys
4- from collections import Counter
4+ from collections import Counter , defaultdict
55from datetime import datetime , timedelta , timezone
66from pathlib import Path
7- from typing import Container , Dict , List , Optional , Set
7+ from typing import Container , DefaultDict , Dict , List , Optional , Set
88
99import httpx
1010import yaml
@@ -375,7 +375,7 @@ def get_contributors(settings: Settings):
375375 return contributors , commentors , reviewers , authors
376376
377377
378- def get_individual_sponsors (settings : Settings , max_individual_sponsor : int = 5 ):
378+ def get_individual_sponsors (settings : Settings ):
379379 nodes : List [SponsorshipAsMaintainerNode ] = []
380380 edges = get_graphql_sponsor_edges (settings = settings )
381381
@@ -385,12 +385,12 @@ def get_individual_sponsors(settings: Settings, max_individual_sponsor: int = 5)
385385 last_edge = edges [- 1 ]
386386 edges = get_graphql_sponsor_edges (settings = settings , after = last_edge .cursor )
387387
388- entities : Dict [str , SponsorEntity ] = {}
388+ tiers : DefaultDict [ float , Dict [str , SponsorEntity ]] = defaultdict ( dict )
389389 for node in nodes :
390- if node .tier .monthlyPriceInDollars > max_individual_sponsor :
391- continue
392- entities [ node . sponsorEntity . login ] = node .sponsorEntity
393- return entities
390+ tiers [ node .tier .monthlyPriceInDollars ][
391+ node . sponsorEntity . login
392+ ] = node .sponsorEntity
393+ return tiers
394394
395395
396396def get_top_users (
@@ -475,19 +475,30 @@ def get_top_users(
475475 skip_users = skip_users ,
476476 )
477477
478- sponsors_by_login = get_individual_sponsors (settings = settings )
479- sponsors = []
480- for login , sponsor in sponsors_by_login .items ():
481- sponsors .append (
478+ tiers = get_individual_sponsors (settings = settings )
479+ sponsors_50 = []
480+ for login , sponsor in tiers [ 50 ] .items ():
481+ sponsors_50 .append (
482482 {"login" : login , "avatarUrl" : sponsor .avatarUrl , "url" : sponsor .url }
483483 )
484+ keys = list (tiers .keys ())
485+ keys .sort (reverse = True )
486+ sponsors = []
487+ for key in keys :
488+ if key >= 50 :
489+ continue
490+ for login , sponsor in tiers [key ].items ():
491+ sponsors .append (
492+ {"login" : login , "avatarUrl" : sponsor .avatarUrl , "url" : sponsor .url }
493+ )
484494
485495 people = {
486496 "maintainers" : maintainers ,
487497 "experts" : experts ,
488498 "last_month_active" : last_month_active ,
489499 "top_contributors" : top_contributors ,
490500 "top_reviewers" : top_reviewers ,
501+ "sponsors_50" : sponsors_50 ,
491502 "sponsors" : sponsors ,
492503 }
493504 people_path = Path ("./docs/en/data/people.yml" )
0 commit comments