Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

361_fix_training_greeting_ui #378

Merged
merged 29 commits into from
Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
53e629c
training_greeting_ui: fixed
severus2293 Jun 28, 2023
537580c
definition_structure: refactoring
severus2293 Jul 5, 2023
ae8b6d6
Update criterion.py
severus2293 Jul 5, 2023
31a8fc6
Update criterion.py
severus2293 Jul 5, 2023
ca6c1d0
Update critetion.py
severus2293 Jul 5, 2023
3afee4c
Update critetion.py
severus2293 Jul 5, 2023
c8f19ec
Update critetion.py
severus2293 Jul 5, 2023
928a063
Update criterion.py
severus2293 Jul 5, 2023
aa1c6ec
Update criterion.py
severus2293 Jul 5, 2023
4d43496
Update criterion.py
severus2293 Jul 5, 2023
ad6e3a2
Update criterion.py
severus2293 Jul 5, 2023
aa989c0
Update criterion.py
severus2293 Jul 5, 2023
57b042d
Update criterion_pack_base.py
severus2293 Jul 5, 2023
347ecfb
Update training_greeting.js
severus2293 Jul 5, 2023
a47cb5e
Update criterion.py
severus2293 Jul 10, 2023
4f2a3be
Update criterion.py
severus2293 Jul 10, 2023
2ba9eda
Update critetion.py
severus2293 Jul 10, 2023
a71cc23
Update criterion.py
severus2293 Jul 10, 2023
d27524f
Update criterion.py
severus2293 Jul 10, 2023
22d41b5
Update critetion.py
severus2293 Jul 10, 2023
0ef7f9f
Update critetion.py
severus2293 Jul 10, 2023
c68c1b7
Update critetion.py
severus2293 Jul 10, 2023
9084b56
Update criterion.py
severus2293 Jul 10, 2023
e3c2796
Update criterion.py
severus2293 Jul 10, 2023
fbb2cc3
Update criterion.py
severus2293 Jul 10, 2023
067940d
Update criterion.py
severus2293 Jul 10, 2023
323b823
Update criterion.py
severus2293 Jul 10, 2023
05434d3
Update criterion.py
severus2293 Jul 10, 2023
93c9f57
Update trainings.py
severus2293 Jul 10, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions app/criteria/fillers_number/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,13 @@ def __init__(self, parameters, dependent_criteria, name=''):

@property
def description(self):
return (t('Критерий: {},\n') +
t('описание: проверяет, что в речи нет слов-паразитов, используются слова из списка {},\n') +
t('оценка: 1, если слов-паразитов не больше {}, иначе 0.\n')).format(
self.name,
self.parameters['fillers'],
self.parameters['maximum_fillers_number'],
)
return {
"Критерий": t(self.name),
'Описание':t('проверяет, что в речи нет слов-паразитов, используются слова из списка {}').format(self.parameters['fillers']),
'Оценка':t('1, если слов-паразитов не больше {}, иначе 0').format(self.parameters['maximum_fillers_number']),
'Вес':''
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Вес" - не относится к описанию критериев, это часть конфигурации набора критериев, зачем он тут?

}


def apply(self, audio, presentation, training_id, criteria_results):
total_words = audio.audio_stats['total_words']
Expand Down
10 changes: 7 additions & 3 deletions app/criteria/fillers_ratio/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,13 @@ def __init__(self, parameters, dependent_criteria, name=''):

@property
def description(self):
return (t('Критерий: {},\n') +
t('описание: проверяет, что в речи нет слов-паразитов, используются слова из списка {},\n') +
t('оценка: (1 - доля слов-паразитов).\n')).format(self.name, self.parameters['fillers'])
return {
"Критерий": t(self.name),
'Описание':t('проверяет, что в речи нет слов-паразитов, используются слова из списка {}').format(self.parameters['fillers']),
'Оценка':t('(1 - доля слов-паразитов)'),
'Вес':''
}


def apply(self, audio, presentation, training_id, criteria_results):
total_words = audio.audio_stats['total_words']
Expand Down
9 changes: 6 additions & 3 deletions app/criteria/len_text_on_slide/critetion.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@ def __init__(self, parameters, dependent_criteria, name=''):

@property
def description(self):
return (t('Критерий: {0},\n') +
t('описание: проверяет, что количество слов на каждом слайде не меньше {1},\n') +
t('оценка: 1, если выполнен, иначе пропорционально количеству слайдов, удовлетворяющих критерию (с количеством слов, большим {1}))\n')).format(self.name, self.parameters['minimal_number_words'])
return {
"Критерий": t(self.name),
'Описание':t('проверяет, что количество слов на каждом слайде не меньше {}').format(self.parameters['minimal_number_words']),
'Оценка':t('1, если выполнен, иначе пропорционально количеству слайдов, удовлетворяющих критерию (с количеством слов, большим {})').format(self.parameters['minimal_number_words']),
'Вес':''
}

def apply(self, audio, presentation, training_id, criteria_results):
slides_number = len(presentation.slides)
Expand Down
10 changes: 7 additions & 3 deletions app/criteria/number_slides/critetion.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,13 @@ def description(self):
evaluation += t('({} / n), если количество рассказанных слайдов больше максимума.').format(
self.parameters['maximal_allowed_slide_number']
)
return (t('Критерий: {},\n') +
t('описание: проверяет, что количество рассказанных слайдов {},\n') +
t('оценка: 1, если выполнен, {}\n')).format(self.name, boundaries, evaluation)
return {
"Критерий":t(self.name),
"Описание":t("проверяет, что количество рассказанных слайдов {}").format(boundaries),
"Оценка":t("1, если выполнен, {}").format(evaluation),
"Вес":""
}


def apply(self, audio, presentation, training_id, criteria_results):
slides_number = len(presentation.slides)
Expand Down
9 changes: 6 additions & 3 deletions app/criteria/number_word_on_slide/critetion.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,12 @@ def __init__(self, parameters, dependent_criteria, name=''):

@property
def description(self):
return (t('Критерий: {0},\n') +
t('описание: проверяет, что количество слов, рассказанных на каждом слайде не меньше {1},\n') +
t('оценка: 1, если выполнен, иначе пропорционально количеству слайдов, удовлетворяющих критерию (с рассказанным количеством слов, большим {1}))\n')).format(self.name, self.parameters['minimal_number_words'])
return {
"Критерий":t(self.name),
"Описание":t("проверяет, что количество слов, рассказанных на каждом слайде не меньше {}").format(self.parameters['minimal_number_words']),
"Оценка":t("1, если выполнен, иначе пропорционально количеству слайдов, удовлетворяющих критерию (с рассказанным количеством слов, большим {})").format(self.parameters['minimal_number_words']),
"Вес":""
}

def apply(self, audio, presentation, training_id, criteria_results):
slides_number = len(audio.audio_slides)
Expand Down
9 changes: 7 additions & 2 deletions app/criteria/slides_checker/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,13 @@ def __init__(self, parameters, dependent_criteria, name=''):
@property
def description(self):
# TODO: включить критерии?
return (t('Критерий: {0},\n').format(self.name) +
t('описание: проверяет соответствие презентации критериям.\n'))
return {
"Критерий":t(self.name),
"Описание":t("проверяет соответствие презентации критериям."),
"Оценка":"",
"Вес":""
}


def apply(self, audio, presentation, training_id, criteria_results):
training = TrainingsDBManager().get_training(training_id)
Expand Down
10 changes: 7 additions & 3 deletions app/criteria/speech_duration/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ def description(self):
evaluation += t('({} / p), если продолжительность речи в секундах t слишком длинная.').format(
self.parameters['maximal_allowed_duration']
)
return (t('Критерий: {},\n') +
t('описание: проверяет, что продолжительность речи {},\n') +
t('оценка: 1, если выполнен, {}\n')).format(self.name, boundaries, evaluation)
return {
"Критерий":t(self.name),
"Описание":t("проверяет, что продолжительность речи {}").format(boundaries),
"Оценка":t("оценка: 1, если выполнен, {}").format(evaluation),
"Вес":""
}


def apply(self, audio, presentation, training_id, criteria_results):
maximal_allowed_duration = self.parameters.get(
Expand Down
10 changes: 7 additions & 3 deletions app/criteria/speech_is_not_in_database/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,13 @@ def common_length(self, mfcc1, mfcc2):

@property
def description(self):
return (t('Критерий: {},\n') +
t('описание: проверяет, не является ли аудиофайл нечеткой копией одного из имеющихся в базе от этого пользователя,\n') +
t('оценка: 0, если не выполнен, 1, если выполнен.\n')).format(self.name)
return {
"Критерий":t(self.name),
"Описание":t("проверяет, не является ли аудиофайл нечеткой копией одного из имеющихся в базе от этого пользователя"),
"Оценка":t("0, если не выполнен, 1, если выполнен"),
"Вес":""
}


def apply(self, audio, presentation, training_id, criteria_results):
current_audio_id = TrainingsDBManager().get__raining(
Expand Down
12 changes: 7 additions & 5 deletions app/criteria/speech_pace/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ def __init__(self, parameters, dependent_criteria, name=''):

@property
def description(self) -> str:
return (t('Критерий: {},\n') +
t('описание: проверяет, что скорость речи находится в пределах от {} до {} слов в минуту,\n') +
t('оценка: 1, если выполнен, (p / {}), если темп p слишком медленный, ({} / p), если темп p слишком быстрый.\n')) \
.format(self.name, self.parameters['minimal_allowed_pace'], self.parameters['maximal_allowed_pace'],
self.parameters['minimal_allowed_pace'], self.parameters['maximal_allowed_pace'])
return {
"Критерий":t(self.name),
"Описание":t("проверяет, что скорость речи находится в пределах от {} до {} слов в минуту").format(self.parameters['minimal_allowed_pace'], self.parameters['maximal_allowed_pace']),
"Оценка":t("оценка: 1, если выполнен, (p / {}), если темп p слишком медленный, ({} / p), если темп p слишком быстрый").format(self.parameters['minimal_allowed_pace'], self.parameters['maximal_allowed_pace']),
"Вес":""
}


def apply(self, audio: Audio, presentation: Presentation, training_id: ObjectId, criteria_results: dict) \
-> CriterionResult:
Expand Down
11 changes: 7 additions & 4 deletions app/criteria/strict_speech_duration/criterion.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,13 @@ def description(self):
if strict_boundaries:
strict_boundaries += t(
', то оценка за этот критерий и за всю тренировку равна 0.')
return (t('Критерий: {},\n') +
t('описание: проверяет, что продолжительность речи {},\n') +
t('оценка: 1, если выполнен, {}\n') +
'{}\n').format(self.name, boundaries, evaluation, strict_boundaries)
return {
"Критерий":t(self.name),
"Описание":t("проверяет, что продолжительность речи {}").format(boundaries),
"Оценка":t("оценка: 1, если выполнен, {}\n" + "{}").format(evaluation,strict_boundaries),
"Вес":""
}


def apply(self, audio, presentation, training_id, criteria_results):
minimal_allowed_duration = self.parameters.get(
Expand Down
21 changes: 9 additions & 12 deletions app/criteria_pack/criterion_pack_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,21 +40,18 @@ def get_criterion_by_name(self, criterion_name):
return None

# TODO move to feedback evaluator
def get_criteria_pack_weights_description(self, weights: dict) -> str:
description = ''
def get_criteria_pack_weights_description(self, weights: dict) -> any:
description = {"Критерии":[]}
for criterion in self.criteria:
criteria_tmp = criterion.description
if weights and criterion.name in weights:
description += '{},\n{} = {:.3f}.\n'.format(
criterion.description[:-2],
t("вес критерия"),
weights[criterion.name],
)
criteria_tmp["Вес"] = "{:.3f}".format(weights[criterion.name])
description["Критерии"].append(criteria_tmp)

else:
description += '{},\n{} = 1 / {}.\n'.format(
criterion.description[:-2],
t("вес критерия"),
len(self.criteria),
)
criteria_tmp["Вес"] = "1 / {}".format(len(self.criteria))
description["Критерии"].append(criteria_tmp)

return description

@property
Expand Down
23 changes: 20 additions & 3 deletions app/routes/trainings.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,28 @@ def view_all_trainings():
or an empty dictionary if access was denied.
"""
username = request.args.get('username', '')
full_name = request.args.get('full_name', '')

page = 0
count = 10

try:
page = int(request.args.get('page', '0'))
except:
pass

try:
count = int(request.args.get('count', '10'))
except:
pass

authorized = check_auth() is not None
if not (check_admin() or (authorized and session.get('session_id') == username)):
return {}, 404
return render_template('show_all_trainings.html', username=username, full_name=full_name, is_admin="true" if check_admin() else 'false'), 200

raw_filters = request.args.getlist('f')
filters_string = '&'.join(raw_filters)

return render_template('show_all_trainings.html', username=username, filters=filters_string, is_admin="true" if check_admin() else 'false', page=str(page), count=str(count)), 200
Copy link
Collaborator

@HadronCollider HadronCollider Jul 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Откуда и для чего тут эти изменения? (не похоже на вашу задачу, но похоже на чужую)



@routes_trainings.route('/training_greeting/', methods=['GET'])
Expand Down Expand Up @@ -191,7 +208,7 @@ def view_training_greeting():
training_number=training_number,
attempt_count=attempt_count,
criteria_pack_id=criteria_pack_id,
criteria_pack_description=criteria_pack_description.replace('\n', '\\n').replace('\'', ''),
criteria_pack_description=criteria_pack_description,
training_id=training_id,
presentation_id=presentation_id
)
23 changes: 23 additions & 0 deletions app/static/css/training_greeting.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
body {
margin-left: 10px;
}
td {
text-align: center;
vertical-align: middle;
}
th {
text-align: center;
vertical-align: middle;
}
h3 {
text-align: center;
}

table{
margin-right: 10px;
}
#start-training-button{
margin-top: 10px;
width: 150px;
height: 30px;
}
28 changes: 26 additions & 2 deletions app/static/js/training_greeting.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
function setCriteriaPackDescription(s) {
document.getElementById('criteria-pack-description').innerText = `${s}`;
}
const criteriaTable = document.getElementById("criteria-table");
let criteriaRow = document.createElement("tr");
let HeadData = ["Критерий","Описание","Оценка","Вес критерия"];
HeadData.forEach(element =>{
let tableHead = document.createElement("th");
tableHead.innerText = element;
criteriaRow.appendChild(tableHead);
});
criteriaTable.appendChild(criteriaRow);
for(let i = 0;i < s["Критерии"].length;i++){
criteriaRow = document.createElement("tr");
let criteriaData = document.createElement("td");
criteriaData.innerText = s["Критерии"][i]["Критерий"];
let descriptionData = document.createElement("td");
descriptionData.innerText = s["Критерии"][i]["Описание"];
let gradeData = document.createElement("td");
gradeData.innerText = s["Критерии"][i]["Оценка"];
let criterionWeightData = document.createElement("td");
criterionWeightData.innerText = s["Критерии"][i]["Вес"];
criteriaRow.appendChild(criteriaData);
criteriaRow.appendChild(descriptionData);
criteriaRow.appendChild(gradeData);
criteriaRow.appendChild(criterionWeightData);
criteriaTable.appendChild(criteriaRow);
}
}
12 changes: 8 additions & 4 deletions app/templates/training_greeting.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
{% extends 'base.html' %} {% block content %}
{% extends 'base.html' %}
{% block header %}
<link rel="stylesheet" href="/static/css/training_greeting.css">
{% endblock %}
{% block content %}
<div class="base-container">
<h3>{{ t("Задание для тренировки") }}: {{ task_id }}</h3>
<h3>{{ t("Описание задания") }}: {{ task_description }}</h3>
<h3>{{ t("Проходной балл") }}: {{ required_points }} / {{ maximal_points}}</h3>
<h3>{{ t("Номер попытки") }}: {{ attempt_number }}</h3>
<h3>{{ t("Номер тренировки") }}: {{ training_number }} / {{ attempt_count }}</h3>
<h3>{{ t("Сумма баллов за предыдущие тренировки") }}: {{ current_points_sum }}</h3>
<h3>{{ t("Набор критериев") }}: {{ criteria_pack_id }}</h3>
<div id="criteria-pack-description">{{ criteria_pack_description }}</div>
<caption>{{ t("Набор критериев") }}: {{ criteria_pack_id }}</caption>
<table id="criteria-table" border=""></table>
<button id="start-training-button" type="button"
onclick="location.href=
{% if not training_id %}
Expand All @@ -34,6 +38,6 @@ <h3>{{ t("Набор критериев") }}: {{ criteria_pack_id }}</h3>
</div>
<script src="{{ url_for('static', filename='js/training_greeting.js') }}"></script>
<script type="text/javascript">
setCriteriaPackDescription("{{ criteria_pack_description }}");
setCriteriaPackDescription({{criteria_pack_description|tojson}});
</script>
{% endblock %}