Files
drf-rack/net/xeaf/rack/management/commands/rack_coverage2.py

81 lines
2.5 KiB
Python

# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: 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 {}