Coverage for /usr/local/lib/python3.12/site-packages/prefect/server/database/_migrations/versions/sqlite/2024_01_22_120214_265eb1a2da4c_create_deployment_schedule_and_add_.py: 69%

32 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-12-05 11:21 +0000

1"""Create `deployment_schedule` and add `Deployment.paused` 

2 

3Revision ID: 265eb1a2da4c 

4Revises: c63a0a6dc787 

5Create Date: 2024-01-22 12:02:14.583544 

6 

7""" 

8 

9import sqlalchemy as sa 1a

10from alembic import op 1a

11 

12import prefect 1a

13 

14# revision identifiers, used by Alembic. 

15revision = "265eb1a2da4c" 1a

16down_revision = "c63a0a6dc787" 1a

17branch_labels = None 1a

18depends_on = None 1a

19 

20 

21def upgrade(): 1a

22 op.execute("PRAGMA foreign_keys=OFF") 1a

23 

24 op.create_table( 1a

25 "deployment_schedule", 

26 sa.Column( 

27 "id", 

28 prefect.server.utilities.database.UUID(), 

29 server_default=sa.text( 

30 "(\n (\n lower(hex(randomblob(4)))\n || '-'\n " 

31 " || lower(hex(randomblob(2)))\n || '-4'\n ||" 

32 " substr(lower(hex(randomblob(2))),2)\n || '-'\n ||" 

33 " substr('89ab',abs(random()) % 4 + 1, 1)\n ||" 

34 " substr(lower(hex(randomblob(2))),2)\n || '-'\n ||" 

35 " lower(hex(randomblob(6)))\n )\n )" 

36 ), 

37 nullable=False, 

38 ), 

39 sa.Column( 

40 "created", 

41 prefect.server.utilities.database.Timestamp(timezone=True), 

42 server_default=sa.text("(strftime('%Y-%m-%d %H:%M:%f000', 'now'))"), 

43 nullable=False, 

44 ), 

45 sa.Column( 

46 "updated", 

47 prefect.server.utilities.database.Timestamp(timezone=True), 

48 server_default=sa.text("(strftime('%Y-%m-%d %H:%M:%f000', 'now'))"), 

49 nullable=False, 

50 ), 

51 sa.Column( 

52 "schedule", 

53 prefect.server.utilities.database.Pydantic( 

54 prefect.server.schemas.schedules.SCHEDULE_TYPES 

55 ), 

56 nullable=False, 

57 ), 

58 sa.Column("active", sa.Boolean(), nullable=False), 

59 sa.Column( 

60 "deployment_id", prefect.server.utilities.database.UUID(), nullable=False 

61 ), 

62 sa.ForeignKeyConstraint( 

63 ["deployment_id"], 

64 ["deployment.id"], 

65 name=op.f("fk_deployment_schedule__deployment_id__deployment"), 

66 ondelete="CASCADE", 

67 ), 

68 sa.PrimaryKeyConstraint("id", name=op.f("pk_deployment_schedule")), 

69 ) 

70 with op.batch_alter_table("deployment_schedule", schema=None) as batch_op: 1a

71 batch_op.create_index( 1a

72 batch_op.f("ix_deployment_schedule__deployment_id"), 

73 ["deployment_id"], 

74 unique=False, 

75 ) 

76 batch_op.create_index( 1a

77 batch_op.f("ix_deployment_schedule__updated"), ["updated"], unique=False 

78 ) 

79 

80 with op.batch_alter_table("deployment", schema=None) as batch_op: 1a

81 batch_op.add_column( 1a

82 sa.Column("paused", sa.Boolean(), server_default="0", nullable=False) 

83 ) 

84 batch_op.create_index( 1a

85 batch_op.f("ix_deployment__paused"), ["paused"], unique=False 

86 ) 

87 

88 backfill_schedules = """ 1a

89 INSERT INTO deployment_schedule (deployment_id, schedule, active) 

90 SELECT 

91 d.id AS deployment_id, 

92 d.schedule, 

93 d.is_schedule_active AS active 

94 FROM 

95 deployment d 

96 WHERE 

97 d.schedule IS NOT NULL 

98 and d.schedule != 'null'; 

99 """ 

100 backfill_paused = """ 1a

101 UPDATE deployment SET paused = NOT is_schedule_active where paused = is_schedule_active; 

102 """ 

103 

104 op.execute(sa.text(backfill_schedules)) 1a

105 op.execute(sa.text(backfill_paused)) 1a

106 op.execute("PRAGMA foreign_keys=ON") 1a

107 

108 

109def downgrade(): 1a

110 op.execute("PRAGMA foreign_keys=OFF") 

111 

112 with op.batch_alter_table("deployment", schema=None) as batch_op: 

113 batch_op.drop_index(batch_op.f("ix_deployment__paused")) 

114 batch_op.drop_column("paused") 

115 

116 with op.batch_alter_table("deployment_schedule", schema=None) as batch_op: 

117 batch_op.drop_constraint("fk_deployment_schedule__deployment_id__deployment") 

118 batch_op.drop_index(batch_op.f("ix_deployment_schedule__updated")) 

119 batch_op.drop_index(batch_op.f("ix_deployment_schedule__deployment_id")) 

120 

121 op.drop_table("deployment_schedule") 

122 op.execute("PRAGMA foreign_keys=ON")