|
| 1 | +from ..base_check import BaseReportCriterion, answer |
| 2 | + |
| 3 | +class ReportСhaptersLevel3ContentCheck(BaseReportCriterion): |
| 4 | + label = "Проверка содержания на наличия объктов 3 уровня" |
| 5 | + description = "В содержании не должно быть объектов третьего уровня" |
| 6 | + id = 'report_3_level_in_content_check' |
| 7 | + |
| 8 | + def __init__(self, file_info): |
| 9 | + super().__init__(file_info) |
| 10 | + |
| 11 | + |
| 12 | + def check(self): |
| 13 | + try: |
| 14 | + headers = self.file.make_chapters(self.file_type['report_type']) |
| 15 | + |
| 16 | + if not headers: |
| 17 | + return answer(False, "Не найдено ни одного заголовка.") |
| 18 | + |
| 19 | + level_3_count = 0 |
| 20 | + bool_content_find = False |
| 21 | + for header in headers: |
| 22 | + if header["text"].upper() == "СОДЕРЖАНИЕ": |
| 23 | + bool_content_find = True |
| 24 | + level_3_count = self._count_level_3_headers(header["child"]) |
| 25 | + break |
| 26 | + |
| 27 | + if not bool_content_find: |
| 28 | + return answer(False, "Не найдено заголовка 'Содержание'") |
| 29 | + |
| 30 | + if level_3_count > 0: |
| 31 | + result_str = f"Найдено {level_3_count} заголовков 3 уровня и выше. " |
| 32 | + result_str += "Содержание должно содержать только заголовки 1 и 2 уровня.<br>" |
| 33 | + return answer(False, result_str) |
| 34 | + |
| 35 | + return answer(True, "Все заголовки соответствуют требованиям (1-2 уровень)") |
| 36 | + |
| 37 | + except Exception as e: |
| 38 | + return answer(False, f"Ошибка при проверке: {str(e)}") |
| 39 | + |
| 40 | + def _count_level_3_headers(self, content): |
| 41 | + count = 0 |
| 42 | + |
| 43 | + for header in content: |
| 44 | + if self._is_level_3_or_higher(header): |
| 45 | + count += 1 |
| 46 | + count += self._count_level_3_headers(header["child"]) |
| 47 | + |
| 48 | + return count |
| 49 | + |
| 50 | + def _is_level_3_or_higher(self, header): |
| 51 | + return header["level"] >= 3 |
0 commit comments