81 lines
2.5 KiB
Python
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 {}
|
|
|