feat(registry): add new endpoints for registers, exchange, and backups; update routing and configurations
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m10s
CI/CD Pipeline / Run Tests (push) Successful in 3m35s
CI/CD Pipeline / Telegram Notify Success (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 2m26s
CI/CD Pipeline / Run Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Telegram Notify Success (pull_request) Has been skipped
Some checks failed
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m10s
CI/CD Pipeline / Run Tests (push) Successful in 3m35s
CI/CD Pipeline / Telegram Notify Success (push) Has been skipped
CI/CD Pipeline / Code Quality Checks (pull_request) Failing after 2m26s
CI/CD Pipeline / Run Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Telegram Notify Success (pull_request) Has been skipped
This commit is contained in:
88
src/apps/exchange/serializers.py
Normal file
88
src/apps/exchange/serializers.py
Normal file
@@ -0,0 +1,88 @@
|
||||
"""Сериализаторы приложения обмена данными."""
|
||||
|
||||
from apps.exchange.models import ExchangeConnection
|
||||
from rest_framework import serializers
|
||||
|
||||
|
||||
class ExchangeConnectionSerializer(serializers.ModelSerializer):
|
||||
"""Сериализатор подключения без выдачи пароля в ответах."""
|
||||
|
||||
class Meta:
|
||||
model = ExchangeConnection
|
||||
fields = [
|
||||
"id",
|
||||
"server",
|
||||
"port",
|
||||
"username",
|
||||
"database_name",
|
||||
"schema_name",
|
||||
"is_active",
|
||||
"last_checked_at",
|
||||
"last_error",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
|
||||
class ExchangeConnectionCreateSerializer(serializers.Serializer):
|
||||
"""Входные данные для создания активного подключения."""
|
||||
|
||||
server = serializers.CharField(max_length=255)
|
||||
port = serializers.IntegerField(min_value=1, max_value=65535)
|
||||
username = serializers.CharField(max_length=255)
|
||||
password = serializers.CharField()
|
||||
database_name = serializers.CharField(max_length=255)
|
||||
schema_name = serializers.RegexField(
|
||||
regex=r"^[A-Za-z_][A-Za-z0-9_]*$",
|
||||
max_length=255,
|
||||
error_messages={
|
||||
"invalid": (
|
||||
"Имя схемы должно начинаться с буквы/_, "
|
||||
"содержать только буквы, цифры и _"
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class ExchangeCopyRequestSerializer(serializers.Serializer):
|
||||
"""Параметры запуска копирования данных."""
|
||||
|
||||
mode = serializers.ChoiceField(
|
||||
choices=["all", "single", "selected"],
|
||||
default="all",
|
||||
)
|
||||
table = serializers.CharField(required=False)
|
||||
tables = serializers.ListField(
|
||||
child=serializers.CharField(),
|
||||
required=False,
|
||||
allow_empty=False,
|
||||
)
|
||||
truncate_before_copy = serializers.BooleanField(default=True)
|
||||
|
||||
def validate(self, attrs):
|
||||
mode = attrs["mode"]
|
||||
table = attrs.get("table")
|
||||
tables = attrs.get("tables")
|
||||
|
||||
if mode == "single" and not table:
|
||||
raise serializers.ValidationError(
|
||||
{"table": "Для mode=single нужно указать table"}
|
||||
)
|
||||
|
||||
if mode == "selected" and not tables:
|
||||
raise serializers.ValidationError(
|
||||
{"tables": "Для mode=selected нужно указать tables"}
|
||||
)
|
||||
|
||||
if mode != "single" and table:
|
||||
raise serializers.ValidationError(
|
||||
{"table": "Поле table допустимо только для mode=single"}
|
||||
)
|
||||
|
||||
if mode != "selected" and tables:
|
||||
raise serializers.ValidationError(
|
||||
{"tables": "Поле tables допустимо только для mode=selected"}
|
||||
)
|
||||
|
||||
return attrs
|
||||
Reference in New Issue
Block a user