# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: MIT """ Описание класса для команды rack_coverage """ import ast import configparser from pathlib import Path from django.conf import settings from django.core.management.base import no_translations from net.xeaf.rack.core import CoreCommand class Command(CoreCommand): """ Осуществляет проверку покрытия тестами """ # noinspection SpellCheckingInspection CONFIG_FILE = '.rackcoveragerc' """ Имя файла конфигурации """ CONFIG_SECTION = "rack-coverage" """ Имя секции в файле конфигурации """ @no_translations def handle(self, *args, **options): """ Проверяет соблюдение принципа один метод - один файл тестов :params args: Позиционные аргументы :params options: Дополнительные параметры """ config = self._load_config() self.stdout.write(self.style.HTTP_INFO(f"Loading configuration file: {config}")) pass def _load_config(self) -> dict[str, list[str]]: """ Читает файл конфигурации :return: Словарь с настройками """ rc_path = Path(settings.BASE_DIR) / self.CONFIG_FILE if not rc_path.exists(): return {} config = configparser.ConfigParser() try: config.read(rc_path, encoding="utf-8") if not config.has_section(self.CONFIG_SECTION): return {} # Парсим строки, очищая их от пробелов и переносов raw_apps = config.get(self.CONFIG_SECTION, "apps", fallback="") raw_ignore = config.get(self.CONFIG_SECTION, "ignore", fallback="") apps_list = [a.strip() for a in raw_apps.splitlines() if a.strip()] ignore_list = [i.strip() for i in raw_ignore.splitlines() if i.strip()] return { "apps": apps_list, "ignore": ignore_list } except configparser.Error as err: self.stdout.write(self.style.ERROR(f"Error reading configuration file {self.CONFIG_FILE}: {err}")) return {}