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