PythonQuestionMaker / template.py
Saranath07
first commit
7ebd50e
import gradio as gr
import os
import json
import ast
import requests
from difflib import Differ
from jinja2 import Template, Environment
# output_json = {"actual_output": actual_output_messages, "expected_output":expected_output_messages }
# input,
def make_template_testcases(selected_question, data):
from run import update_question
solution, question_display, testcases, code_input = update_question(
selected_question, data
)
testcases_template = Template(
"""
{% for testcase in testcases %}
### Input {{loop.index}}
```
{{testcase.input}}
```
### Expected Output {{loop.index}}
```
{{testcase.output}}
```
{% endfor %}
"""
)
return (
solution,
question_display,
testcases_template.render(testcases=testcases),
code_input,
)
def make_template_outputs(code_snippet, selected_question, test_data):
from run import run_code
selected_data = next(
(item for item in test_data if item["question"] == selected_question), None
)
test_cases = selected_data["testcases"]
input_type = selected_data["input_type"]
output_json = run_code(code_snippet, test_cases, input_type)
def zip_filter(a, b):
return zip(a, b)
env = Environment()
env.filters["zip"] = zip_filter
output_template = env.from_string(
"""
{% set list1 = output_json['actual_output'] %}
{% set list2 = output_json['expected_output'] %}
{% for item1, item2 in list1 | zip(list2) %}
### Actual Output {{loop.index}}
{% if item1 == item2 %}
Passed βœ…
{% else %}
Expected: {{ item2 }}, but got: {{ item1 }} ❌
{% endif %}
{% endfor %}
"""
)
return output_template.render(output_json=output_json)