import logging
import subprocess
import sys
-from collections import Counter
+from collections import Counter, defaultdict
from datetime import datetime, timedelta, timezone
from pathlib import Path
-from typing import Container, Dict, List, Optional, Set
+from typing import Container, DefaultDict, Dict, List, Optional, Set
import httpx
import yaml
return contributors, commentors, reviewers, authors
-def get_individual_sponsors(settings: Settings, max_individual_sponsor: int = 5):
+def get_individual_sponsors(settings: Settings):
nodes: List[SponsorshipAsMaintainerNode] = []
edges = get_graphql_sponsor_edges(settings=settings)
last_edge = edges[-1]
edges = get_graphql_sponsor_edges(settings=settings, after=last_edge.cursor)
- entities: Dict[str, SponsorEntity] = {}
+ tiers: DefaultDict[float, Dict[str, SponsorEntity]] = defaultdict(dict)
for node in nodes:
- if node.tier.monthlyPriceInDollars > max_individual_sponsor:
- continue
- entities[node.sponsorEntity.login] = node.sponsorEntity
- return entities
+ tiers[node.tier.monthlyPriceInDollars][
+ node.sponsorEntity.login
+ ] = node.sponsorEntity
+ return tiers
def get_top_users(
skip_users=skip_users,
)
- sponsors_by_login = get_individual_sponsors(settings=settings)
- sponsors = []
- for login, sponsor in sponsors_by_login.items():
- sponsors.append(
+ tiers = get_individual_sponsors(settings=settings)
+ sponsors_50 = []
+ for login, sponsor in tiers[50].items():
+ sponsors_50.append(
{"login": login, "avatarUrl": sponsor.avatarUrl, "url": sponsor.url}
)
+ keys = list(tiers.keys())
+ keys.sort(reverse=True)
+ sponsors = []
+ for key in keys:
+ if key >= 50:
+ continue
+ for login, sponsor in tiers[key].items():
+ sponsors.append(
+ {"login": login, "avatarUrl": sponsor.avatarUrl, "url": sponsor.url}
+ )
people = {
"maintainers": maintainers,
"last_month_active": last_month_active,
"top_contributors": top_contributors,
"top_reviewers": top_reviewers,
+ "sponsors_50": sponsors_50,
"sponsors": sponsors,
}
people_path = Path("./docs/en/data/people.yml")