48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Кастомизация профиля: о себе (bio) и аватар (avatar_path).
|
|
|
|
Идемпотентна: на свежей БД (0001 создаёт схему из актуальных моделей через create_all)
|
|
столбцы уже есть → no-op; на существующей БД — добавляет столбцы. render_as_batch включён
|
|
в env.py (нужен для ALTER в SQLite).
|
|
|
|
Revision ID: 0004_user_profile
|
|
Revises: 0003_match_lifecycle
|
|
Create Date: 2026-06-17
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from sqlalchemy import inspect
|
|
|
|
from alembic import op
|
|
|
|
revision: str = "0004_user_profile"
|
|
down_revision: Union[str, None] = "0003_match_lifecycle"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
bind = op.get_bind()
|
|
insp = inspect(bind)
|
|
cols = {c["name"] for c in insp.get_columns("users")}
|
|
|
|
add = []
|
|
if "bio" not in cols:
|
|
add.append(sa.Column("bio", sa.Text(), nullable=True))
|
|
if "avatar_path" not in cols:
|
|
add.append(sa.Column("avatar_path", sa.String(255), nullable=True))
|
|
|
|
if add:
|
|
with op.batch_alter_table("users") as b:
|
|
for col in add:
|
|
b.add_column(col)
|
|
|
|
|
|
def downgrade() -> None:
|
|
with op.batch_alter_table("users") as b:
|
|
for name in ("avatar_path", "bio"):
|
|
try:
|
|
b.drop_column(name)
|
|
except Exception: # noqa: BLE001
|
|
pass
|