Files
replicator/app/core/config.py
2026-03-08 20:21:15 +09:00

85 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
import os
from typing import List, Literal, Optional, Dict
from urllib.parse import quote_plus
from pydantic_settings import BaseSettings
from pydantic import Field
from dotenv import load_dotenv
load_dotenv()
class Settings(BaseSettings):
"""Конфигурация приложения из переменных окружения"""
# Настройки MSSQL
MSSQL_SERVER: str = Field(..., env='MSSQL_SERVER')
MSSQL_DATABASE: str = Field(..., env='MSSQL_DATABASE')
MSSQL_USERNAME: str = Field(..., env='MSSQL_USERNAME')
MSSQL_PASSWORD: str = Field(..., env='MSSQL_PASSWORD')
MSSQL_DRIVER: str = 'pymssql'
# Настройки PostgreSQL
POSTGRES_HOST: str = Field(..., env='POSTGRES_HOST')
POSTGRES_PORT: int = Field(5432, env='POSTGRES_PORT')
POSTGRES_DATABASE: str = Field(..., env='POSTGRES_DATABASE')
POSTGRES_USERNAME: str = Field(..., env='POSTGRES_USERNAME')
POSTGRES_PASSWORD: str = Field(..., env='POSTGRES_PASSWORD')
# Настройки email
EMAIL_HOST: str = Field(..., env='EMAIL_HOST')
EMAIL_PORT: int = Field(465, env='EMAIL_PORT')
EMAIL_USER: str = Field(..., env='EMAIL_USER')
EMAIL_PASSWORD: str = Field(..., env='EMAIL_PASSWORD')
EMAIL_FROM: str = Field(..., env='EMAIL_FROM')
EMAIL_TO: List[str] = Field(default_factory=lambda: ['andrew.brusnitsyn@gmail.com'])
EMAIL_SUBJECT: str = 'Результат миграции данных MSSQL → PostgreSQL'
# Настройки миграции
CHUNK_SIZE: int = Field(1000, env='CHUNK_SIZE')
BATCH_SIZE: int = Field(10, env='BATCH_SIZE')
TABLES_TO_COPY: List[str] = Field(
default_factory=lambda: ['oms_Department']
)
LIFE_TABLES: List[str] = Field(
default_factory=lambda: ['oms_Department']
)
# Колонки дат для инкрементальной загрузки
DEFAULT_DATE_COLUMNS: List[str] = Field(
default_factory=lambda: [
'DateExtract', 'DateDirection', 'DateRecipient', 'CreateDate',
'UpdateDate', 'ModifiedDate', 'ChangeDate', 'LastModified'
]
)
# Файлы состояния
LAST_REPLICATION_FILE: str = 'last_replication.json'
LOG_DIR: str = 'logs'
# Настройки API
API_V1_PREFIX: str = '/api/v1'
DEBUG: bool = Field(False, env='DEBUG')
@property
def MSSQL_CONNECTION_STRING(self) -> str:
"""Формирование строки подключения к MSSQL"""
# Для pymssql с Windows аутентификацией используем формат:
# mssql+pymssql://domain\\username:password@server:port/database
# ИЛИ для trusted connection:
# mssql+pymssql://username:password@server:port/database?charset=utf8
return rf'mssql+{self.MSSQL_DRIVER}://{self.MSSQL_USERNAME}:{self.MSSQL_PASSWORD}@{self.MSSQL_SERVER}/{self.MSSQL_DATABASE}'
@property
def POSTGRES_CONNECTION_STRING(self) -> str:
"""Формирование строки подключения к PostgreSQL"""
return rf'postgresql://{self.POSTGRES_USERNAME}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DATABASE}'
class Config:
env_file = '.env'
case_sensitive = False
# Глобальный экземпляр настроек
settings = Settings()