import gradio as gr import os import json import ast import requests from difflib import Differ from jinja2 import Template, Environment def update_question(selected_question, data): if data is None or not data: return "", "", "", "", "", "" selected_data = next(d for d in data if d["question"] == selected_question) function_template = selected_data["question_template"].replace("\\n", "\n") # print(selected_data) return ( selected_data["solution"], selected_data["question"], selected_data["testcases"], function_template, ) def run_code(code_snippet, test_cases, input_type="stdin"): actual_output_messages = [] expected_output_messages = [] if input_type == "code": code_snippet += "\nimport sys; exec(sys.stdin.read())" # print(code_snippet) for test_case in test_cases: expected_output = test_case["output"] payload = { "language": "python", "version": "3.10.0", "files": [{"name": "script.py", "content": code_snippet}], "stdin": test_case["input"], } response = requests.post("https://emkc.org/api/v2/piston/execute", json=payload) execution_result = response.json() actual_output = ( execution_result["run"]["output"].strip() if "run" in execution_result and "output" in execution_result["run"] else "" ) actual_output_messages.append(actual_output) expected_output_messages.append(expected_output) output_json = { "actual_output": actual_output_messages, "expected_output": expected_output_messages, } return output_json