|
1 | 1 | import httpx
|
2 | 2 | from django.conf import settings
|
3 |
| -from .models import GitHubSponsor |
4 |
| - |
5 |
| - |
6 |
| -def sync_github_sponsors(org_name: str): |
7 |
| - """ |
8 |
| - GitHub 스폰서 정보를 동기화하는 함수 |
9 |
| -
|
10 |
| - Args: |
11 |
| - org_name (str): GitHub 조직 이름 (예: pythonkr) |
12 |
| - """ |
13 |
| - if not org_name: |
14 |
| - return |
15 |
| - |
16 |
| - # GitHub GraphQL API 엔드포인트 |
17 |
| - url = "https://api.github.com/graphql" |
18 |
| - |
19 |
| - # GraphQL 쿼리 |
20 |
| - query = """ |
21 |
| - query($org: String!) { |
22 |
| - organization(login: $org) { |
23 |
| - sponsorshipsAsMaintainer(first: 100) { |
24 |
| - nodes { |
25 |
| - sponsorEntity { |
26 |
| - ... on User { |
27 |
| - login |
28 |
| - name |
29 |
| - avatarUrl |
30 |
| - } |
31 |
| - } |
32 |
| - tier { |
33 |
| - name |
34 |
| - monthlyPriceInDollars |
35 |
| - } |
36 |
| - isActive |
37 |
| - } |
38 |
| - } |
39 |
| - } |
40 |
| - } |
41 |
| - """ |
42 |
| - |
43 |
| - # GitHub API 호출 |
44 |
| - headers = { |
45 |
| - "Authorization": f"Bearer {settings.GITHUB_TOKEN}", |
46 |
| - "Content-Type": "application/json", |
47 |
| - } |
48 |
| - |
49 |
| - variables = {"org": org_name} |
50 |
| - |
51 |
| - try: |
52 |
| - response = httpx.post( |
53 |
| - url, json={"query": query, "variables": variables}, headers=headers |
54 |
| - ) |
55 |
| - if response.status_code == 200: |
56 |
| - data = response.json() |
57 |
| - sponsorships = ( |
58 |
| - data.get("data", {}) |
59 |
| - .get("organization", {}) |
60 |
| - .get("sponsorshipsAsMaintainer", {}) |
61 |
| - .get("nodes", []) |
62 |
| - ) |
63 |
| - |
64 |
| - # 기존 스폰서 비활성화 |
65 |
| - GitHubSponsor.objects.filter(is_active=True).update(is_active=False) |
66 |
| - |
67 |
| - # 새로운 스폰서 정보 저장 |
68 |
| - for sponsorship in sponsorships: |
69 |
| - sponsor = sponsorship.get("sponsorEntity", {}) |
70 |
| - tier = sponsorship.get("tier", {}) |
71 |
| - |
72 |
| - GitHubSponsor.objects.update_or_create( |
73 |
| - login=sponsor.get("login"), |
74 |
| - defaults={ |
75 |
| - "name": sponsor.get("name"), |
76 |
| - "avatar_url": sponsor.get("avatarUrl"), |
77 |
| - "tier_name": tier.get("name"), |
78 |
| - "monthly_amount": tier.get("monthlyPriceInDollars"), |
79 |
| - "is_active": sponsorship.get("isActive", True), |
80 |
| - }, |
81 |
| - ) |
82 |
| - |
83 |
| - return True |
84 |
| - |
85 |
| - except Exception as e: |
86 |
| - print(f"GitHub 스폰서 동기화 중 오류 발생: {str(e)}") |
87 |
| - return False |
| 3 | +#from .models import GitHubSponsor |
| 4 | +# |
| 5 | +# |
| 6 | +#def sync_github_sponsors(org_name: str): |
| 7 | +# """ |
| 8 | +# GitHub 스폰서 정보를 동기화하는 함수 |
| 9 | +# |
| 10 | +# Args: |
| 11 | +# org_name (str): GitHub 조직 이름 (예: pythonkr) |
| 12 | +# """ |
| 13 | +# if not org_name: |
| 14 | +# return |
| 15 | +# |
| 16 | +# # GitHub GraphQL API 엔드포인트 |
| 17 | +# url = "https://api.github.com/graphql" |
| 18 | +# |
| 19 | +# # GraphQL 쿼리 |
| 20 | +# query = """ |
| 21 | +# query($org: String!) { |
| 22 | +# organization(login: $org) { |
| 23 | +# sponsorshipsAsMaintainer(first: 100) { |
| 24 | +# nodes { |
| 25 | +# sponsorEntity { |
| 26 | +# ... on User { |
| 27 | +# login |
| 28 | +# name |
| 29 | +# avatarUrl |
| 30 | +# } |
| 31 | +# } |
| 32 | +# tier { |
| 33 | +# name |
| 34 | +# monthlyPriceInDollars |
| 35 | +# } |
| 36 | +# isActive |
| 37 | +# } |
| 38 | +# } |
| 39 | +# } |
| 40 | +# } |
| 41 | +# """ |
| 42 | +# |
| 43 | +# # GitHub API 호출 |
| 44 | +# headers = { |
| 45 | +# "Authorization": f"Bearer {settings.GITHUB_TOKEN}", |
| 46 | +# "Content-Type": "application/json", |
| 47 | +# } |
| 48 | +# |
| 49 | +# variables = {"org": org_name} |
| 50 | +# |
| 51 | +# try: |
| 52 | +# response = httpx.post( |
| 53 | +# url, json={"query": query, "variables": variables}, headers=headers |
| 54 | +# ) |
| 55 | +# if response.status_code == 200: |
| 56 | +# data = response.json() |
| 57 | +# sponsorships = ( |
| 58 | +# data.get("data", {}) |
| 59 | +# .get("organization", {}) |
| 60 | +# .get("sponsorshipsAsMaintainer", {}) |
| 61 | +# .get("nodes", []) |
| 62 | +# ) |
| 63 | +# |
| 64 | +# # 기존 스폰서 비활성화 |
| 65 | +# GitHubSponsor.objects.filter(is_active=True).update(is_active=False) |
| 66 | +# |
| 67 | +# # 새로운 스폰서 정보 저장 |
| 68 | +# for sponsorship in sponsorships: |
| 69 | +# sponsor = sponsorship.get("sponsorEntity", {}) |
| 70 | +# tier = sponsorship.get("tier", {}) |
| 71 | +# |
| 72 | +# GitHubSponsor.objects.update_or_create( |
| 73 | +# login=sponsor.get("login"), |
| 74 | +# defaults={ |
| 75 | +# "name": sponsor.get("name"), |
| 76 | +# "avatar_url": sponsor.get("avatarUrl"), |
| 77 | +# "tier_name": tier.get("name"), |
| 78 | +# "monthly_amount": tier.get("monthlyPriceInDollars"), |
| 79 | +# "is_active": sponsorship.get("isActive", True), |
| 80 | +# }, |
| 81 | +# ) |
| 82 | +# |
| 83 | +# return True |
| 84 | +# |
| 85 | +# except Exception as e: |
| 86 | +# print(f"GitHub 스폰서 동기화 중 오류 발생: {str(e)}") |
| 87 | +# return False |
0 commit comments