Abhishek Thakur
commited on
Commit
·
6aa12a9
1
Parent(s):
ad58342
selected submissions
Browse files- competitions/app.py +28 -2
- competitions/templates/index.html +79 -2
competitions/app.py
CHANGED
@@ -52,6 +52,11 @@ class User(BaseModel):
|
|
52 |
user_token: str
|
53 |
|
54 |
|
|
|
|
|
|
|
|
|
|
|
55 |
def run_job_runner():
|
56 |
job_runner = JobRunner(token=HF_TOKEN, competition_info=COMP_INFO, output_path=OUTPUT_PATH)
|
57 |
job_runner.run()
|
@@ -148,8 +153,8 @@ async def my_submissions(request: Request, user: User):
|
|
148 |
}
|
149 |
}
|
150 |
subs = pd.concat([success_subs, failed_subs], axis=0)
|
151 |
-
subs = subs.
|
152 |
-
if len(subs
|
153 |
subs = "You have not made any submissions yet."
|
154 |
failed_subs = ""
|
155 |
submission_text = SUBMISSION_TEXT.format(COMP_INFO.submission_limit)
|
@@ -189,3 +194,24 @@ async def new_submission(
|
|
189 |
except AuthenticationError:
|
190 |
return {"response": "Invalid token"}
|
191 |
return {"response": "Invalid competition type"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
user_token: str
|
53 |
|
54 |
|
55 |
+
class UserSubmissionUpdate(BaseModel):
|
56 |
+
user_token: str
|
57 |
+
submission_ids: str
|
58 |
+
|
59 |
+
|
60 |
def run_job_runner():
|
61 |
job_runner = JobRunner(token=HF_TOKEN, competition_info=COMP_INFO, output_path=OUTPUT_PATH)
|
62 |
job_runner.run()
|
|
|
153 |
}
|
154 |
}
|
155 |
subs = pd.concat([success_subs, failed_subs], axis=0)
|
156 |
+
subs = subs.to_dict(orient="records")
|
157 |
+
if len(subs) == 0:
|
158 |
subs = "You have not made any submissions yet."
|
159 |
failed_subs = ""
|
160 |
submission_text = SUBMISSION_TEXT.format(COMP_INFO.submission_limit)
|
|
|
194 |
except AuthenticationError:
|
195 |
return {"response": "Invalid token"}
|
196 |
return {"response": "Invalid competition type"}
|
197 |
+
|
198 |
+
|
199 |
+
@app.post("/update_selected_submissions", response_class=JSONResponse)
|
200 |
+
def update_selected_submissions(request: Request, user_sub: UserSubmissionUpdate):
|
201 |
+
sub = Submissions(
|
202 |
+
end_date=COMP_INFO.end_date,
|
203 |
+
submission_limit=COMP_INFO.submission_limit,
|
204 |
+
competition_id=COMPETITION_ID,
|
205 |
+
token=HF_TOKEN,
|
206 |
+
competition_type=COMP_INFO.competition_type,
|
207 |
+
hardware=COMP_INFO.hardware,
|
208 |
+
)
|
209 |
+
submission_ids = user_sub.submission_ids.split(",")
|
210 |
+
submission_ids = [s.strip() for s in submission_ids]
|
211 |
+
if len(submission_ids) > COMP_INFO.selection_limit:
|
212 |
+
return {
|
213 |
+
"success": False,
|
214 |
+
"error": f"Please select at most {COMP_INFO.selection_limit} submissions.",
|
215 |
+
}
|
216 |
+
sub.update_selected_submissions(user_token=user_sub.user_token, selected_submission_ids=submission_ids)
|
217 |
+
return {"success": True, "error": ""}
|
competitions/templates/index.html
CHANGED
@@ -133,7 +133,35 @@
|
|
133 |
})
|
134 |
.then(data => {
|
135 |
const contentDiv = document.getElementById('content');
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
articleLoadingSpinner.classList.add('hidden');
|
138 |
})
|
139 |
.catch(error => {
|
@@ -389,7 +417,7 @@
|
|
389 |
(optional)
|
390 |
</label>
|
391 |
<textarea id="submission_comment" name="submission_comment" rows="5"
|
392 |
-
class="p-2.5 w-full text-sm text-gray-900" placeholder=""></textarea>
|
393 |
</div>
|
394 |
<div class="form-actions mt-6">
|
395 |
<button data-modal-hide="submission-modal" type="button"
|
@@ -461,4 +489,53 @@
|
|
461 |
});
|
462 |
</script>
|
463 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
464 |
</html>
|
|
|
133 |
})
|
134 |
.then(data => {
|
135 |
const contentDiv = document.getElementById('content');
|
136 |
+
// console.log(data.response.submissions);
|
137 |
+
// contentDiv.innerHTML = marked.parse(data.response.submission_text) + data.response.submissions;
|
138 |
+
if (data.response.submissions && data.response.submissions.length > 0) {
|
139 |
+
// Start building the table HTML
|
140 |
+
let tableHTML = '<table border="1"><tr><th>Datetime</th><th>Submission ID</th><th>Public Score</th><th>Submission Comment</th><th>Selected</th><th>Status</th></tr>';
|
141 |
+
|
142 |
+
// Iterate over each submission and add it to the table
|
143 |
+
data.response.submissions.forEach(submission => {
|
144 |
+
tableHTML += `<tr>
|
145 |
+
<td>${submission.datetime}</td>
|
146 |
+
<td>${submission.submission_id}</td>
|
147 |
+
<td>${submission.public_score}</td>
|
148 |
+
<td>${submission.submission_comment}</td>
|
149 |
+
<td><input type="checkbox" name="selectedSubmissions" value="${submission.submission_id}" ${submission.selected ? 'checked' : ''}></td>
|
150 |
+
<td>${submission.status}</td>
|
151 |
+
</tr>`;
|
152 |
+
});
|
153 |
+
|
154 |
+
// Close the table HTML and set it as the content
|
155 |
+
tableHTML += '</table>';
|
156 |
+
tableHTML += '<button id="updateSelectedSubmissionsButton" type="button" class="confirm text-white bg-green-600 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 font-medium rounded-lg text-sm inline-flex items-center px-5 py-2.5 text-center me-2">Update Selected Submissions</button>';
|
157 |
+
contentDiv.innerHTML = marked.parse(data.response.submission_text) + tableHTML;
|
158 |
+
document.getElementById('updateSelectedSubmissionsButton').addEventListener('click', function () {
|
159 |
+
updateSelectedSubmissions(userToken);
|
160 |
+
});
|
161 |
+
} else {
|
162 |
+
// Display message if there are no submissions
|
163 |
+
contentDiv.innerHTML = marked.parse(data.response.submission_text) + 'You have not made any submissions yet.';
|
164 |
+
}
|
165 |
articleLoadingSpinner.classList.add('hidden');
|
166 |
})
|
167 |
.catch(error => {
|
|
|
417 |
(optional)
|
418 |
</label>
|
419 |
<textarea id="submission_comment" name="submission_comment" rows="5"
|
420 |
+
class="p-2.5 w-full text-sm text-gray-900" placeholder=" "></textarea>
|
421 |
</div>
|
422 |
<div class="form-actions mt-6">
|
423 |
<button data-modal-hide="submission-modal" type="button"
|
|
|
489 |
});
|
490 |
</script>
|
491 |
|
492 |
+
<script>
|
493 |
+
function updateSelectedSubmissions(userToken) {
|
494 |
+
const selectedSubmissions = document.querySelectorAll('input[name="selectedSubmissions"]:checked');
|
495 |
+
const articleLoadingSpinner = document.getElementById('articleLoadingSpinner');
|
496 |
+
articleLoadingSpinner.classList.remove('hidden');
|
497 |
+
let selectedSubmissionIds = [];
|
498 |
+
selectedSubmissions.forEach((submission) => {
|
499 |
+
selectedSubmissionIds.push(submission.value);
|
500 |
+
});
|
501 |
+
|
502 |
+
const updateEndpoint = '/update_selected_submissions';
|
503 |
+
const requestOptions = {
|
504 |
+
method: 'POST',
|
505 |
+
headers: {
|
506 |
+
'Content-Type': 'application/json',
|
507 |
+
},
|
508 |
+
body: JSON.stringify({
|
509 |
+
"user_token": userToken,
|
510 |
+
"submission_ids": selectedSubmissionIds.join(',')
|
511 |
+
})
|
512 |
+
};
|
513 |
+
|
514 |
+
fetch(updateEndpoint, requestOptions)
|
515 |
+
.then(response => {
|
516 |
+
if (!response.ok) {
|
517 |
+
throw new Error('Network response was not ok');
|
518 |
+
}
|
519 |
+
return response.json();
|
520 |
+
})
|
521 |
+
.then(data => {
|
522 |
+
if (data.success) {
|
523 |
+
// Optionally, display a success message or handle accordingly
|
524 |
+
console.log('Update successful');
|
525 |
+
articleLoadingSpinner.classList.add('hidden');
|
526 |
+
} else {
|
527 |
+
// Handle failure case
|
528 |
+
console.log('Update failed');
|
529 |
+
articleLoadingSpinner.classList.add('hidden');
|
530 |
+
alert(data.error);
|
531 |
+
}
|
532 |
+
// Refresh submissions display
|
533 |
+
fetchAndDisplaySubmissions();
|
534 |
+
})
|
535 |
+
.catch(error => {
|
536 |
+
console.error('There was a problem with the fetch operation for updating:', error);
|
537 |
+
});
|
538 |
+
}
|
539 |
+
</script>
|
540 |
+
|
541 |
</html>
|