Инспекция кода
This commit is contained in:
@@ -37,7 +37,6 @@ KEYDB_DBINDEX=0
|
|||||||
KEYDB_PASSWORD='<change-me>'
|
KEYDB_PASSWORD='<change-me>'
|
||||||
KEYDB_POOL_SIZE=4
|
KEYDB_POOL_SIZE=4
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# S3 Object Storage
|
# S3 Object Storage
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ services:
|
|||||||
networks :
|
networks :
|
||||||
- rack-network
|
- rack-network
|
||||||
|
|
||||||
# 2. KeyDB (Сессии, Сокеты, Очереди, Кэш чанков)
|
# 2. KeyDB
|
||||||
keydb :
|
keydb :
|
||||||
image : eqalpha/keydb:latest
|
image : eqalpha/keydb:latest
|
||||||
container_name: rack_keydb
|
container_name: rack_keydb
|
||||||
@@ -53,7 +53,7 @@ services:
|
|||||||
- minio_data:/data
|
- minio_data:/data
|
||||||
command : server /data --console-address ":9001"
|
command : server /data --console-address ":9001"
|
||||||
|
|
||||||
healthcheck :
|
healthcheck :
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
@@ -63,25 +63,25 @@ services:
|
|||||||
networks :
|
networks :
|
||||||
- rack-network
|
- rack-network
|
||||||
|
|
||||||
# 4. Авто-создатель бакетов
|
# 4. Авто-создатель бакетов
|
||||||
minio-init:
|
minio-init:
|
||||||
image : minio/mc:latest
|
image : minio/mc:latest
|
||||||
container_name: rack_minio_mc
|
container_name: rack_minio_mc
|
||||||
depends_on :
|
depends_on :
|
||||||
minio:
|
minio:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
env_file :
|
env_file :
|
||||||
- .env
|
- .env
|
||||||
entrypoint : >
|
entrypoint : >
|
||||||
/bin/sh -c "
|
/bin/sh -c "
|
||||||
echo 'Настройка подключения к MinIO...';
|
echo 'Настройка подключения к MinIO...';
|
||||||
/usr/bin/mc alias set local http://minio:9000 ${rack_S3_ACCESS_KEY} ${rack_S3_SECRET_KEY};
|
/usr/bin/mc alias set local http://minio:9000 ${rack_S3_ACCESS_KEY} ${rack_S3_SECRET_KEY};
|
||||||
|
|
||||||
echo 'Ожидание готовности сервера...';
|
echo 'Ожидание готовности сервера...';
|
||||||
while ! /usr/bin/mc ping local --count 1 > /dev/null 2>&1; do
|
while ! /usr/bin/mc ping local --count 1 > /dev/null 2>&1; do
|
||||||
sleep 1;
|
sleep 1;
|
||||||
done;
|
done;
|
||||||
|
|
||||||
echo 'Сервер готов. Создание бакетов...';
|
echo 'Сервер готов. Создание бакетов...';
|
||||||
/usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-avatar --ignore-existing || true;
|
/usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-avatar --ignore-existing || true;
|
||||||
/usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-media --ignore-existing || true;
|
/usr/bin/mc mb local/${rack_S3_BUCKET_PREFIX}-media --ignore-existing || true;
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ class ViewSetCreateMixin(CoreViewSet):
|
|||||||
create_response_serializer: Type[Serializer] | None = None
|
create_response_serializer: Type[Serializer] | None = None
|
||||||
""" Класс сериализатора для ответа на запрос о создании объекта """
|
""" Класс сериализатора для ответа на запрос о создании объекта """
|
||||||
|
|
||||||
def item_create(self, request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
def item_create(self, _request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
||||||
"""
|
"""
|
||||||
Обрабатывает HTTP запрос и возвращает ответ с новым объектом
|
Обрабатывает HTTP запрос и возвращает ответ с новым объектом
|
||||||
|
|
||||||
:param request: Запрос
|
:param _request: Пропускаемый параметр запроса
|
||||||
:param kwargs: Именованные аргументы
|
:param kwargs: Именованные аргументы
|
||||||
|
|
||||||
:return: Ответ
|
:return: Ответ
|
||||||
|
|||||||
@@ -36,11 +36,11 @@ class ViewSetDestroyMixin(CoreViewSet):
|
|||||||
destroy_response_serializer: Type[Serializer] | None = None
|
destroy_response_serializer: Type[Serializer] | None = None
|
||||||
""" Класс сериализатора для ответа на запрос объекта """
|
""" Класс сериализатора для ответа на запрос объекта """
|
||||||
|
|
||||||
def item_destroy(self, request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
def item_destroy(self, _request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
||||||
"""
|
"""
|
||||||
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
||||||
|
|
||||||
:param request: Запрос
|
:param _request: Пропускаемый параметр запроса
|
||||||
:param kwargs: Именованные аргументы
|
:param kwargs: Именованные аргументы
|
||||||
|
|
||||||
:return: Ответ
|
:return: Ответ
|
||||||
|
|||||||
@@ -33,11 +33,11 @@ class ViewSetListMixin(CoreViewSet):
|
|||||||
list_response_serializer: Type[Serializer] | None = None
|
list_response_serializer: Type[Serializer] | None = None
|
||||||
""" Класс сериализатора для ответа на запрос списка объектов """
|
""" Класс сериализатора для ответа на запрос списка объектов """
|
||||||
|
|
||||||
def item_list(self, request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
def item_list(self, _request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
||||||
"""
|
"""
|
||||||
Обрабатывает HTTP запрос и возвращает ответ со списком объектов
|
Обрабатывает HTTP запрос и возвращает ответ со списком объектов
|
||||||
|
|
||||||
:param request: Запрос
|
:param _request: Пропускаемый параметр запроса
|
||||||
:param kwargs: Именованные аргументы
|
:param kwargs: Именованные аргументы
|
||||||
|
|
||||||
:return: Ответ
|
:return: Ответ
|
||||||
|
|||||||
@@ -34,11 +34,11 @@ class ViewSetRetrieveMixin(CoreViewSet):
|
|||||||
retrieve_response_serializer: Type[Serializer] | None = None
|
retrieve_response_serializer: Type[Serializer] | None = None
|
||||||
""" Класс сериализатора для ответа на запрос объекта """
|
""" Класс сериализатора для ответа на запрос объекта """
|
||||||
|
|
||||||
def item_retrieve(self, request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
def item_retrieve(self, _request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
||||||
"""
|
"""
|
||||||
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
||||||
|
|
||||||
:param request: Запрос
|
:param _request: Пропускаемый параметр запроса
|
||||||
:param kwargs: Именованные аргументы
|
:param kwargs: Именованные аргументы
|
||||||
|
|
||||||
:return: Ответ
|
:return: Ответ
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ class ViewSetUpdateMixin(CoreViewSet):
|
|||||||
update_response_serializer: Type[Serializer] | None = None
|
update_response_serializer: Type[Serializer] | None = None
|
||||||
""" Класс сериализатора для ответа на запрос на изменение объекта """
|
""" Класс сериализатора для ответа на запрос на изменение объекта """
|
||||||
|
|
||||||
def item_update(self, request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
def item_update(self, _request: Request, **kwargs: dict[str, Any]) -> CoreResponse:
|
||||||
"""
|
"""
|
||||||
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
Обрабатывает HTTP запрос и возвращает ответ с объектом
|
||||||
|
|
||||||
:param request: Запрос
|
:param _request: Пропускаемый параметр запроса
|
||||||
:param kwargs: Именованные аргументы
|
:param kwargs: Именованные аргументы
|
||||||
|
|
||||||
:return: Ответ
|
:return: Ответ
|
||||||
|
|||||||
@@ -7,3 +7,5 @@
|
|||||||
"""
|
"""
|
||||||
Пакет описания классов сериализаторов
|
Пакет описания классов сериализаторов
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from .version_info_response import VersionInfoResponse
|
||||||
|
|||||||
@@ -175,14 +175,20 @@ class SettingUtils:
|
|||||||
return data['project']['version']
|
return data['project']['version']
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_config_files(cls) -> list[str]:
|
def get_config_files(cls, extra: list[str] | None = None) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Возвращает список файлов конфигурации
|
Возвращает список файлов конфигурации
|
||||||
|
|
||||||
|
:param extra: Дополнительные файлы конфигурации
|
||||||
|
|
||||||
:return: Список файлов конфигурации
|
:return: Список файлов конфигурации
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return [file for file in cls.__config_files.values() if file is not None]
|
predefined_configs = [
|
||||||
|
file for file in cls.__config_files.values() if file is not None
|
||||||
|
]
|
||||||
|
|
||||||
|
return predefined_configs + (extra if extra else [])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_config_file(cls, name: str, full_path: str | None) -> None:
|
def set_config_file(cls, name: str, full_path: str | None) -> None:
|
||||||
@@ -196,14 +202,16 @@ class SettingUtils:
|
|||||||
cls.__config_files[name] = full_path
|
cls.__config_files[name] = full_path
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_installed_apps(cls) -> list[str]:
|
def get_installed_apps(cls, extra: list[str] | None = None) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Возвращает список установленных приложений
|
Возвращает список установленных приложений
|
||||||
|
|
||||||
|
:param extra: Дополнительные приложения
|
||||||
|
|
||||||
:return: Список установленных приложений
|
:return: Список установленных приложений
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return [
|
predefined_apps = [
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.admindocs',
|
'django.contrib.admindocs',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
@@ -216,6 +224,8 @@ class SettingUtils:
|
|||||||
'net.xeaf.rack',
|
'net.xeaf.rack',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
return predefined_apps + (extra if extra else [])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _check_initialization(cls) -> None:
|
def _check_initialization(cls) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ from rest_framework.permissions import AllowAny
|
|||||||
from net.xeaf.rack.core import CoreModel
|
from net.xeaf.rack.core import CoreModel
|
||||||
from net.xeaf.rack.core.views import CoreViewSet
|
from net.xeaf.rack.core.views import CoreViewSet
|
||||||
from net.xeaf.rack.core.views import ViewSetRetrieveMixin
|
from net.xeaf.rack.core.views import ViewSetRetrieveMixin
|
||||||
from net.xeaf.rack.serializers.version_info_response import VersionInfoResponse
|
from net.xeaf.rack.serializers import VersionInfoResponse
|
||||||
|
from net.xeaf.rack.utils.settings import SettingUtils
|
||||||
|
|
||||||
|
|
||||||
class VersionViewSet(ViewSetRetrieveMixin, CoreViewSet):
|
class VersionViewSet(ViewSetRetrieveMixin, CoreViewSet):
|
||||||
@@ -39,10 +40,9 @@ class VersionViewSet(ViewSetRetrieveMixin, CoreViewSet):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
version_info = {
|
version_info = {
|
||||||
"title": "DRF Rack",
|
"title": SettingUtils.get_app_name(),
|
||||||
"debug_mode": True,
|
"debug_mode": SettingUtils.is_debug_mode(),
|
||||||
"version": "0.1.0",
|
"version": SettingUtils.get_app_version()
|
||||||
"build": "20230701",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return version_info
|
return version_info
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
"""
|
"""
|
||||||
ASGI config for wsgiapp project.
|
Запуск приложения ASGI
|
||||||
|
|
||||||
It exposes the ASGI callable as a module-level variable named ``application``.
|
|
||||||
|
|
||||||
For more information on this file, see
|
|
||||||
https://docs.djangoproject.com/en/6.0/howto/deployment/asgi/
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -12,5 +13,4 @@ import os
|
|||||||
from django.core.asgi import get_asgi_application
|
from django.core.asgi import get_asgi_application
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wsgiapp.settings')
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wsgiapp.settings')
|
||||||
|
|
||||||
application = get_asgi_application()
|
application = get_asgi_application()
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
|
# DRF Rack
|
||||||
|
# Библиотека классов расширений для Django REST Framework
|
||||||
|
#
|
||||||
|
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||||
|
# Все права защищены. Лицензия: MIT
|
||||||
|
|
||||||
"""
|
"""
|
||||||
WSGI config for wsgiapp project.
|
Запуск приложения WSGI
|
||||||
|
|
||||||
It exposes the WSGI callable as a module-level variable named ``application``.
|
|
||||||
|
|
||||||
For more information on this file, see
|
|
||||||
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -12,5 +13,4 @@ import os
|
|||||||
from django.core.wsgi import get_wsgi_application
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wsgiapp.settings')
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'wsgiapp.settings')
|
||||||
|
|
||||||
application = get_wsgi_application()
|
application = get_wsgi_application()
|
||||||
|
|||||||
Reference in New Issue
Block a user