first commit
This commit is contained in:
85
app/core/config.py
Normal file
85
app/core/config.py
Normal file
@@ -0,0 +1,85 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user