Конфигурация¶
Порты, адреса баз, секреты — настройки обычно живут в переменных окружения.
Settings читает их за вас: объявите поля с типами и значениями по умолчанию —
получите готовые распарсенные значения.
Settings¶
from endocore import Settings
from pathlib import Path
class AppSettings(Settings):
debug: bool = False
db_url: str = "sqlite://app.db"
port: int = 8000
allowed_hosts: list = []
data_dir: Path = Path(".")
settings = AppSettings() # читает DEBUG, DB_URL, PORT, ALLOWED_HOSTS, DATA_DIR из env
- Каждый атрибут читается из переменной окружения В ВЕРХНЕМ РЕГИСТРЕ, приводится к типу аннотации, при отсутствии — берётся объявленный default.
- Поддерживаемые приведения:
bool(1/true/yes/on),int,float,Path,list/tuple/set(через запятую),str. - Переопределение при создании:
AppSettings(port=9000). - Поля, в имени которых есть
secret,password,passwd,token,keyилиdsn, маскируются вrepr, так что настройки не утекают в логи.
Добавьте префикс, если нужны переменные с пространством имён:
class AppSettings(Settings):
_env_prefix = "APP_" # читает APP_DEBUG, APP_PORT, ...
debug: bool = False
Отдайте его через DI:
Файлы .env¶
from endocore import load_dotenv
load_dotenv(".env") # строки KEY=VALUE -> os.environ (не перезапишет существующие)
Хелпер env()¶
from endocore import env
env("PORT", default=8000, cast=int)
env("DEBUG", cast=lambda v: v.lower() in {"1", "true", "yes"})
Опции приложения¶
Application (создаётся endo dev / ASGI-фабрикой) принимает:
| Опция | По умолчанию | Значение |
|---|---|---|
dev |
False |
включить перезагрузку в процессе |
default_version |
None |
"latest" резолвит пути без версии |
max_body_size |
16 МБ | отклонять более крупные тела запросов (413) |
openapi |
None |
отдавать /openapi.json и /docs; None = только при dev=True (в проде включайте явно: openapi=True / ENDOCORE_OPENAPI=1) |
openapi_title |
"EndoCore API" |
заголовок в схеме |
endo dev выносит основные из них во флаги (--default-version, --no-reload).