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 13:45 +0000

1"""added shopping list label settings 

2 

3Revision ID: b04a08da2108 

4Revises: 5ab195a474eb 

5Create Date: 2023-21-02 22:03:19.837244 

6 

7""" 

8 

9from uuid import uuid4 1a

10 

11import sqlalchemy as sa 1a

12from sqlalchemy import orm 1a

13 

14import mealie.db.migration_types 1a

15from alembic import op 1a

16from mealie.db.models._model_utils.guid import GUID 1a

17 

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

23 

24 

25# Intermediate table definitions 

26class SqlAlchemyBase(orm.DeclarativeBase): 1a

27 pass 1a

28 

29 

30class ShoppingList(SqlAlchemyBase): 1a

31 __tablename__ = "shopping_lists" 1a

32 

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

35 

36 

37class MultiPurposeLabel(SqlAlchemyBase): 1a

38 __tablename__ = "multi_purpose_labels" 1a

39 

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

42 

43 

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

48 

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 ) 

56 

57 op.bulk_insert(shopping_lists_multi_purpose_labels_table, shopping_lists_labels_data) 1a

58 session.commit() 1a

59 

60 

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 ### 

82 

83 session = orm.Session(bind=op.get_bind()) 1a

84 populate_shopping_lists_multi_purpose_labels(shopping_lists_multi_purpose_labels_table, session) 1a

85 

86 

87def downgrade(): 1a

88 # ### commands auto generated by Alembic - please adjust! ### 

89 op.drop_table("shopping_lists_multi_purpose_labels") 

90 # ### end Alembic commands ###