45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
"""Settings management."""
|
|
|
|
from pathlib import Path
|
|
from pydantic import Field
|
|
from pydantic_settings import (
|
|
BaseSettings,
|
|
SettingsConfigDict,
|
|
)
|
|
from sqlalchemy import URL
|
|
|
|
|
|
DEFAULT_DATABASE = "sshecret.db"
|
|
|
|
|
|
class BackendSettings(BaseSettings):
|
|
"""Backend settings."""
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".backend.env", env_prefix="sshecret_backend_"
|
|
)
|
|
|
|
database: str = Field(default=DEFAULT_DATABASE)
|
|
admin_token: str | None = Field(default=None, alias="sshecret_admin_backend_token")
|
|
sshd_token: str | None = Field(default=None, alias="sshecret_sshd_backend_token")
|
|
|
|
@property
|
|
def db_url(self) -> URL:
|
|
"""Construct database url."""
|
|
return URL.create(drivername="sqlite", database=self.database)
|
|
|
|
@property
|
|
def async_db_url(self) -> URL:
|
|
"""Construct database url with sync handling."""
|
|
return URL.create(drivername="sqlite+aiosqlite", database=self.database)
|
|
|
|
@property
|
|
def db_exists(self) -> bool:
|
|
"""Check if databatase exists."""
|
|
return Path(self.database).exists()
|
|
|
|
|
|
def get_settings() -> BackendSettings:
|
|
"""Get settings."""
|
|
return BackendSettings()
|