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_sponsors (settings : Settings ):
378+ def get_individual_sponsors (settings : Settings ):
379379 nodes : List [SponsorshipAsMaintainerNode ] = []
380380 edges = get_graphql_sponsor_edges (settings = settings )
381381
@@ -385,10 +385,12 @@ def get_sponsors(settings: Settings):
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- entities [node .sponsorEntity .login ] = node .sponsorEntity
391- return entities
390+ tiers [node .tier .monthlyPriceInDollars ][
391+ node .sponsorEntity .login
392+ ] = node .sponsorEntity
393+ return tiers
392394
393395
394396def get_top_users (
@@ -473,19 +475,30 @@ def get_top_users(
473475 skip_users = skip_users ,
474476 )
475477
476- sponsors_by_login = get_sponsors (settings = settings )
477- sponsors = []
478- for login , sponsor in sponsors_by_login .items ():
479- sponsors .append (
478+ tiers = get_individual_sponsors (settings = settings )
479+ sponsors_50 = []
480+ for login , sponsor in tiers [ 50 ] .items ():
481+ sponsors_50 .append (
480482 {"login" : login , "avatarUrl" : sponsor .avatarUrl , "url" : sponsor .url }
481483 )
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+ )
482494
483495 people = {
484496 "maintainers" : maintainers ,
485497 "experts" : experts ,
486498 "last_month_active" : last_month_active ,
487499 "top_contributors" : top_contributors ,
488500 "top_reviewers" : top_reviewers ,
501+ "sponsors_50" : sponsors_50 ,
489502 "sponsors" : sponsors ,
490503 }
491504 people_path = Path ("./docs/en/data/people.yml" )
0 commit comments