fix: fix config

This commit is contained in:
itqop 2025-10-15 22:33:29 +03:00
parent 4d51beb350
commit 08e482a0e6
2 changed files with 133 additions and 32 deletions

View File

@ -8,24 +8,28 @@ version = "0.1.0"
description = "FastAPI Gateway for HubMC"
authors = ["itqop <leonkl32@gmail.com>"]
readme = "README.md"
packages = [
{include = "hubgw", from = "src"}
]
[tool.poetry.dependencies]
python = "^3.11"
fastapi = "^0.104.0"
uvicorn = {extras = ["standard"], version = "^0.24.0"}
pydantic = "^2.5.0"
pydantic-settings = "^2.1.0"
sqlalchemy = "^2.0.0"
asyncpg = "^0.29.0"
loguru = "^0.7.0"
python = "^3.12"
fastapi = "^0.116.0"
uvicorn = {extras = ["standard"], version = "^0.30.0"}
pydantic = "^2.12.0"
pydantic-settings = "^2.6.0"
sqlalchemy = "^2.0.44"
asyncpg = "^0.30.0"
loguru = "^0.7.3"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
pytest-asyncio = "^0.21.0"
httpx = "^0.25.0"
pytest = "^8.4.2"
pytest-asyncio = "^0.24.0"
httpx = "^0.27.0"
ruff = "^0.14.0"
black = "^24.10.0"
isort = "^6.0.1"
pytest-cov = "^5.0.0"
[tool.poetry.scripts]
hubgw = "hubgw.__main__:main"
[tool.poetry.packages]
{include = "hubgw", from = "src"}

View File

@ -1,27 +1,124 @@
"""Application configuration using Pydantic Settings."""
from pydantic_settings import BaseSettings
from pydantic import BaseModel, Field, computed_field
from pydantic_settings import BaseSettings, SettingsConfigDict
from typing import Optional
class AppSettings(BaseSettings):
class DatabaseSettings(BaseModel):
"""Database configuration settings."""
host: str = Field(
default="localhost",
description="Database host"
)
port: int = Field(
default=5432,
ge=1,
le=65535,
description="Database port"
)
user: str = Field(
default="user",
description="Database user"
)
password: str = Field(
default="pass",
description="Database password"
)
database: str = Field(
default="hubgw",
description="Database name"
)
pool_size: int = Field(
default=10,
ge=1,
le=100,
description="Database connection pool size"
)
max_overflow: int = Field(
default=10,
ge=0,
le=100,
description="Maximum number of overflow connections"
)
echo: bool = Field(
default=False,
description="Enable SQLAlchemy query logging"
)
@computed_field
@property
def dsn(self) -> str:
"""Generate database DSN from connection parameters."""
return (
f"postgresql+asyncpg://{self.user}:{self.password}"
f"@{self.host}:{self.port}/{self.database}"
)
class SecuritySettings(BaseModel):
"""Security configuration settings."""
api_key: str = Field(
default="your-api-key",
min_length=8,
description="API key for authentication"
)
rate_limit_per_min: Optional[int] = Field(
default=None,
ge=1,
description="Rate limit per minute (None = disabled)"
)
class AppSettings(BaseModel):
"""Application settings."""
# App settings
APP_ENV: str = "dev"
APP_HOST: str = "0.0.0.0"
APP_PORT: int = 8080
APP_LOG_LEVEL: str = "INFO"
env: str = Field(
default="dev",
description="Application environment (dev/prod/test)"
)
host: str = Field(
default="0.0.0.0",
description="Application host"
)
port: int = Field(
default=8080,
ge=1,
le=65535,
description="Application port"
)
log_level: str = Field(
default="INFO",
description="Logging level"
)
class Secrets(BaseSettings):
"""Main configuration container with all settings."""
# Database settings
DB_DSN: str = "postgresql+asyncpg://user:pass@localhost:5432/hubgw"
DB_POOL_SIZE: int = 10
DB_MAX_OVERFLOW: int = 10
app: AppSettings = Field(
default_factory=AppSettings,
description="Application settings"
)
database: DatabaseSettings = Field(
default_factory=DatabaseSettings,
description="Database settings"
)
security: SecuritySettings = Field(
default_factory=SecuritySettings,
description="Security settings"
)
# Security settings
API_KEY: str = "your-api-key"
RATE_LIMIT_PER_MIN: Optional[int] = None
class Config:
env_file = ".env"
case_sensitive = True
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
env_nested_delimiter="__",
case_sensitive=True,
extra="ignore"
)
# Global configuration instance
APP_CONFIG = Secrets()