Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0787745098 |
@ -2,6 +2,12 @@
|
||||
|
||||
Формат: семантическое версионирование `MAJOR.MINOR.PATCH`. Git-теги `v1.0.0`, `v1.1.0` и т.д. — см. [docs/VERSIONING.md](docs/VERSIONING.md).
|
||||
|
||||
## [1.4.1] — 2026-04-03
|
||||
|
||||
### Исправлено
|
||||
|
||||
- **Alembic:** к URL с `postgresql+psycopg` добавляется `client_encoding=utf8`, чтобы `alembic upgrade head` не падал с `TypeError: ... bytes-like object` при некоторых настройках кодировки на стороне PostgreSQL/psycopg3.
|
||||
|
||||
## [1.4.0] — 2026-04-03
|
||||
|
||||
Правое меню «Разделы» на главной и на страницах модулей, пункты из `MODULE_MOUNTS` (`title` + `ui_router`).
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# onGuard24
|
||||
|
||||
**Версия: 1.4.0** · Модульный монолит на **Python (FastAPI)**: ядро, приём алертов из Grafana, заготовки модулей (дежурства, контакты, светофор), PostgreSQL, проверки Vault / Grafana / Forgejo.
|
||||
**Версия: 1.4.1** · Модульный монолит на **Python (FastAPI)**: ядро, приём алертов из Grafana, заготовки модулей (дежурства, контакты, светофор), PostgreSQL, проверки Vault / Grafana / Forgejo.
|
||||
|
||||
| Документ | Назначение |
|
||||
|----------|------------|
|
||||
@ -82,7 +82,7 @@ Vite проксирует `/api` на `http://127.0.0.1:8080` (см. `web/vite.c
|
||||
|
||||
## Миграции БД (Alembic)
|
||||
|
||||
- URL БД: переменная **`DATABASE_URL`** (как у приложения; в `alembic/env.py` используется синхронный драйвер `postgresql+psycopg`).
|
||||
- URL БД: переменная **`DATABASE_URL`** (как у приложения; в `alembic/env.py` используется синхронный драйвер `postgresql+psycopg`). К URL автоматически добавляется **`client_encoding=utf8`**, чтобы миграции не падали с `TypeError: ... bytes-like object`, если на сервере PostgreSQL включён режим вроде `SQL_ASCII`.
|
||||
- Применить схему: `alembic upgrade head`.
|
||||
- Новая ревизия: `alembic revision -m "описание"` и правка файла в `alembic/versions/`.
|
||||
|
||||
|
||||
@ -20,6 +20,14 @@ if config.config_file_name is not None:
|
||||
target_metadata = None
|
||||
|
||||
|
||||
def _ensure_psycopg_client_encoding(url: str) -> str:
|
||||
"""Иначе psycopg3 при SQL_ASCII на сервере отдаёт version() как bytes → падает SQLAlchemy re.match."""
|
||||
if "+psycopg" not in url or "client_encoding=" in url:
|
||||
return url
|
||||
join = "&" if "?" in url else "?"
|
||||
return f"{url}{join}client_encoding=utf8"
|
||||
|
||||
|
||||
def get_sync_url() -> str:
|
||||
url = os.environ.get("DATABASE_URL", "").strip()
|
||||
if not url:
|
||||
@ -30,7 +38,7 @@ def get_sync_url() -> str:
|
||||
url = url.replace("postgresql://", "postgresql+psycopg://", 1)
|
||||
if "+asyncpg" in url:
|
||||
url = url.replace("+asyncpg", "+psycopg")
|
||||
return url
|
||||
return _ensure_psycopg_client_encoding(url)
|
||||
|
||||
|
||||
def run_migrations_offline() -> None:
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
"""onGuard24 — модульный монолит (ядро + модули)."""
|
||||
|
||||
__version__ = "1.4.0"
|
||||
__version__ = "1.4.1"
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "onguard24"
|
||||
version = "1.4.0"
|
||||
version = "1.4.1"
|
||||
description = "onGuard24 — модульный сервис (аналог IRM)"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
|
||||
Reference in New Issue
Block a user