From 0ff56ed9d210d10499a864b77b7d05046c673b95 Mon Sep 17 00:00:00 2001 From: a2nr Date: Fri, 1 May 2026 15:32:55 +0700 Subject: [PATCH] bug fix : leak content python_expected_output --- frontend/src/lib/services/evaluators.ts | 8 ++++++-- frontend/src/lib/types/lesson.ts | 1 + frontend/src/routes/lesson/[slug]/+page.svelte | 2 +- frontend/src/routes/lesson/[slug]/CodeTab.svelte | 4 ++-- frontend/src/routes/lesson/[slug]/lesson.css | 3 +-- routes/lessons.py | 2 ++ services/lesson_service.py | 4 ++++ 7 files changed, 17 insertions(+), 7 deletions(-) diff --git a/frontend/src/lib/services/evaluators.ts b/frontend/src/lib/services/evaluators.ts index d6b3823..d182ceb 100644 --- a/frontend/src/lib/services/evaluators.ts +++ b/frontend/src/lib/services/evaluators.ts @@ -61,12 +61,16 @@ export function processLanguageEvaluation( pythonCode: string, data: LessonContent ): { isCorrect: boolean } { - if (!data.expected_output) return { isCorrect: true }; + if (!data.expected_output && !data.expected_output_python) return { isCorrect: true }; const currentCCode = (currentLanguage === 'c') ? code : cCode; const currentPythonCode = (currentLanguage === 'python') ? code : pythonCode; const mergedCode = currentCCode + '\n' + currentPythonCode; - const isCorrect = compileOutput.trim() === data.expected_output.trim() && checkKeyText(mergedCode, data.key_text ?? ''); + const expected = (lang === 'python' && data.expected_output_python) + ? data.expected_output_python + : data.expected_output; + + const isCorrect = compileOutput.trim() === expected.trim() && checkKeyText(mergedCode, data.key_text ?? ''); return { isCorrect }; } diff --git a/frontend/src/lib/types/lesson.ts b/frontend/src/lib/types/lesson.ts index 24d4ce3..822dc7a 100644 --- a/frontend/src/lib/types/lesson.ts +++ b/frontend/src/lib/types/lesson.ts @@ -9,6 +9,7 @@ export interface LessonContent { lesson_content: string; exercise_content: string; expected_output: string; + expected_output_python: string; expected_circuit_output: string; key_text_circuit: string; lesson_info: string; diff --git a/frontend/src/routes/lesson/[slug]/+page.svelte b/frontend/src/routes/lesson/[slug]/+page.svelte index c791b82..ee82f9d 100644 --- a/frontend/src/routes/lesson/[slug]/+page.svelte +++ b/frontend/src/routes/lesson/[slug]/+page.svelte @@ -384,7 +384,7 @@ out.output = res.output; out.success = true; - if (data.expected_output) { + if (data.expected_output || data.expected_output_python) { const { isCorrect } = processLanguageEvaluation(res.output, code, lang, currentLanguage, cCode, pythonCode, data); if (isCorrect) { if (lang === 'c') cPassed = true; diff --git a/frontend/src/routes/lesson/[slug]/CodeTab.svelte b/frontend/src/routes/lesson/[slug]/CodeTab.svelte index d7d73b9..062ff83 100644 --- a/frontend/src/routes/lesson/[slug]/CodeTab.svelte +++ b/frontend/src/routes/lesson/[slug]/CodeTab.svelte @@ -57,9 +57,9 @@ {/key} -{#if data.expected_output} +{#if (currentLanguage === 'python' ? (data.expected_output_python || data.expected_output) : data.expected_output)}
Expected Output -
{data.expected_output}
+
{currentLanguage === 'python' ? (data.expected_output_python || data.expected_output) : data.expected_output}
{/if} diff --git a/frontend/src/routes/lesson/[slug]/lesson.css b/frontend/src/routes/lesson/[slug]/lesson.css index 7a726fc..e4a6654 100644 --- a/frontend/src/routes/lesson/[slug]/lesson.css +++ b/frontend/src/routes/lesson/[slug]/lesson.css @@ -229,8 +229,7 @@ height: 60vh; } .editor-area.mobile-full { - height: 100vh; - top: 0; + height: 100dvh; border-radius: 0; max-height: none; } diff --git a/routes/lessons.py b/routes/lessons.py index e923265..1dc5fc6 100644 --- a/routes/lessons.py +++ b/routes/lessons.py @@ -50,6 +50,7 @@ def api_lesson(filename): lesson_html = parsed_data['lesson_html'] exercise_html = parsed_data['exercise_html'] expected_output = parsed_data['expected_output'] + expected_output_python = parsed_data.get('expected_output_python', '') expected_circuit_output = parsed_data.get('expected_circuit_output', '') key_text_circuit = parsed_data.get('key_text_circuit', '') lesson_info = parsed_data['lesson_info'] @@ -120,6 +121,7 @@ def api_lesson(filename): 'lesson_content': lesson_html, 'exercise_content': exercise_html, 'expected_output': expected_output, + 'expected_output_python': expected_output_python, 'expected_circuit_output': expected_circuit_output, 'lesson_info': lesson_info, 'initial_code': initial_code, diff --git a/services/lesson_service.py b/services/lesson_service.py index fa66a74..ee02ce1 100644 --- a/services/lesson_service.py +++ b/services/lesson_service.py @@ -294,6 +294,9 @@ def render_markdown_content(file_path): expected_output, lesson_content = _extract_section( lesson_content, '---EXPECTED_OUTPUT---', '---END_EXPECTED_OUTPUT---') + expected_output_python, lesson_content = _extract_section( + lesson_content, '---EXPECTED_OUTPUT_PYTHON---', '---END_EXPECTED_OUTPUT_PYTHON---') + expected_circuit_output, lesson_content = _extract_section( lesson_content, '---EXPECTED_CIRCUIT_OUTPUT---', '---END_EXPECTED_CIRCUIT_OUTPUT---') @@ -388,6 +391,7 @@ def render_markdown_content(file_path): 'lesson_html': lesson_html, 'exercise_html': exercise_html, 'expected_output': expected_output, + 'expected_output_python': expected_output_python, 'expected_circuit_output': expected_circuit_output, 'lesson_info': lesson_info_html, 'initial_code': initial_code,