Last active
July 27, 2025 10:46
-
-
Save laiso/3c6ce0d02da9706e44e19600e3fa9566 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import csv | |
import json | |
import sys | |
import ast | |
def find_task_by_id(filename, task_id): | |
with open(filename, 'r', encoding='utf-8') as file: | |
reader = csv.DictReader(file) | |
fieldnames = reader.fieldnames | |
id_columns = [col for col in fieldnames if 'id' in col.lower()] | |
id_column = id_columns[0] if id_columns else fieldnames[0] | |
for row in reader: | |
if row.get(id_column) == task_id: | |
return row | |
return None | |
def list_all_tasks(filename): | |
with open(filename, 'r', encoding='utf-8') as file: | |
reader = csv.DictReader(file) | |
fieldnames = reader.fieldnames | |
id_columns = [col for col in fieldnames if 'id' in col.lower()] | |
id_column = id_columns[0] if id_columns else fieldnames[0] | |
for i, row in enumerate(reader, 1): | |
print(f" {row.get(id_column, 'N/A')}") | |
if i >= 10: | |
print(" ...") | |
break | |
def format_quiz_output(task_data): | |
manager_data_str = task_data.get('manager_data', '{}') | |
manager_data = ast.literal_eval(manager_data_str) | |
title = task_data.get('title', 'No Title') | |
description = task_data.get('description', 'No Description') | |
print("=" * 80) | |
print("Issue") | |
print("=" * 80) | |
print(f"Question: {title}") | |
print() | |
print("Details of the question:") | |
print(description) | |
print() | |
# メタ情報を表示 | |
if task_data.get('manager_commit'): | |
print(f"manager_commit: {task_data['manager_commit']}") | |
print() | |
print("Please select the most appropriate fix from the proposals below.") | |
print() | |
print("-" * 80) | |
print("Proposals:") | |
print("-" * 80) | |
proposals = manager_data.get('game', {}).get('all_formal_proposals', []) | |
for i, proposal in enumerate(proposals): | |
print(f"Proposal {i}:") | |
print(f"Content: {proposal.get('content', 'No Content')}") | |
print(f"Explanation: {proposal.get('explanation', 'No Explanation')}") | |
print() | |
correct_proposal = manager_data.get('game', {}).get('correct_proposal', {}) | |
correct_id = correct_proposal.get('id', 'Unknown') | |
correct_explanation = correct_proposal.get('explanation', 'No Explanation') | |
print("-" * 80) | |
print("Answer:") | |
print("-" * 80) | |
print(f"Correct ID: {correct_id}") | |
print(f"Explanation of the correct answer: {correct_explanation}") | |
print() | |
if proposals and isinstance(correct_id, int) and 0 <= correct_id < len(proposals): | |
correct_proposal_detail = proposals[correct_id] | |
print("Details of the correct proposal:") | |
print(f"Content: {correct_proposal_detail.get('content', 'No Content')}") | |
print(f"Explanation: {correct_proposal_detail.get('explanation', 'No Explanation')}") | |
print("=" * 80) | |
def load_json_task(filename): | |
with open(filename, 'r', encoding='utf-8') as file: | |
return json.load(file) | |
if __name__ == "__main__": | |
if len(sys.argv) < 2: | |
print("Usage: python get_task.py <filename> [task_id]") | |
print(" If you omit task_id, a list of available task IDs will be shown.") | |
print(" If the file is a JSON file, it will be output in Issue format directly.") | |
sys.exit(1) | |
filename = sys.argv[1] | |
if filename.endswith('.json'): | |
result = load_json_task(filename) | |
if result: | |
format_quiz_output(result) | |
elif len(sys.argv) > 2: | |
task_id = sys.argv[2] | |
result = find_task_by_id(filename, task_id) | |
if result: | |
format_quiz_output(result) | |
else: | |
list_all_tasks(filename) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment