|
8 | 8 |
|
9 | 9 | from urllib.parse import urlparse |
10 | 10 |
|
11 | | -from django.conf import settings |
12 | | - |
13 | | -import requests |
| 11 | +from workflow.integrations import BaseIntegration |
14 | 12 |
|
15 | 13 | GITHUB_API_URL = "https://api.github.com" |
16 | | -DEJACODE_SITE_URL = settings.SITE_URL.rstrip("/") |
17 | 14 |
|
18 | 15 |
|
19 | | -class GitHubIntegration: |
| 16 | +class GitHubIntegration(BaseIntegration): |
20 | 17 | """ |
21 | 18 | A class for managing GitHub issue creation, updates, and comments |
22 | 19 | from DejaCode requests. |
23 | 20 | """ |
24 | 21 |
|
25 | 22 | api_url = GITHUB_API_URL |
26 | | - default_timeout = 10 |
27 | | - |
28 | | - def __init__(self, dataspace): |
29 | | - if not dataspace: |
30 | | - raise ValueError("Dataspace must be provided.") |
31 | | - self.dataspace = dataspace |
32 | | - self.session = self.get_session() |
33 | | - |
34 | | - def get_session(self): |
35 | | - session = requests.Session() |
36 | | - session.headers.update(self.get_headers()) |
37 | | - return session |
38 | 23 |
|
39 | 24 | def get_headers(self): |
40 | 25 | github_token = self.dataspace.get_configuration(field_name="github_token") |
@@ -137,40 +122,3 @@ def extract_github_repo_path(url): |
137 | 122 | raise ValueError("Incomplete GitHub repository path.") |
138 | 123 |
|
139 | 124 | return f"{path_parts[0]}/{path_parts[1]}" |
140 | | - |
141 | | - @staticmethod |
142 | | - def make_issue_title(request): |
143 | | - return f"[DEJACODE] {request.title}" |
144 | | - |
145 | | - @staticmethod |
146 | | - def make_issue_body(request): |
147 | | - request_url = f"{DEJACODE_SITE_URL}{request.get_absolute_url()}" |
148 | | - label_fields = [ |
149 | | - ("📝 Request Template", request.request_template), |
150 | | - ("📦 Product Context", request.product_context), |
151 | | - ("📌 Applies To", request.content_object), |
152 | | - ("🙋 Submitted By", request.requester), |
153 | | - ("👤 Assigned To", request.assignee), |
154 | | - ("🚨 Priority", request.priority), |
155 | | - ("🗒️ Notes", request.notes), |
156 | | - ("🔗️ DejaCode URL", request_url), |
157 | | - ] |
158 | | - |
159 | | - lines = [] |
160 | | - for label, value in label_fields: |
161 | | - if value: |
162 | | - lines.append(f"### {label}\n{value}") |
163 | | - |
164 | | - lines.append("----") |
165 | | - |
166 | | - for question in request.get_serialized_data_as_list(): |
167 | | - label = question.get("label") |
168 | | - value = question.get("value") |
169 | | - input_type = question.get("input_type") |
170 | | - |
171 | | - if input_type == "BooleanField": |
172 | | - value = "Yes" if str(value).lower() in ("1", "true", "yes") else "No" |
173 | | - |
174 | | - lines.append(f"### {label}\n{value}") |
175 | | - |
176 | | - return "\n\n".join(lines) |
0 commit comments