Инспекция кода
This commit is contained in:
@@ -1,75 +0,0 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса CoverageStructureVisitor
|
||||
"""
|
||||
|
||||
import ast
|
||||
|
||||
|
||||
class CoverageStructureVisitor(ast.NodeVisitor):
|
||||
"""
|
||||
Обходчик синтаксического дерева кода проекта
|
||||
"""
|
||||
|
||||
def __init__(self, module_dot_path: str):
|
||||
"""
|
||||
Инициализация
|
||||
|
||||
:param module_dot_path: Путь к модулю
|
||||
"""
|
||||
|
||||
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
|
||||
class_name = self.class_stack[-1] if self.class_stack else None
|
||||
|
||||
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, class_name, full_path))
|
||||
@@ -1,33 +0,0 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса CoverageFileVisitor
|
||||
"""
|
||||
|
||||
import ast
|
||||
|
||||
|
||||
class CoverageTestFileVisitor(ast.NodeVisitor):
|
||||
"""
|
||||
Обходчик синтаксического дерева файла тестов
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
Инициализация
|
||||
"""
|
||||
|
||||
super().__init__()
|
||||
self.test_classes = set()
|
||||
|
||||
def visit_ClassDef(self, class_node) -> None:
|
||||
"""
|
||||
Обходчик классов
|
||||
"""
|
||||
|
||||
self.test_classes.add(class_node.name)
|
||||
self.generic_visit(class_node)
|
||||
@@ -21,8 +21,8 @@ from django.conf import settings
|
||||
from django.core.management import CommandError
|
||||
|
||||
from net.xeaf.rack.core import CoreCommand
|
||||
from ._coverage_structure_visitor import CoverageStructureVisitor
|
||||
from ._coverage_test_file_visitor import CoverageTestFileVisitor
|
||||
from net.xeaf.rack.utils.management import CoverageStructureVisitor
|
||||
from net.xeaf.rack.utils.management import CoverageTestFileVisitor
|
||||
|
||||
|
||||
class Command(CoreCommand):
|
||||
|
||||
@@ -12,8 +12,8 @@ from django.core.management import call_command
|
||||
from django.core.management.base import no_translations
|
||||
|
||||
from net.xeaf.rack.core import CoreCommand
|
||||
from net.xeaf.rack.management.userstory import AccountTestData
|
||||
from net.xeaf.rack.management.userstory import SessionTestData
|
||||
from net.xeaf.rack.models.user_story import AccountTestData
|
||||
from net.xeaf.rack.models.user_story import SessionTestData
|
||||
|
||||
|
||||
class Command(CoreCommand):
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Пакет классов создания тестовой БД
|
||||
"""
|
||||
|
||||
from .account_test_data import AccountTestData
|
||||
from .session_test_data import SessionTestData
|
||||
@@ -1,92 +0,0 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса AccountTestData
|
||||
"""
|
||||
|
||||
import uuid
|
||||
|
||||
from net.xeaf.rack.models import AccountModel
|
||||
from net.xeaf.rack.utils import DateUtils
|
||||
|
||||
|
||||
class AccountTestData:
|
||||
"""
|
||||
Инициализирует модели данных тестовых Аккаунтов
|
||||
"""
|
||||
|
||||
IVANOV_ID = uuid.UUID("bd428358-6944-4657-8044-a3dc1c4dff8a")
|
||||
""" Идентификатор пользователя Иван Иванов """
|
||||
|
||||
IVANOV_USERNAME = 'i.ivanov@xeaf.net'
|
||||
""" Имя пользователя Иван Иванов """
|
||||
|
||||
PETROV_ID = uuid.UUID("9c5010cc-f3be-42ae-bc05-d142d68a610a")
|
||||
""" Идентификатор пользователя Петр Петров """
|
||||
|
||||
PETROV_USERNAME = 'p.petrov@xeaf.net'
|
||||
""" Имя пользователя Петр Петров """
|
||||
|
||||
DEFAULT_PASSWORD = "manager123!"
|
||||
""" Пароль по умолчанию для тестов """
|
||||
|
||||
@classmethod
|
||||
def init_accounts(cls):
|
||||
"""
|
||||
Инициализирует Аккаунты пользователя
|
||||
"""
|
||||
|
||||
cls.init_ivanov_account()
|
||||
cls.init_petrov_account()
|
||||
|
||||
@classmethod
|
||||
def init_ivanov_account(cls):
|
||||
"""
|
||||
Инициализирует Аккаунт пользователя Иван Иванов
|
||||
"""
|
||||
|
||||
account = AccountModel()
|
||||
account.id = cls.IVANOV_ID
|
||||
account.username = "i.ivanov@xeaf.net"
|
||||
account.nick_name = "Иван"
|
||||
account.full_name = "Иван И. Иванов"
|
||||
account.email = "i.ivanov@xeaf.net"
|
||||
account.set_password(cls.DEFAULT_PASSWORD)
|
||||
account.joined_at = DateUtils.now()
|
||||
account.save()
|
||||
|
||||
@classmethod
|
||||
def init_petrov_account(cls):
|
||||
"""
|
||||
Инициализирует Аккаунт пользователя Петр Петров
|
||||
"""
|
||||
|
||||
account = AccountModel()
|
||||
account.id = cls.PETROV_ID
|
||||
account.username = "p.petrov@xeaf.net"
|
||||
account.nick_name = "Петр"
|
||||
account.full_name = "Петр П. Петров"
|
||||
account.email = "p.petrov@xeaf.net"
|
||||
account.set_password(cls.DEFAULT_PASSWORD)
|
||||
account.joined_at = DateUtils.now()
|
||||
account.save()
|
||||
|
||||
@classmethod
|
||||
def get_ivanov_account(cls):
|
||||
"""
|
||||
Возвращает аккаунт пользователя Иван Иванов
|
||||
"""
|
||||
|
||||
return AccountModel.objects.get(id=cls.IVANOV_ID)
|
||||
|
||||
@classmethod
|
||||
def get_petrov_account(cls):
|
||||
"""
|
||||
Возвращает аккаунт пользователя Петр Петров
|
||||
"""
|
||||
|
||||
return AccountModel.objects.get(id=cls.PETROV_ID)
|
||||
@@ -1,82 +0,0 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса SessionTestData
|
||||
"""
|
||||
|
||||
from net.xeaf.rack.models import SessionModel
|
||||
from .account_test_data import AccountTestData
|
||||
|
||||
|
||||
class SessionTestData:
|
||||
"""
|
||||
Инициализирует модели данных тестовых Сессий пользователей
|
||||
"""
|
||||
|
||||
IVANOV_SESSION_TOKEN = "ced4217bbd12b10a59a3f9342164793819a29238"
|
||||
""" Токен сессии пользователя Иван Иванов """
|
||||
|
||||
PETROV_SESSION_TOKEN = "1e20d0f236efdda2f31688b6c176bf817cb3357e"
|
||||
""" Токен сессии пользователя Петр Петров """
|
||||
|
||||
TEST_SESSION_TTL = 3600
|
||||
""" Время жизни тестовой сессии """
|
||||
|
||||
@classmethod
|
||||
def init_sessions(cls):
|
||||
"""
|
||||
Инициализирует сессии для тестовых пользователей
|
||||
"""
|
||||
|
||||
cls.init_ivanov_session()
|
||||
cls.init_petrov_session()
|
||||
|
||||
@classmethod
|
||||
def init_ivanov_session(cls):
|
||||
"""
|
||||
Создает Сессию для пользователя Иван Иванов
|
||||
"""
|
||||
|
||||
session = SessionModel()
|
||||
session.token = cls.IVANOV_SESSION_TOKEN
|
||||
session.account_id = AccountTestData.IVANOV_ID
|
||||
session.actual_account_id = AccountTestData.IVANOV_ID
|
||||
session.renew(cls.TEST_SESSION_TTL)
|
||||
session.save()
|
||||
|
||||
@classmethod
|
||||
def init_petrov_session(cls):
|
||||
"""
|
||||
Создает Сессию для пользователя Петр Петров
|
||||
"""
|
||||
|
||||
session = SessionModel()
|
||||
session.token = cls.PETROV_SESSION_TOKEN
|
||||
session.account_id = AccountTestData.PETROV_ID
|
||||
session.actual_account_id = AccountTestData.PETROV_ID
|
||||
session.renew(cls.TEST_SESSION_TTL)
|
||||
session.save()
|
||||
|
||||
@classmethod
|
||||
def get_ivanov_session(cls) -> SessionModel:
|
||||
"""
|
||||
Возвращает сессию пользователя Иван Иванов
|
||||
|
||||
:return: Сессия пользователя Иван Иванов
|
||||
"""
|
||||
|
||||
return SessionModel.objects.get(token=cls.IVANOV_SESSION_TOKEN)
|
||||
|
||||
@classmethod
|
||||
def get_petrov_session(cls) -> SessionModel:
|
||||
"""
|
||||
Возвращает сессию пользователя Петр Петров
|
||||
|
||||
:return: Сессия пользователя Петр Петров
|
||||
"""
|
||||
|
||||
return SessionModel.objects.get(token=cls.PETROV_SESSION_TOKEN)
|
||||
Reference in New Issue
Block a user