Coverage for opt/mealie/lib/python3.12/site-packages/mealie/alembic/versions/2023-02-21-22.03.19_b04a08da2108_added_shopping_list_label_settings.py: 82%
35 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 14:03 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-12-05 14:03 +0000
1"""added shopping list label settings
3Revision ID: b04a08da2108
4Revises: 5ab195a474eb
5Create Date: 2023-21-02 22:03:19.837244
7"""
9from uuid import uuid4 1a
11import sqlalchemy as sa 1a
12from sqlalchemy import orm 1a
14import mealie.db.migration_types 1a
15from alembic import op 1a
16from mealie.db.models._model_utils.guid import GUID 1a
18# revision identifiers, used by Alembic.
19revision = "b04a08da2108" 1a
20down_revision = "5ab195a474eb" 1a
21branch_labels: str | tuple[str, ...] | None = None 1a
22depends_on: str | tuple[str, ...] | None = None 1a
25# Intermediate table definitions
26class SqlAlchemyBase(orm.DeclarativeBase): 1a
27 pass 1a
30class ShoppingList(SqlAlchemyBase): 1a
31 __tablename__ = "shopping_lists" 1a
33 id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate) 1a
34 group_id: orm.Mapped[GUID] = orm.mapped_column(GUID, sa.ForeignKey("groups.id"), nullable=False, index=True) 1a
37class MultiPurposeLabel(SqlAlchemyBase): 1a
38 __tablename__ = "multi_purpose_labels" 1a
40 id: orm.Mapped[GUID] = orm.mapped_column(GUID, primary_key=True, default=GUID.generate) 1a
41 group_id: orm.Mapped[GUID] = orm.mapped_column(GUID, sa.ForeignKey("groups.id"), nullable=False, index=True) 1a
44def populate_shopping_lists_multi_purpose_labels( 1a
45 shopping_lists_multi_purpose_labels_table: sa.Table, session: orm.Session
46):
47 shopping_lists = session.query(ShoppingList).options(orm.load_only(ShoppingList.id, ShoppingList.group_id)).all() 1a
49 shopping_lists_labels_data: list[dict] = [] 1a
50 for shopping_list in shopping_lists: 50 ↛ 51line 50 didn't jump to line 51 because the loop on line 50 never started1a
51 labels = session.query(MultiPurposeLabel).filter(MultiPurposeLabel.group_id == ShoppingList.group_id).all()
52 for i, label in enumerate(labels):
53 shopping_lists_labels_data.append(
54 {"id": uuid4(), "shopping_list_id": shopping_list.id, "label_id": label.id, "position": i}
55 )
57 op.bulk_insert(shopping_lists_multi_purpose_labels_table, shopping_lists_labels_data) 1a
58 session.commit() 1a
61def upgrade(): 1a
62 # ### commands auto generated by Alembic - please adjust! ###
63 shopping_lists_multi_purpose_labels_table = op.create_table( 1a
64 "shopping_lists_multi_purpose_labels",
65 sa.Column("created_at", sa.DateTime(), nullable=True),
66 sa.Column("update_at", sa.DateTime(), nullable=True),
67 sa.Column("id", mealie.db.migration_types.GUID(), nullable=False),
68 sa.Column("shopping_list_id", mealie.db.migration_types.GUID(), nullable=False),
69 sa.Column("label_id", mealie.db.migration_types.GUID(), nullable=False),
70 sa.Column("position", sa.Integer(), nullable=False),
71 sa.ForeignKeyConstraint(
72 ["label_id"],
73 ["multi_purpose_labels.id"],
74 ),
75 sa.ForeignKeyConstraint(
76 ["shopping_list_id"],
77 ["shopping_lists.id"],
78 ),
79 sa.PrimaryKeyConstraint("id", "shopping_list_id", "label_id"),
80 )
81 # ### end Alembic commands ###
83 session = orm.Session(bind=op.get_bind()) 1a
84 populate_shopping_lists_multi_purpose_labels(shopping_lists_multi_purpose_labels_table, session) 1a
87def downgrade(): 1a
88 # ### commands auto generated by Alembic - please adjust! ###
89 op.drop_table("shopping_lists_multi_purpose_labels")
90 # ### end Alembic commands ###