spanish-task-generator / pages /4_📝_Онлайн-тест.py
a-v-bely
Update interface
8cde930
raw
history blame
No virus
4.98 kB
import datetime
import pandas as pd
import streamlit as st
from utilities_database.user_database_utils import save_data_in_database
from utilities_database.user_database_widgets import user_save_text_table
st.set_page_config(page_title='Онлайн-тест', layout="wide", page_icon=':es:', initial_sidebar_state='collapsed')
if st.session_state.get('-ONLINE_TEST_READY-') and st.session_state.get('-LOGGED_IN_BOOL-'):
INSTRUCTION = st.expander(label='**ИНСТРУКЦИЯ**', expanded=False)
INSTRUCTION.markdown(
'Уважаемые пользователи, предлагаем Вам заполнить опросник по оценке качества созданных заданий. '
'\n\nНиже находится анкета с заданиями в таблице.'
'\n\n- В **первом столбце** приводится ответ - слово, удаленное из оригинального текста.'
'\n\n- Отметьте во **втором столбце**, уместно ли создавать задание с данным словом.'
'\n\n- В **третьем столбце** приведены подобранные программой дистракторы.'
'\n\n- Введите в **четвертый столбец** дистракторы (целиком или букву), которые, по Вашему мнению,'
' **:red[не уместны]**. '
'\n\n**:green[Уместными дистракторами]** мы предлагаем считать те, которые одновременно удовлетворяют'
' следующим условиям в рамках языкового уровня, для которого они созданы:'
'\n\n1. не слишком очевидно являются неправильными вариантами (*варить суп/стол*);'
'\n\n2. и при этом не могут быть полноценной заменой удаленного слова (*варить суп/кашу*)'
)
result = st.session_state.get('RESULT')
if result is None:
st.error('Не можем ничего загрузить! Вы ничего не просили!')
st.stop()
tasks = result['TASKS_ONLY']
answers = result['KEYS_ONLY_RAW']
len_answers = len(answers)
st.header('Онлайн-тест')
ONLINE_TEST = st.form('Онлайн тест')
ONLINE_TEST.write(result['TEXT_WITH_GAPS'].replace('_', '\_'))
BAD_DISTRACTORS_AND_ANSWERS_temp = ONLINE_TEST.data_editor(
pd.DataFrame([{"Задание №": i + 1,
"Ответ": [answers[i][1]],
"Задание уместно": False,
"Дистракторы": tasks[i][1],
"Неуместные дистракторы": ''}
for i in range(len(tasks))]),
num_rows="fixed",
height=40 * len_answers,
hide_index=True,
use_container_width=True)
COMMENTS = ONLINE_TEST.text_area(label='**Прокомментировать**',
placeholder='Напишите комментарий')
SUBMIT = ONLINE_TEST.form_submit_button('READY')
if SUBMIT:
points = test_mark = 'Teacher'
appropriate_tasks = BAD_DISTRACTORS_AND_ANSWERS_temp["Задание уместно"].values.tolist()
inappropriate_distractors = BAD_DISTRACTORS_AND_ANSWERS_temp["Неуместные дистракторы"].values.tolist()
RETURN_TEST_DATA = [{'ANSWER': answers[i],
'APPROPRIATE_TASK': appropriate_tasks[i],
'INAPPROPRIATE_DISTRACTORS': inappropriate_distractors[i]} for i in range(len_answers)]
save_data_in_database(user_task_database=user_save_text_table,
save_type='online_test',
save_name=st.session_state['-UPLOAD_CLOUD_FILE_NAME-'],
cefr_level=st.session_state['-LOADED_CEFR_LEVEL-'],
time_stamp=str(datetime.datetime.now())[:-7],
creator_name=st.session_state.get('-USER_NAME-'),
test_taker_name=st.session_state.get('-USER_NAME-'),
generated_result=result,
test_taker_answers=RETURN_TEST_DATA,
test_taker_result={'Баллов': points, 'Всего': len_answers, 'Оценка': test_mark},
comments=COMMENTS)
elif st.session_state.get('-LOGGED_IN_BOOL-'):
st.warning('**Не можем ничего загрузить! Вы ничего не просили!**')
else:
st.warning('**Войдите или зарегистрируйтесь**')