Добавлено представление получения информации о версии проекта

This commit is contained in:
2026-07-18 12:55:47 +03:00
parent cc57591e66
commit f0a6e4d97d
10 changed files with 186 additions and 60 deletions

View File

@@ -10,9 +10,7 @@ trim_trailing_whitespace = true
[*.html]
max_line_length = 240
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = true

View File

@@ -10,42 +10,42 @@
## Таблица. Перечень сторонних библиотек и компонентов
| № п/п | Наименование компонента | Версия | Тип лицензии | Функциональное назначение компонента |
|---|---|---|---|---|
| 1 | Django | 6.0.7 | BSD-3-Clause | Основной веб-фреймворк архитектуры ПО |
| 2 | djangorestframework | 3.17.1 | BSD-3-Clause | Построение REST API интерфейсов |
| 3 | asgiref | 3.11.1 | BSD License | Поддержка асинхронных интерфейсов веб-сервера |
| 4 | boto3 | 1.43.44 | Apache-2.0 | Интеграция и управление облачным объектным хранилищем |
| 5 | botocore | 1.43.44 | Apache-2.0 | Ядро низкоуровневых запросов к облачной инфраструктуре |
| 6 | s3transfer | 0.19.0 | Apache-2.0 | Управление многопоточной загрузкой файлов в хранилище |
| 7 | django-storages | 1.14.6 | BSD License | Подключение внешних хранилищ данных к медиа-файлам |
| 8 | concurrent-log-handler | 0.9.29 | Apache-2.0 | Безопасное многопоточное логирование процессов |
| 9 | django-cors-headers | 4.9.0 | MIT | Регулирование правил кросс-доменных запросов (CORS) |
| 10 | django-environ | 0.14.0 | MIT | Безопасная конфигурация проекта через переменные окружения |
| 11 | django-split-settings | 1.3.2 | BSD License | Модульное разделение настроек проекта по окружениям |
| 12 | split-settings | 1.0.0 | BSD License | Вспомогательная утилита разделения конфигурационных файлов |
| 13 | gunicorn | 26.0.0 | MIT | WSGI-сервер для развертывания веб-приложения |
| 14 | jmespath | 1.1.0 | MIT | Декларативный синтаксис для фильтрации JSON-данных |
| 15 | packaging | 26.2 | BSD-2-Clause | Парсинг и валидация версий пакетов зависимостей |
| 16 | python-dateutil | 2.9.0.post0 | Apache-2.0 | Расширенная работа с форматами даты и часовыми поясами |
| 17 | pillow | 12.3.0 | MIT-CMU | Обработка, оптимизация и валидация графических файлов |
| 18 | portalocker | 3.2.0 | BSD-3-Clause | Кроссплатформенная блокировка файлов при записи |
| 19 | psycopg | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 20 | psycopg-binary | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 21 | pywin32 | 312 | PSF License | Обеспечение совместимости со средой разработки Windows |
| 22 | redis (Python-пакет) | 8.0.1 | MIT | Клиентская библиотека сетевого протокола RESP |
| 23 | KeyDB (Инфраструктура) | любая | BSD-3-Clause | База данных в ОЗУ для кэширования (вместо ПО Redis) |
| 24 | six | 1.17.0 | MIT | Утилита совместимости кодовой базы |
| 25 | sqlparse | 0.5.5 | BSD License | Форматирование и невалидирующий парсинг SQL-запросов |
| 26 | typing_extensions | 4.16.0 | PSF-2.0 | Поддержка продвинутой статической типизации кода |
| 27 | tzdata | 2026.2 | Apache-2.0 | Системный провайдер актуальной базы часовых поясов |
| 28 | urllib3 | 2.7.0 | MIT | Клиент HTTP-запросов к внешним сервисам |
| 29 | djangorestframework-camel-case | 1.4.2 | BSD License | Автоматическая конвертация стилей JSON-ключей в API |
| 30 | djangorestframework-dataclasses | 1.4.0 | BSD License | Интеграция структур данных Dataclasses в сериализаторы |
| 31 | drf-rack | 0.1.0 | MIT | Дополнительные инструменты профилирования REST API |
| 32 | django-stubs / ext | 6.0.6 | MIT | Аннотации типов для статического анализатора кода |
| 33 | djangorestframework-stubs | 317.0 | MIT | Аннотации типов для валидации API-слоя |
| 34 | types-PyYAML | 6.0.12 | Apache-2.0 | Аннотации типов конфигурационных файлов YAML |
| № п/п | Наименование компонента | Версия | Тип лицензии | Функциональное назначение компонента |
|------:|---------------------------------|-------------|---------------|------------------------------------------------------------|
| 1 | Django | 6.0.7 | BSD-3-Clause | Основной веб-фреймворк архитектуры ПО |
| 2 | djangorestframework | 3.17.1 | BSD-3-Clause | Построение REST API интерфейсов |
| 3 | asgiref | 3.11.1 | BSD License | Поддержка асинхронных интерфейсов веб-сервера |
| 4 | boto3 | 1.43.44 | Apache-2.0 | Интеграция и управление облачным объектным хранилищем |
| 5 | botocore | 1.43.44 | Apache-2.0 | Ядро низкоуровневых запросов к облачной инфраструктуре |
| 6 | s3transfer | 0.19.0 | Apache-2.0 | Управление многопоточной загрузкой файлов в хранилище |
| 7 | django-storages | 1.14.6 | BSD License | Подключение внешних хранилищ данных к медиа-файлам |
| 8 | concurrent-log-handler | 0.9.29 | Apache-2.0 | Безопасное многопоточное логирование процессов |
| 9 | django-cors-headers | 4.9.0 | MIT | Регулирование правил кросс-доменных запросов (CORS) |
| 10 | django-environ | 0.14.0 | MIT | Безопасная конфигурация проекта через переменные окружения |
| 11 | django-split-settings | 1.3.2 | BSD License | Модульное разделение настроек проекта по окружениям |
| 12 | split-settings | 1.0.0 | BSD License | Вспомогательная утилита разделения конфигурационных файлов |
| 13 | gunicorn | 26.0.0 | MIT | WSGI-сервер для развертывания веб-приложения |
| 14 | jmespath | 1.1.0 | MIT | Декларативный синтаксис для фильтрации JSON-данных |
| 15 | packaging | 26.2 | BSD-2-Clause | Парсинг и валидация версий пакетов зависимостей |
| 16 | python-dateutil | 2.9.0.post0 | Apache-2.0 | Расширенная работа с форматами даты и часовыми поясами |
| 17 | pillow | 12.3.0 | MIT-CMU | Обработка, оптимизация и валидация графических файлов |
| 18 | portalocker | 3.2.0 | BSD-3-Clause | Кроссплатформенная блокировка файлов при записи |
| 19 | psycopg | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 20 | psycopg-binary | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 21 | pywin32 | 312 | PSF License | Обеспечение совместимости со средой разработки Windows |
| 22 | redis (Python-пакет) | 8.0.1 | MIT | Клиентская библиотека сетевого протокола RESP |
| 23 | KeyDB (Инфраструктура) | любая | BSD-3-Clause | База данных в ОЗУ для кэширования (вместо ПО Redis) |
| 24 | six | 1.17.0 | MIT | Утилита совместимости кодовой базы |
| 25 | sqlparse | 0.5.5 | BSD License | Форматирование и невалидирующий парсинг SQL-запросов |
| 26 | typing_extensions | 4.16.0 | PSF-2.0 | Поддержка продвинутой статической типизации кода |
| 27 | tzdata | 2026.2 | Apache-2.0 | Системный провайдер актуальной базы часовых поясов |
| 28 | urllib3 | 2.7.0 | MIT | Клиент HTTP-запросов к внешним сервисам |
| 29 | djangorestframework-camel-case | 1.4.2 | BSD License | Автоматическая конвертация стилей JSON-ключей в API |
| 30 | djangorestframework-dataclasses | 1.4.0 | BSD License | Интеграция структур данных Dataclasses в сериализаторы |
| 31 | drf-rack | 0.1.0 | MIT | Дополнительные инструменты профилирования REST API |
| 32 | django-stubs / ext | 6.0.6 | MIT | Аннотации типов для статического анализатора кода |
| 33 | djangorestframework-stubs | 317.0 | MIT | Аннотации типов для валидации API-слоя |
| 34 | types-PyYAML | 6.0.12 | Apache-2.0 | Аннотации типов конфигурационных файлов YAML |
## Особые примечания по компонентам с лицензией LGPL (psycopg / psycopg-binary)
@@ -55,7 +55,7 @@
(посредством штатных инструкций импорта).
Исходный текст самих компонентов модификации не подвергается, в состав разрабатываемого ПО статически
не интегрируется и загружается изолированно из официального публичного репозитория.В соответствии с
не интегрируется и загружается изолированно из официального публичного репозитория. В соответствии с
условиями Раздела 4 лицензии GNU Lesser General Public License (LGPLv3), данная схема динамического
связывания является правомерной, не распространяет действие условий указанной лицензии на разработанное ПО,
не накладывает обязательств по предоставлению исходного текста основного программного продукта и не

View File

@@ -0,0 +1,9 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Пакет описания классов сериализаторов
"""

View File

@@ -0,0 +1,26 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса VersionInfoResponse
"""
from rest_framework import serializers
class VersionInfoResponse(serializers.Serializer):
"""
Формирует объект Информации о версии приложения
"""
title = serializers.CharField()
""" Наименование """
version = serializers.CharField()
""" Номер версии API """
debug_mode = serializers.BooleanField()
""" Признак режима отладки """

23
net/xeaf/rack/urls.py Normal file
View File

@@ -0,0 +1,23 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Модуль маршрутизации вызова представлений
"""
from net.xeaf.rack.views import VersionViewSet
p = VersionViewSet.get_paths()
#
# Маршруты
#
urlpatterns = [
*p,
# *VersionViewSet.get_paths(),
# Должен быть последним
# "*Error404ViewSet.get_path(),
]

View File

@@ -7,3 +7,5 @@
"""
Пакет описания классов представлений
"""
from .version_view_set import VersionViewSet

View File

@@ -0,0 +1,60 @@
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
"""
Описание класса VersionViewSet
"""
from typing import Any
from uuid import UUID
from rest_framework.permissions import AllowAny
from net.xeaf.rack.core import CoreModel
from net.xeaf.rack.core.views import CoreViewSet
from net.xeaf.rack.core.views import ViewSetRetrieveMixin
from net.xeaf.rack.serializers.version_info_response import VersionInfoResponse
class VersionViewSet(ViewSetRetrieveMixin, CoreViewSet):
"""
Представление версии приложения
"""
permission_classes = [AllowAny, ]
""" Классы проверки прав доступа """
item_detail_pattern = ""
""" Путь для работы с объектом """
response_serializer = VersionInfoResponse
""" Общий класс сериализатора для ответа """
def _process_retrieve(self, pk: UUID | None, params: dict[str, Any]) -> dict[str, Any] | CoreModel:
"""
Обработка запроса на получение версии приложения
"""
version_info = {
"title": "DRF Rack",
"debug_mode": True,
"version": "0.1.0",
"build": "20230701",
}
return version_info
@classmethod
def _process_pk_param(cls, **kwargs: Any) -> UUID | None:
"""
Обработка параметра идентификатора объекта
:param kwargs: Именованные параметры
:return: Идентификатор объекта или None
"""
return None

View File

@@ -12,6 +12,8 @@ https://docs.djangoproject.com/en/6.0/ref/settings/
from pathlib import Path
import sys
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
@@ -74,12 +76,21 @@ WSGI_APPLICATION = 'wsgiapp.wsgi.application'
# Database
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
if 'test' in sys.argv:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
}
else:
# noinspection PyUnresolvedReferences
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': "/tmp/rack/rack.sqlite",
}
}
}
# Password validation

View File

@@ -1,22 +1,19 @@
"""
URL configuration for wsgiapp project.
# DRF Rack
# Библиотека классов расширений для Django REST Framework
#
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
# Все права защищены. Лицензия: MIT
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
Модуль маршрутизации
"""
from django.urls import include
from django.urls import path
#
# Маршруты
#
urlpatterns = [
path('admin/', admin.site.urls),
path('v1/', include('net.xeaf.rack.urls')),
]