@@ -25,32 +25,29 @@ def migrate():
25
25
26
26
@migrate .command ()
27
27
@click .option ("--migrations-dir" , help = "Directory containing schema migration files" )
28
- def status (migrations_dir : Optional [str ]):
28
+ async def status (migrations_dir : Optional [str ]):
29
29
"""Show current schema migration status from files."""
30
30
31
- async def _status ():
32
- dir_path = migrations_dir or os .path .join (
33
- get_root_migrations_dir (), "schema-migrations"
34
- )
35
- migrator = SchemaMigrator (migrations_dir = dir_path )
36
- status_info = await migrator .status ()
31
+ dir_path = migrations_dir or os .path .join (
32
+ get_root_migrations_dir (), "schema-migrations"
33
+ )
34
+ migrator = SchemaMigrator (migrations_dir = dir_path )
35
+ status_info = await migrator .status ()
37
36
38
- click .echo ("Schema Migration Status:" )
39
- click .echo (f" Total migrations: { status_info ['total_migrations' ]} " )
40
- click .echo (f" Applied: { status_info ['applied_count' ]} " )
41
- click .echo (f" Pending: { status_info ['pending_count' ]} " )
42
-
43
- if status_info ["pending_migrations" ]:
44
- click .echo ("\n Pending migrations:" )
45
- for migration_id in status_info ["pending_migrations" ]:
46
- click .echo (f"- { migration_id } " )
37
+ click .echo ("Schema Migration Status:" )
38
+ click .echo (f" Total migrations: { status_info ['total_migrations' ]} " )
39
+ click .echo (f" Applied: { status_info ['applied_count' ]} " )
40
+ click .echo (f" Pending: { status_info ['pending_count' ]} " )
47
41
48
- if status_info ["applied_migrations " ]:
49
- click .echo ("\n Applied migrations:" )
50
- for migration_id in status_info ["applied_migrations " ]:
51
- click .echo (f"- { migration_id } " )
42
+ if status_info ["pending_migrations " ]:
43
+ click .echo ("\n Pending migrations:" )
44
+ for migration_id in status_info ["pending_migrations " ]:
45
+ click .echo (f"- { migration_id } " )
52
46
53
- run_async (_status ())
47
+ if status_info ["applied_migrations" ]:
48
+ click .echo ("\n Applied migrations:" )
49
+ for migration_id in status_info ["applied_migrations" ]:
50
+ click .echo (f"- { migration_id } " )
54
51
55
52
56
53
@migrate .command ()
@@ -66,7 +63,7 @@ async def _status():
66
63
is_flag = True ,
67
64
help = "Skip confirmation prompt to create directory or run" ,
68
65
)
69
- def run (
66
+ async def run (
70
67
migrations_dir : Optional [str ],
71
68
dry_run : bool ,
72
69
verbose : bool ,
@@ -75,43 +72,38 @@ def run(
75
72
):
76
73
"""Run pending schema migrations from files."""
77
74
78
- async def _run ():
79
- dir_path = migrations_dir or os .path .join (
80
- get_root_migrations_dir (), "schema-migrations"
81
- )
75
+ dir_path = migrations_dir or os .path .join (
76
+ get_root_migrations_dir (), "schema-migrations"
77
+ )
78
+
79
+ if not os .path .exists (dir_path ):
80
+ if yes or click .confirm (f"Create schema migrations directory at '{ dir_path } '?" ):
81
+ os .makedirs (dir_path , exist_ok = True )
82
+ else :
83
+ click .echo ("Aborted." )
84
+ return
85
+
86
+ migrator = SchemaMigrator (migrations_dir = dir_path )
82
87
83
- if not os .path .exists (dir_path ):
84
- if yes or click .confirm (
85
- f"Create schema migrations directory at '{ dir_path } '?"
88
+ # Show list for confirmation
89
+ if not dry_run and not yes :
90
+ status_info = await migrator .status ()
91
+ if status_info ["pending_migrations" ]:
92
+ listing = "\n " .join (
93
+ f"- { m } "
94
+ for m in status_info ["pending_migrations" ][
95
+ : (limit or len (status_info ["pending_migrations" ]))
96
+ ]
97
+ )
98
+ if not click .confirm (
99
+ f"Run { min (limit or len (status_info ['pending_migrations' ]), len (status_info ['pending_migrations' ]))} migration(s)?\n { listing } "
86
100
):
87
- os .makedirs (dir_path , exist_ok = True )
88
- else :
89
101
click .echo ("Aborted." )
90
102
return
91
103
92
- migrator = SchemaMigrator (migrations_dir = dir_path )
93
-
94
- # Show list for confirmation
95
- if not dry_run and not yes :
96
- status_info = await migrator .status ()
97
- if status_info ["pending_migrations" ]:
98
- listing = "\n " .join (
99
- f"- { m } "
100
- for m in status_info ["pending_migrations" ][
101
- : (limit or len (status_info ["pending_migrations" ]))
102
- ]
103
- )
104
- if not click .confirm (
105
- f"Run { min (limit or len (status_info ['pending_migrations' ]), len (status_info ['pending_migrations' ]))} migration(s)?\n { listing } "
106
- ):
107
- click .echo ("Aborted." )
108
- return
109
-
110
- count = await migrator .run (dry_run = dry_run , limit = limit , verbose = verbose )
111
- if verbose and not dry_run :
112
- click .echo (f"Successfully applied { count } migration(s)." )
113
-
114
- run_async (_run ())
104
+ count = await migrator .run (dry_run = dry_run , limit = limit , verbose = verbose )
105
+ if verbose and not dry_run :
106
+ click .echo (f"Successfully applied { count } migration(s)." )
115
107
116
108
117
109
@migrate .command ()
@@ -120,31 +112,26 @@ async def _run():
120
112
@click .option (
121
113
"--yes" , "-y" , is_flag = True , help = "Skip confirmation prompt to create directory"
122
114
)
123
- def create (name : str , migrations_dir : Optional [str ], yes : bool ):
115
+ async def create (name : str , migrations_dir : Optional [str ], yes : bool ):
124
116
"""Create a new schema migration snapshot file from current pending operations."""
125
117
126
- async def _create ():
127
- dir_path = migrations_dir or os .path .join (
128
- get_root_migrations_dir (), "schema-migrations"
129
- )
130
-
131
- if not os .path .exists (dir_path ):
132
- if yes or click .confirm (
133
- f"Create schema migrations directory at '{ dir_path } '?"
134
- ):
135
- os .makedirs (dir_path , exist_ok = True )
136
- else :
137
- click .echo ("Aborted." )
138
- return
118
+ dir_path = migrations_dir or os .path .join (
119
+ get_root_migrations_dir (), "schema-migrations"
120
+ )
139
121
140
- migrator = SchemaMigrator (migrations_dir = dir_path )
141
- filepath = await migrator .create_migration_file (name )
142
- if filepath :
143
- click .echo (f"Created migration: { filepath } " )
122
+ if not os .path .exists (dir_path ):
123
+ if yes or click .confirm (f"Create schema migrations directory at '{ dir_path } '?" ):
124
+ os .makedirs (dir_path , exist_ok = True )
144
125
else :
145
- click .echo ("No pending schema changes detected. Nothing to snapshot." )
126
+ click .echo ("Aborted." )
127
+ return
146
128
147
- run_async (_create ())
129
+ migrator = SchemaMigrator (migrations_dir = dir_path )
130
+ filepath = await migrator .create_migration_file (name )
131
+ if filepath :
132
+ click .echo (f"Created migration: { filepath } " )
133
+ else :
134
+ click .echo ("No pending schema changes detected. Nothing to snapshot." )
148
135
149
136
150
137
@migrate .command ()
@@ -160,7 +147,7 @@ async def _create():
160
147
is_flag = True ,
161
148
help = "Skip confirmation prompt to create directory or run" ,
162
149
)
163
- def rollback (
150
+ async def rollback (
164
151
migration_id : str ,
165
152
migrations_dir : Optional [str ],
166
153
dry_run : bool ,
@@ -169,37 +156,30 @@ def rollback(
169
156
):
170
157
"""Rollback a specific schema migration by ID."""
171
158
172
- async def _rollback ():
173
- dir_path = migrations_dir or os .path .join (
174
- get_root_migrations_dir (), "schema-migrations"
175
- )
176
-
177
- if not os .path .exists (dir_path ):
178
- if yes or click .confirm (
179
- f"Create schema migrations directory at '{ dir_path } '?"
180
- ):
181
- os .makedirs (dir_path , exist_ok = True )
182
- else :
183
- click .echo ("Aborted." )
184
- return
185
-
186
- migrator = SchemaMigrator (migrations_dir = dir_path )
187
-
188
- if not yes and not dry_run :
189
- if not click .confirm (f"Rollback migration '{ migration_id } '?" ):
190
- click .echo ("Aborted." )
191
- return
159
+ dir_path = migrations_dir or os .path .join (
160
+ get_root_migrations_dir (), "schema-migrations"
161
+ )
192
162
193
- success = await migrator .rollback (
194
- migration_id , dry_run = dry_run , verbose = verbose
195
- )
196
- if success :
197
- if verbose :
198
- click .echo (f"Successfully rolled back migration: { migration_id } " )
163
+ if not os .path .exists (dir_path ):
164
+ if yes or click .confirm (f"Create schema migrations directory at '{ dir_path } '?" ):
165
+ os .makedirs (dir_path , exist_ok = True )
199
166
else :
200
- click .echo (
201
- f"Migration '{ migration_id } ' does not support rollback or is not applied." ,
202
- err = True ,
203
- )
204
-
205
- run_async (_rollback ())
167
+ click .echo ("Aborted." )
168
+ return
169
+
170
+ migrator = SchemaMigrator (migrations_dir = dir_path )
171
+
172
+ if not yes and not dry_run :
173
+ if not click .confirm (f"Rollback migration '{ migration_id } '?" ):
174
+ click .echo ("Aborted." )
175
+ return
176
+
177
+ success = await migrator .rollback (migration_id , dry_run = dry_run , verbose = verbose )
178
+ if success :
179
+ if verbose :
180
+ click .echo (f"Successfully rolled back migration: { migration_id } " )
181
+ else :
182
+ click .echo (
183
+ f"Migration '{ migration_id } ' does not support rollback or is not applied." ,
184
+ err = True ,
185
+ )
0 commit comments