Skip to content

Commit 3ce5b64

Browse files
authored
[skip ci] Update fetch-sponsors.py
1 parent 7405573 commit 3ce5b64

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

scripts/fetch-sponsors.py

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import requests
22
import json
33
import os
4+
from collections import defaultdict
45

56
GRAPHQL_URL = "https://api.github.com/graphql"
67

78
GRAPHQL_QUERY = """
8-
query {
9-
organization(login: "MMRLApp") {
9+
query($org: String!) {
10+
organization(login: $org) {
1011
sponsorshipsAsMaintainer(activeOnly: false, first: 100) {
1112
nodes {
1213
sponsorEntity {
@@ -30,41 +31,55 @@
3031
}
3132
"""
3233

33-
def fetch_sponsors(github_token):
34+
def fetch_sponsors(github_token, org):
3435
headers = {
3536
"Authorization": f"Bearer {github_token}",
3637
"Content-Type": "application/json"
3738
}
38-
39-
response = requests.post(GRAPHQL_URL, json={"query": GRAPHQL_QUERY}, headers=headers)
39+
40+
response = requests.post(
41+
GRAPHQL_URL,
42+
json={"query": GRAPHQL_QUERY, "variables": {"org": org}},
43+
headers=headers
44+
)
4045
response.raise_for_status()
41-
46+
4247
return response.json()
4348

44-
def save_sponsors_to_file(sponsors_data, filename="meta/sponsors.json"):
45-
print(sponsors_data)
49+
def merge_sponsors(sponsors_list):
50+
sponsors_dict = defaultdict(lambda: {"avatarUrl": "", "url": "", "amount": 0})
4651

47-
sponsors = [
48-
{
49-
"login": node["sponsorEntity"]["login"],
50-
"avatarUrl": node["sponsorEntity"]["avatarUrl"],
51-
"url": node["sponsorEntity"]["url"],
52-
"amount": node["tier"]["monthlyPriceInCents"]
53-
}
54-
for node in sponsors_data["data"]["organization"]["sponsorshipsAsMaintainer"]["nodes"]
55-
]
52+
for sponsor in sponsors_list:
53+
login = sponsor["login"]
54+
sponsors_dict[login]["avatarUrl"] = sponsor["avatarUrl"]
55+
sponsors_dict[login]["url"] = sponsor["url"]
56+
sponsors_dict[login]["amount"] += sponsor["amount"]
5657

57-
os.makedirs(os.path.dirname(filename), exist_ok=True)
58-
with open(filename, "w") as f:
59-
json.dump(sponsors, f, indent=2)
58+
return list({"login": k, **v} for k, v in sponsors_dict.items())
6059

6160
def main():
6261
github_token = os.getenv("SPONSORS_TOKEN")
6362
if not github_token:
6463
raise ValueError("GitHub token is not set in environment variables")
6564

66-
sponsors_data = fetch_sponsors(github_token)
67-
save_sponsors_to_file(sponsors_data)
65+
orgs = ["MMRLApp", "DerGoogler"]
66+
all_sponsors = []
67+
68+
for org in orgs:
69+
sponsors_data = fetch_sponsors(github_token, org)
70+
sponsors = [
71+
{
72+
"login": node["sponsorEntity"]["login"],
73+
"avatarUrl": node["sponsorEntity"]["avatarUrl"],
74+
"url": node["sponsorEntity"]["url"],
75+
"amount": node["tier"]["monthlyPriceInCents"]
76+
}
77+
for node in sponsors_data.get("data", {}).get("organization", {}).get("sponsorshipsAsMaintainer", {}).get("nodes", [])
78+
]
79+
all_sponsors.extend(sponsors)
80+
81+
merged_sponsors = merge_sponsors(all_sponsors)
82+
print(json.dumps(merged_sponsors, indent=2))
6883

6984
if __name__ == "__main__":
7085
main()

0 commit comments

Comments
 (0)