Coverage for opt/mealie/lib/python3.12/site-packages/mealie/alembic/versions/2023-08-06-21.00.34_04ac51cbe9a4_added_group_slug.py: 57%
33 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 03:04 +0000
1"""added group slug
3Revision ID: 04ac51cbe9a4
4Revises: b3dbb554ba53
5Create Date: 2023-08-06 21:00:34.582905
7"""
9import sqlalchemy as sa
10from slugify import slugify
11from sqlalchemy.orm import Session
13from alembic import op
14from mealie.db.models.group.group import Group
16# revision identifiers, used by Alembic.
17revision = "04ac51cbe9a4"
18down_revision = "b3dbb554ba53"
19branch_labels: str | tuple[str, ...] | None = None
20depends_on: str | tuple[str, ...] | None = None
23def populate_group_slugs(session: Session):
24 groups: list[Group] = session.query(Group).all()
25 seen_slugs: set[str] = set()
26 for group in groups: 26 ↛ 27line 26 didn't jump to line 27 because the loop on line 26 never started
27 original_name = group.name
28 new_name = original_name
29 attempts = 0
30 while True:
31 slug = slugify(new_name)
32 if slug not in seen_slugs:
33 break
35 attempts += 1
36 new_name = f"{original_name} ({attempts})"
38 seen_slugs.add(slug)
39 session.execute(
40 sa.text(f"UPDATE {Group.__tablename__} SET name=:name, slug=:slug WHERE id=:id").bindparams(
41 name=new_name, slug=slug, id=group.id
42 )
43 )
45 session.commit()
48def upgrade():
49 # ### commands auto generated by Alembic - please adjust! ###
50 op.add_column("groups", sa.Column("slug", sa.String(), nullable=True))
51 op.create_index(op.f("ix_groups_slug"), "groups", ["slug"], unique=True)
52 # ### end Alembic commands ###
54 session = Session(bind=op.get_bind())
55 populate_group_slugs(session)
58def downgrade():
59 # ### commands auto generated by Alembic - please adjust! ###
60 op.drop_index(op.f("ix_groups_slug"), table_name="groups")
61 op.drop_column("groups", "slug")
62 # ### end Alembic commands ###