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

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] [*.html]
max_line_length = 240 max_line_length = 240
trim_trailing_whitespace = true
[*.md] [*.md]
max_line_length = off max_line_length = off
trim_trailing_whitespace = true

View File

@@ -10,42 +10,42 @@
## Таблица. Перечень сторонних библиотек и компонентов ## Таблица. Перечень сторонних библиотек и компонентов
| № п/п | Наименование компонента | Версия | Тип лицензии | Функциональное назначение компонента | | № п/п | Наименование компонента | Версия | Тип лицензии | Функциональное назначение компонента |
|---|---|---|---|---| |------:|---------------------------------|-------------|---------------|------------------------------------------------------------|
| 1 | Django | 6.0.7 | BSD-3-Clause | Основной веб-фреймворк архитектуры ПО | | 1 | Django | 6.0.7 | BSD-3-Clause | Основной веб-фреймворк архитектуры ПО |
| 2 | djangorestframework | 3.17.1 | BSD-3-Clause | Построение REST API интерфейсов | | 2 | djangorestframework | 3.17.1 | BSD-3-Clause | Построение REST API интерфейсов |
| 3 | asgiref | 3.11.1 | BSD License | Поддержка асинхронных интерфейсов веб-сервера | | 3 | asgiref | 3.11.1 | BSD License | Поддержка асинхронных интерфейсов веб-сервера |
| 4 | boto3 | 1.43.44 | Apache-2.0 | Интеграция и управление облачным объектным хранилищем | | 4 | boto3 | 1.43.44 | Apache-2.0 | Интеграция и управление облачным объектным хранилищем |
| 5 | botocore | 1.43.44 | Apache-2.0 | Ядро низкоуровневых запросов к облачной инфраструктуре | | 5 | botocore | 1.43.44 | Apache-2.0 | Ядро низкоуровневых запросов к облачной инфраструктуре |
| 6 | s3transfer | 0.19.0 | Apache-2.0 | Управление многопоточной загрузкой файлов в хранилище | | 6 | s3transfer | 0.19.0 | Apache-2.0 | Управление многопоточной загрузкой файлов в хранилище |
| 7 | django-storages | 1.14.6 | BSD License | Подключение внешних хранилищ данных к медиа-файлам | | 7 | django-storages | 1.14.6 | BSD License | Подключение внешних хранилищ данных к медиа-файлам |
| 8 | concurrent-log-handler | 0.9.29 | Apache-2.0 | Безопасное многопоточное логирование процессов | | 8 | concurrent-log-handler | 0.9.29 | Apache-2.0 | Безопасное многопоточное логирование процессов |
| 9 | django-cors-headers | 4.9.0 | MIT | Регулирование правил кросс-доменных запросов (CORS) | | 9 | django-cors-headers | 4.9.0 | MIT | Регулирование правил кросс-доменных запросов (CORS) |
| 10 | django-environ | 0.14.0 | MIT | Безопасная конфигурация проекта через переменные окружения | | 10 | django-environ | 0.14.0 | MIT | Безопасная конфигурация проекта через переменные окружения |
| 11 | django-split-settings | 1.3.2 | BSD License | Модульное разделение настроек проекта по окружениям | | 11 | django-split-settings | 1.3.2 | BSD License | Модульное разделение настроек проекта по окружениям |
| 12 | split-settings | 1.0.0 | BSD License | Вспомогательная утилита разделения конфигурационных файлов | | 12 | split-settings | 1.0.0 | BSD License | Вспомогательная утилита разделения конфигурационных файлов |
| 13 | gunicorn | 26.0.0 | MIT | WSGI-сервер для развертывания веб-приложения | | 13 | gunicorn | 26.0.0 | MIT | WSGI-сервер для развертывания веб-приложения |
| 14 | jmespath | 1.1.0 | MIT | Декларативный синтаксис для фильтрации JSON-данных | | 14 | jmespath | 1.1.0 | MIT | Декларативный синтаксис для фильтрации JSON-данных |
| 15 | packaging | 26.2 | BSD-2-Clause | Парсинг и валидация версий пакетов зависимостей | | 15 | packaging | 26.2 | BSD-2-Clause | Парсинг и валидация версий пакетов зависимостей |
| 16 | python-dateutil | 2.9.0.post0 | Apache-2.0 | Расширенная работа с форматами даты и часовыми поясами | | 16 | python-dateutil | 2.9.0.post0 | Apache-2.0 | Расширенная работа с форматами даты и часовыми поясами |
| 17 | pillow | 12.3.0 | MIT-CMU | Обработка, оптимизация и валидация графических файлов | | 17 | pillow | 12.3.0 | MIT-CMU | Обработка, оптимизация и валидация графических файлов |
| 18 | portalocker | 3.2.0 | BSD-3-Clause | Кроссплатформенная блокировка файлов при записи | | 18 | portalocker | 3.2.0 | BSD-3-Clause | Кроссплатформенная блокировка файлов при записи |
| 19 | psycopg | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) | | 19 | psycopg | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 20 | psycopg-binary | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) | | 20 | psycopg-binary | 3.3.4 | LGPL-3.0-only | См. Особые примечания (Драйвер СУБД) |
| 21 | pywin32 | 312 | PSF License | Обеспечение совместимости со средой разработки Windows | | 21 | pywin32 | 312 | PSF License | Обеспечение совместимости со средой разработки Windows |
| 22 | redis (Python-пакет) | 8.0.1 | MIT | Клиентская библиотека сетевого протокола RESP | | 22 | redis (Python-пакет) | 8.0.1 | MIT | Клиентская библиотека сетевого протокола RESP |
| 23 | KeyDB (Инфраструктура) | любая | BSD-3-Clause | База данных в ОЗУ для кэширования (вместо ПО Redis) | | 23 | KeyDB (Инфраструктура) | любая | BSD-3-Clause | База данных в ОЗУ для кэширования (вместо ПО Redis) |
| 24 | six | 1.17.0 | MIT | Утилита совместимости кодовой базы | | 24 | six | 1.17.0 | MIT | Утилита совместимости кодовой базы |
| 25 | sqlparse | 0.5.5 | BSD License | Форматирование и невалидирующий парсинг SQL-запросов | | 25 | sqlparse | 0.5.5 | BSD License | Форматирование и невалидирующий парсинг SQL-запросов |
| 26 | typing_extensions | 4.16.0 | PSF-2.0 | Поддержка продвинутой статической типизации кода | | 26 | typing_extensions | 4.16.0 | PSF-2.0 | Поддержка продвинутой статической типизации кода |
| 27 | tzdata | 2026.2 | Apache-2.0 | Системный провайдер актуальной базы часовых поясов | | 27 | tzdata | 2026.2 | Apache-2.0 | Системный провайдер актуальной базы часовых поясов |
| 28 | urllib3 | 2.7.0 | MIT | Клиент HTTP-запросов к внешним сервисам | | 28 | urllib3 | 2.7.0 | MIT | Клиент HTTP-запросов к внешним сервисам |
| 29 | djangorestframework-camel-case | 1.4.2 | BSD License | Автоматическая конвертация стилей JSON-ключей в API | | 29 | djangorestframework-camel-case | 1.4.2 | BSD License | Автоматическая конвертация стилей JSON-ключей в API |
| 30 | djangorestframework-dataclasses | 1.4.0 | BSD License | Интеграция структур данных Dataclasses в сериализаторы | | 30 | djangorestframework-dataclasses | 1.4.0 | BSD License | Интеграция структур данных Dataclasses в сериализаторы |
| 31 | drf-rack | 0.1.0 | MIT | Дополнительные инструменты профилирования REST API | | 31 | drf-rack | 0.1.0 | MIT | Дополнительные инструменты профилирования REST API |
| 32 | django-stubs / ext | 6.0.6 | MIT | Аннотации типов для статического анализатора кода | | 32 | django-stubs / ext | 6.0.6 | MIT | Аннотации типов для статического анализатора кода |
| 33 | djangorestframework-stubs | 317.0 | MIT | Аннотации типов для валидации API-слоя | | 33 | djangorestframework-stubs | 317.0 | MIT | Аннотации типов для валидации API-слоя |
| 34 | types-PyYAML | 6.0.12 | Apache-2.0 | Аннотации типов конфигурационных файлов YAML | | 34 | types-PyYAML | 6.0.12 | Apache-2.0 | Аннотации типов конфигурационных файлов YAML |
## Особые примечания по компонентам с лицензией LGPL (psycopg / psycopg-binary) ## Особые примечания по компонентам с лицензией LGPL (psycopg / psycopg-binary)
@@ -55,7 +55,7 @@
(посредством штатных инструкций импорта). (посредством штатных инструкций импорта).
Исходный текст самих компонентов модификации не подвергается, в состав разрабатываемого ПО статически Исходный текст самих компонентов модификации не подвергается, в состав разрабатываемого ПО статически
не интегрируется и загружается изолированно из официального публичного репозитория.В соответствии с не интегрируется и загружается изолированно из официального публичного репозитория. В соответствии с
условиями Раздела 4 лицензии GNU Lesser General Public License (LGPLv3), данная схема динамического условиями Раздела 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 from pathlib import Path
import sys
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
@@ -74,12 +76,21 @@ WSGI_APPLICATION = 'wsgiapp.wsgi.application'
# Database # Database
# https://docs.djangoproject.com/en/6.0/ref/settings/#databases # https://docs.djangoproject.com/en/6.0/ref/settings/#databases
DATABASES = { if 'test' in sys.argv:
'default': { DATABASES = {
'ENGINE': 'django.db.backends.sqlite3', 'default': {
'NAME': ':memory:', 'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
}
else:
# noinspection PyUnresolvedReferences
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': "/tmp/rack/rack.sqlite",
}
} }
}
# Password validation # Password validation

View File

@@ -1,22 +1,19 @@
""" # DRF Rack
URL configuration for wsgiapp project. # Библиотека классов расширений для 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 from django.urls import path
#
# Маршруты
#
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('v1/', include('net.xeaf.rack.urls')),
] ]