Skip to content

Commit

Permalink
Merge branch 'master' into 524_fix_bug_with_users_downloads
Browse files Browse the repository at this point in the history
  • Loading branch information
HadronCollider committed Apr 19, 2024
2 parents 6dd7778 + c6383cb commit aa14e9c
Show file tree
Hide file tree
Showing 41 changed files with 197 additions and 159 deletions.
11 changes: 9 additions & 2 deletions app/main/check_packs/base_criterion_pack.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import logging
from .utils import init_criterions

PRIORITY_CHECK_FAILED_MSG = "<b>Данный критерий является обязательным для прохождения.<br>Результат всей проверки обнулен, но вы можете ознакомиться с результатами каждого критерия.</b><br>"
logger = logging.getLogger('root_logger')

PRIORITY_CHECK_FAILED_MSG = "<b>Данный критерий является обязательным для прохождения.<br>Результат всей проверки обнулен, но вы можете ознакомиться с результатами каждого критерия.</b><br>"
UNEXPECTED_CHECK_FAIL_MSG = "<b>Во время проверки произошла ошибка, попробуйте позже или обратитесь к администратору системы.<b>"

class BaseCriterionPack:

Expand All @@ -20,7 +23,11 @@ def check(self):
result = []
failed_priority_check = False
for criterion in self.criterions:
criterion_check_result = criterion.check()
try:
criterion_check_result = criterion.check()
except Exception as e:
logger.error(f'{criterion.id}: oшибка во время проверки: {e}')
criterion_check_result = {'score': 0, 'verdict': [UNEXPECTED_CHECK_FAIL_MSG]}
if criterion.priority and not criterion_check_result['score']:
failed_priority_check = True
criterion_check_result['verdict'] = [PRIORITY_CHECK_FAILED_MSG] + list(criterion_check_result['verdict'])
Expand Down
44 changes: 1 addition & 43 deletions app/main/checks/__init__.py
Original file line number Diff line number Diff line change
@@ -1,43 +1 @@
from .presentation_checks import *
from .report_checks import *

AVAILABLE_CHECKS = {
'pres': {
TemplateNameCheck.id: TemplateNameCheck,
SldNumCheck.id: SldNumCheck,
SldEnumCheck.id: SldEnumCheck,
TitleFormatCheck.id: TitleFormatCheck,
FindDefSld.id: FindDefSld,
SearchKeyWord.id: SearchKeyWord,
FindTasks.id: FindTasks,
SldSimilarity.id: SldSimilarity,
PresRightWordsCheck.id: PresRightWordsCheck,
PresImageShareCheck.id: PresImageShareCheck,
FurtherDev.id: FurtherDev,
PresBannedWordsCheck.id: PresBannedWordsCheck,
PresVerifyGitLinkCheck.id: PresVerifyGitLinkCheck,
PresEmptySlideCheck.id: PresEmptySlideCheck,
},
'report': {
ReportSimpleCheck.id: ReportSimpleCheck,
ReportPageCounter.id: ReportPageCounter,
ReportImageShareCheck.id: ReportImageShareCheck,
LRReportSectionCheck.id: LRReportSectionCheck,
ReportHeadersAtPageTopCheck.id: ReportHeadersAtPageTopCheck,
ReportShortSectionsCheck.id: ReportShortSectionsCheck,
ReportStyleCheck.id: ReportStyleCheck,
ReportBannedWordsCheck.id: ReportBannedWordsCheck,
ReportRightWordsCheck.id: ReportRightWordsCheck,
BannedWordsInLiteratureCheck.id: BannedWordsInLiteratureCheck,
ReferencesToLiteratureCheck.id: ReferencesToLiteratureCheck,
ImageReferences.id: ImageReferences,
TableReferences.id: TableReferences,
ReportFirstPagesCheck.id: ReportFirstPagesCheck,
ReportMainCharacterCheck.id: ReportMainCharacterCheck,
ReportNeededHeadersCheck.id: ReportNeededHeadersCheck,
ReportChapters.id: ReportChapters,
ReportSectionComponent.id: ReportSectionComponent,
ReportMainTextCheck.id: ReportMainTextCheck,
SpellingCheck.id: SpellingCheck
}
}
from .check_analyzer import AVAILABLE_CHECKS, CRITERIA_INFO
3 changes: 2 additions & 1 deletion app/main/checks/base_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def answer(mod, *args):

class BaseCriterion:
description = None
label = None
file_type = None
id = None
priority = False # if priority criterion is failed -> check is failed
Expand All @@ -31,7 +32,7 @@ def format_page_link(self, error):

@property
def name(self):
return self.description
return self.label


class BasePresCriterion(BaseCriterion):
Expand Down
21 changes: 21 additions & 0 deletions app/main/checks/check_analyzer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import inspect
from . import presentation_checks, report_checks
from .base_check import BaseCriterion


def get_filtered_module_members(module):
return filter(
lambda member: inspect.isclass(member[1]) and issubclass(member[1], BaseCriterion),
inspect.getmembers(module)
)


CRITERIA_INFO = {
'pres': {cls.id: {'class': cls, 'name': name, 'label': cls.label, 'description': cls.description} for name, cls in get_filtered_module_members(presentation_checks)},
'report': {cls.id: {'class': cls, 'name': name, 'label': cls.label, 'description': cls.description} for name, cls in get_filtered_module_members(report_checks)}
}

AVAILABLE_CHECKS = {
'pres': {cls_id: CRITERIA_INFO['pres'][cls_id]['class'] for cls_id in CRITERIA_INFO['pres']},
'report': {cls_id: CRITERIA_INFO['report'][cls_id]['class'] for cls_id in CRITERIA_INFO['report']}
}
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/banned_words.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@


class PresBannedWordsCheck(BasePresCriterion):
description = "Проверка наличия запретных слов в презентации"
description = ''
label = "Проверка наличия запретных слов в презентации"
id = 'pres_banned_words_check'

def __init__(self, file_info, words=[], min_count=3, max_count=6):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/empty_slide_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@


class PresEmptySlideCheck(BasePresCriterion):
description = "Проверка наличия пустых слайдов в презентации"
label = "Проверка наличия пустых слайдов в презентации"
description = ""
id = 'pres_empty_slide'

def __init__(self, file_info, status=False):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/find_def_sld.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class FindDefSld(BasePresCriterion):
description = "Поиск ключевого слова в заголовках"
label = "Поиск ключевого слова в заголовках"
description = 'Ключевые слова: "Апробация", "Цели и задачи", "Заключение"'
id = 'find_slides'

def __init__(self, file_info, key_slide):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/find_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@


class FindTasks(BasePresCriterion):
description = "Наличие слайдов, посвященных задачам"
label = "Наличие слайдов, посвященных задачам"
description = 'Проверка на наличие слайдов'
id = 'slide_every_task'

def __init__(self, file_info, min_percent=50, keyword='Цель и задачи'):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/further_dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@


class FurtherDev(BasePresCriterion):
description = "Наличие направлений дальнейшего развития"
label = "Наличие направлений дальнейшего развития"
description = 'Поиск направления развития в разделе "Заключение"'
id = 'future_dev'

def __init__(self, file_info, conclusion='Заключение'):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/image_share.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class PresImageShareCheck(BasePresCriterion):
description = "Проверка доли объема презентации, приходящейся на изображения"
label = "Проверка доли объема презентации, приходящейся на изображения"
description = 'Доля изображений не должна превышать 0,9'
id = 'pres_image_share'

def __init__(self, file_info, limit=0.9):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/pres_right_words.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class PresRightWordsCheck(BasePresCriterion):
description = "Проверка наличия определенных (правильных) слов в презентации"
label = "Проверка наличия определенных (правильных) слов в презентации"
description = ""
id = 'pres_right_words'

def __init__(self, file_info, patterns=[]):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/search_keyword.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class SearchKeyWord(BasePresCriterion):
description = "Поиск ключевого слова в тексте слайда"
label = "Поиск ключевого слова в тексте слайда"
description = 'Ключевое слово: "Актуальность"'
id = 'find_on_slide'

def __init__(self, file_info, key_slide):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/sld_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class SldEnumCheck(BasePresCriterion):
description = "Нумерация слайдов"
label = "Нумерация слайдов"
description = 'Проверка наличия и корректности номеров слайдов'
id = 'slides_enum'

def __init__(self, file_info):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/sld_num.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@


class SldNumCheck(BasePresCriterion):
description = "Количество основных слайдов"
label = "Количество основных слайдов"
description = 'Подсчет основных и запасных слайдов'
id = 'slides_number'

def __init__(self, file_info, slides_number, detect_additional=True):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/sld_similarity.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@


class SldSimilarity(BasePresCriterion):
description = "Соответствие заключения задачам"
label = "Соответствие заключения задачам"
description = 'Проверка соответствия заключения поставленным задачам (в процентах)'
id = 'conclusion_actual'

def __init__(self, file_info, goals='Цель и задачи', conclusion='Заключение', min_percent=50):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/template_name.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class TemplateNameCheck(BasePresCriterion):
description = "Проверка соответствия названия файла шаблону"
label = "Проверка соответствия названия файла шаблону"
description = 'Шаблон названия: "Презентация_ВКР_Иванов", "ПРЕЗЕНТАЦИЯ_НИР_ИВАНОВ"'
id = 'template_name'

def __init__(self, file_info, regex="(Презентация|ПРЕЗЕНТАЦИЯ)_(ВКР|НИР)_(([А-ЯЁ][а-яё]+)|([А-ЯЁ]*))"):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/title_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@


class TitleFormatCheck(BasePresCriterion):
description = "Заголовки слайдов присутствуют и занимают не более двух строк"
label = "Заголовки слайдов присутствуют и занимают не более двух строк"
description = 'Проверка наличия и корректности заголовков'
id = 'slides_headers'

def __init__(self, file_info):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/presentation_checks/verify_git_link.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@


class PresVerifyGitLinkCheck(BasePresCriterion):
description = "Проверка действительности ссылки на github"
label = "Проверка действительности ссылки на github"
description = ''
id = 'verify_git_link'

def __init__(self, file_info, deep_check=True):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/banned_words_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class ReportBannedWordsCheck(BaseReportCriterion):
description = "Проверка наличия запретных слов в тексте отчёта"
label = "Проверка наличия запретных слов в тексте отчёта"
description = 'Запрещено упоминание слова "мы"'
id = 'banned_words_check'

def __init__(self, file_info, words=["мы"], min_count=3, max_count=6):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/banned_words_in_literature.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class BannedWordsInLiteratureCheck(BaseReportCriterion):
description = "Проверка наличия запрещенных слов в списке литературы"
label = "Проверка наличия запрещенных слов в списке литературы"
description = 'Запрещено упоминание слова "wikipedia"'
id = 'banned_words_in_literature'

def __init__(self, file_info, banned_words=["wikipedia"]):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/chapters.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@


class ReportChapters(BaseReportCriterion):
description = "Проверка оформления заголовков отчета"
label = "Проверка оформления заголовков отчета"
description = '(Шрифты, отступы и т.д.)'
id = 'header_check'

def __init__(self, file_info):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/first_pages_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class ReportFirstPagesCheck(BaseReportCriterion):
description = "Проверка наличия обязательных страниц в отчете"
label = "Проверка наличия обязательных страниц в отчете"
description = 'Обязательные страницы: Титульный лист, Задание на выпускную квалификационную работу, Календарный план, Реферат, Abstract, Cодержание'
id = 'first_pages_check'
priority = True

Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/headers_at_page_top_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class ReportHeadersAtPageTopCheck(BaseReportCriterion):
description = "Проверка расположения разделов первого уровня с новой страницы"
label = "Проверка расположения разделов первого уровня с новой страницы"
description = ''
id = "headers_at_page_top_check"

def __init__(self, file_info, headers=[]):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/image_references.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class ImageReferences(BaseReportCriterion):
description = "Проверка наличия ссылок на все рисунки"
label = "Проверка наличия ссылок на все рисунки"
description = ''
id = 'image_references'

def __init__(self, file_info, image_style="ВКР_Подпись для рисунков"):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/image_share_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class ReportImageShareCheck(BaseReportCriterion):
description = "Проверка доли объема отчёта, приходящейся на изображения"
label = "Проверка доли объема отчёта, приходящейся на изображения"
description = 'Доля изображений (не включая "Приложение") не должна превышать 0,9'
id = 'image_share_check'

def __init__(self, file_info, limit=0.3):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/literature_references.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class ReferencesToLiteratureCheck(BaseReportCriterion):
description = "Проверка наличия ссылок на все источники"
label = "Проверка наличия ссылок на все источники"
description = ''
id = 'literature_references'

def __init__(self, file_info, min_ref=1, max_ref=1000):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/main_character_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class ReportMainCharacterCheck(BaseReportCriterion):
description = "Проверка фамилии и должности заведующего кафедрой"
label = "Проверка фамилии и должности заведующего кафедрой"
description = 'И.о. зав. кафедрой: А.А. Лисс'
id = 'main_character_check'
priority = True

Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/main_text_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class ReportMainTextCheck(BaseReportCriterion):
description = "Проверка оформления основного текста отчета"
label = "Проверка оформления основного текста отчета"
description = 'Перечень доспустимых стилей: "Основной текст; ВКР_Основной текст", "ВКР_Подпись таблицы", "ВКР_Подпись для рисунков, схем", "ВКР_Содержимое таблицы"'
id = 'main_text_check'

def __init__(self, file_info,
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/needed_headers_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@


class ReportNeededHeadersCheck(BaseReportCriterion):
description = "Проверка наличия обязательных заголовков в отчете"
label = "Проверка наличия обязательных заголовков в отчете"
description = ''
id = 'needed_headers_check'
priority = True

Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/page_counter.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@


class ReportPageCounter(BaseReportCriterion):
description = "Проверка количества страниц в файле"
label = "Проверка количества страниц в файле"
description = 'Количество страниц должно быть больше 50ти, не считая "Приложения"'
id = 'page_counter'
priority = True

Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/right_words_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@


class ReportRightWordsCheck(BaseReportCriterion):
description = "Проверка наличия определенных (правильных) слов в тексте отчёта"
label = "Проверка наличия определенных (правильных) слов в тексте отчёта"
description = 'Определенное слово: "цель"'
id = 'right_words_check'

def __init__(self, file_info, patterns=["цел[ьией]"]):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/section_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@


class ReportSectionComponent(BaseReportCriterion):
description = "Проверка наличия необходимых компонентов указанного раздела"
label = "Проверка наличия необходимых компонентов указанного раздела"
description = 'Раздел "Введение", компоненты: "цель", "задачи", "объект", "предмет"'
id = 'report_section_component'

def __init__(self, file_info, chapter='Введение', patterns=('цель', 'задач', 'объект', 'предмет'), headers_map = None):
Expand Down
3 changes: 2 additions & 1 deletion app/main/checks/report_checks/sections_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

class LRReportSectionCheck(BaseReportCriterion):
# TODO: DEPRECATED
description = "Проверка соответствия заголовков разделов требуемым стилям"
label = "Проверка соответствия заголовков разделов требуемым стилям"
description = ''
id = "lr_sections_check"

def __init__(self, file_info, presets: str = 'LR_HEADERS',
Expand Down
Loading

0 comments on commit aa14e9c

Please sign in to comment.