Mechanical, whole-tree `ruff format` pass — no behaviour change. Recorded in .git-blame-ignore-revs (next commit) so git blame skips it.
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""live YouTube search: provenance flags
|
|
|
|
Revision ID: 0028_live_search_provenance
|
|
Revises: 0027_message_e2ee
|
|
Create Date: 2026-06-29
|
|
|
|
Adds provenance flags so videos (and channels) that entered the catalog only because a live
|
|
YouTube search surfaced them can be told apart from organically-synced content and hidden from
|
|
the Library by default:
|
|
- videos.via_search — this video first arrived via search
|
|
- channels.from_search — this channel exists only because search surfaced one of its videos
|
|
Both default false (every existing row is organic), indexed for the feed's exclude filter.
|
|
"""
|
|
|
|
from typing import Sequence, Union
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision: str = "0028_live_search_provenance"
|
|
down_revision: Union[str, None] = "0027_message_e2ee"
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
op.add_column(
|
|
"videos",
|
|
sa.Column("via_search", sa.Boolean(), nullable=False, server_default="false"),
|
|
)
|
|
op.create_index("ix_videos_via_search", "videos", ["via_search"])
|
|
op.add_column(
|
|
"channels",
|
|
sa.Column("from_search", sa.Boolean(), nullable=False, server_default="false"),
|
|
)
|
|
op.create_index("ix_channels_from_search", "channels", ["from_search"])
|
|
|
|
|
|
def downgrade() -> None:
|
|
op.drop_index("ix_channels_from_search", table_name="channels")
|
|
op.drop_column("channels", "from_search")
|
|
op.drop_index("ix_videos_via_search", table_name="videos")
|
|
op.drop_column("videos", "via_search")
|