1 """Create `deployment_schedule` and add `Deployment.paused`
2
3 Revision ID: 265eb1a2da4c
4 Revises: c63a0a6dc787
5 Create Date: 2024-01-22 12:02:14.583544
6
7 """
8
9 import sqlalchemy as sa 1 ctx 1a
10 from alembic import op 1 ctx 1a
11
12 import prefect 1 ctx 1a
13
14 # revision identifiers, used by Alembic.
15 revision = "265eb1a2da4c" 1 ctx 1a
16 down_revision = "c63a0a6dc787" 1 ctx 1a
17 branch_labels = None 1 ctx 1a
18 depends_on = None 1 ctx 1a
19
20
21 def upgrade ( ) : 1 ctx 1a
22 op . execute ( "PRAGMA foreign_keys=OFF" ) 1 ctx 1a
23
24 op . create_table ( 1 ctx 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 : 1 ctx 1a
71 batch_op . create_index ( 1 ctx 1a
72 batch_op . f ( "ix_deployment_schedule__deployment_id" ) ,
73 [ "deployment_id" ] ,
74 unique = False ,
75 )
76 batch_op . create_index ( 1 ctx 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 : 1 ctx 1a
81 batch_op . add_column ( 1 ctx 1a
82 sa . Column ( "paused" , sa . Boolean ( ) , server_default = "0" , nullable = False )
83 )
84 batch_op . create_index ( 1 ctx 1a
85 batch_op . f ( "ix_deployment__paused" ) , [ "paused" ] , unique = False
86 )
87
88 backfill_schedules = """ 1 ctx 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 = """ 1 ctx 1a
101 UPDATE deployment SET paused = NOT is_schedule_active where paused = is_schedule_active;
102 """
103
104 op . execute ( sa . text ( backfill_schedules ) ) 1 ctx 1a
105 op . execute ( sa . text ( backfill_paused ) ) 1 ctx 1a
106 op . execute ( "PRAGMA foreign_keys=ON" ) 1 ctx 1a
107
108
109 def downgrade ( ) : 1 ctx 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" )