Spaces:
Sleeping
Sleeping
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('**Войдите или зарегистрируйтесь**') | |