|
| 1 | +import requests |
| 2 | +import os |
| 3 | + |
1 | 4 | from .config import load_cache |
2 | 5 |
|
3 | 6 | _tasks = None |
@@ -81,12 +84,49 @@ def beginner_tasks(tasks): |
81 | 84 |
|
82 | 85 | def strip_mentors(tasks): |
83 | 86 | for task in tasks.values(): |
84 | | - del task['mentors'] |
| 87 | + if task.__contains__('mentors'): |
| 88 | + del task['mentors'] |
85 | 89 |
|
86 | 90 |
|
87 | 91 | def cleanse_tasks(tasks): |
| 92 | + tokens = { |
| 93 | + 'GH_TOKEN': os.environ.get('GH_TOKEN'), |
| 94 | + } |
| 95 | + |
| 96 | + for task in tasks.values(): |
| 97 | + if task['max_instances'] == 1 \ |
| 98 | + and str(task['external_url']).__contains__('issues/'): |
| 99 | + task['state'] = get_task_state(task['external_url'], tokens) |
| 100 | + |
88 | 101 | cleansed_tasks = published_tasks(tasks) |
89 | 102 |
|
90 | 103 | strip_mentors(tasks) |
91 | 104 |
|
92 | 105 | return cleansed_tasks |
| 106 | + |
| 107 | + |
| 108 | +def get_task_state(task_url, tokens): |
| 109 | + if task_url.__contains__('github'): |
| 110 | + task_url = task_url.replace('github.com', 'api.github.com/repos') |
| 111 | + headers = {'Authorization': 'token {}'.format(tokens['GH_TOKEN'])} |
| 112 | + else: |
| 113 | + issue_id = task_url.split('issues/')[1] |
| 114 | + project_id = ((task_url.split('https://gitlab.com/') |
| 115 | + [1]).split('/issues')[0]).replace('/', '%2F') |
| 116 | + task_url = 'https://gitlab.com/api/v4/projects/{}/issues/{}'.format( |
| 117 | + project_id, issue_id) |
| 118 | + headers = {} |
| 119 | + |
| 120 | + if tokens['GH_TOKEN']: |
| 121 | + task_data = requests.get(task_url, headers=headers).json() |
| 122 | + else: |
| 123 | + task_data = requests.get(task_url).json() |
| 124 | + |
| 125 | + if task_data['state'] == 'closed': |
| 126 | + task_state = 'COMPLETED' |
| 127 | + elif task_data['state'] == 'open' and len(task_data['assignees']) > 0: |
| 128 | + task_state = 'CLAIMED' |
| 129 | + else: |
| 130 | + task_state = 'AVAILABLE' |
| 131 | + |
| 132 | + return task_state |
0 commit comments