File size: 1,721 Bytes
4d3ef13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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