# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: MIT """ Описание класса RackCoverageVisitor """ import ast import configparser from pathlib import Path from django.conf import settings class RackCoverageVisitor(ast.NodeVisitor): """ Реализует методы для рекурсивного обхода дерева элементов """ def __init__(self, module_dot_path: str): """ Инициализация """ super().__init__() self.module_dot_path = module_dot_path self.class_stack = [] self.results = [] def visit_ClassDef(self, class_node) -> None: """ Обработка класса :param class_node: Узел класса """ self.class_stack.append(class_node.name) self.generic_visit(class_node) self.class_stack.pop() def visit_FunctionDef(self, func_node) -> None: """ Обработка функции :param func_node: Узел функции """ self._handle_function(func_node) def visit_AsyncFunctionDef(self, async_func_node) -> None: """ Обработка асинхронной функции :param async_func_node: Узел асинхронной функции """ self._handle_function(async_func_node) def _handle_function(self, func_node) -> None: """ Общий метод для обработки функций :param func_node: Узел функции """ func_name = func_node.name if self.class_stack: class_chain = ".".join(self.class_stack) full_path = f"{self.module_dot_path}.{class_chain}.{func_name}" else: full_path = f"{self.module_dot_path}.{func_name}" self.results.append((func_name, full_path))