File size: 4,983 Bytes
2609fac
 
 
 
 
 
8cde930
2609fac
8cde930
2609fac
 
 
 
 
 
8cde930
 
 
 
2609fac
 
 
 
 
 
 
 
 
 
 
 
 
8cde930
 
2609fac
 
 
 
 
 
8cde930
 
2609fac
8cde930
 
1156b6f
2609fac
 
 
 
 
 
8cde930
2609fac
 
 
 
3eb9275
2609fac
 
61c6ca7
2609fac
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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('ГОТОВО')
    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-'],
                              created_at=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('**Войдите или зарегистрируйтесь**')