33Generates op.create_table() / op.create_index() migration code
44for initial schema setup, deployable as Alembic revision scripts.
55"""
6+
67from __future__ import annotations
78
89from ..ir import Column , ColumnType , Schema , Table
@@ -73,15 +74,13 @@ def generate(
7374 for enum_type in schema .enums :
7475 values = ", " .join (f"'{ v } '" for v in enum_type .values )
7576 lines .append (
76- f" op.execute(\ " CREATE TYPE { enum_type .name } AS ENUM ({ values } )\" )"
77+ f' op.execute("CREATE TYPE { enum_type .name } AS ENUM ({ values } )")'
7778 )
7879 lines .append ("" )
7980
8081 lines .append ("# revision identifiers, used by Alembic." )
8182 lines .append (f"revision = '{ revision_id } '" )
82- lines .append (
83- f"down_revision = { repr (down_revision )} "
84- )
83+ lines .append (f"down_revision = { repr (down_revision )} " )
8584 lines .append ("" )
8685
8786 # ── upgrade() ──
@@ -114,15 +113,11 @@ def generate(
114113 for table in reversed (schema .tables ):
115114 lines .append (f" op.drop_table('{ table .name } ')" )
116115 for enum_type in reversed (schema .enums ):
117- lines .append (
118- f" op.execute('DROP TYPE { enum_type .name } ')"
119- )
116+ lines .append (f" op.execute('DROP TYPE { enum_type .name } ')" )
120117
121118 return "\n " .join (lines ) + "\n "
122119
123- def _generate_table (
124- self , table : Table
125- ) -> tuple [list [str ], list [str ]]:
120+ def _generate_table (self , table : Table ) -> tuple [list [str ], list [str ]]:
126121 """Generate op.create_table() and op.create_index() calls for a table.
127122
128123 Returns (create_table_lines, create_index_lines).
@@ -133,15 +128,11 @@ def _generate_table(
133128
134129 table_lines : list [str ] = []
135130 if col_defs :
136- table_lines .append (
137- f" op.create_table('{ table .name } ',"
138- )
131+ table_lines .append (f" op.create_table('{ table .name } '," )
139132 table_lines .extend (col_defs )
140133 table_lines .append (" )" )
141134 else :
142- table_lines .append (
143- f" op.create_table('{ table .name } ')"
144- )
135+ table_lines .append (f" op.create_table('{ table .name } ')" )
145136
146137 index_lines : list [str ] = []
147138 for idx in table .indexes :
@@ -154,15 +145,16 @@ def _generate_table(
154145 )
155146 else :
156147 index_lines .append (
157- f" op.create_index('{ idx_name } ', "
158- f"'{ table .name } ', [{ col_list } ])"
148+ f" op.create_index('{ idx_name } ', '{ table .name } ', [{ col_list } ])"
159149 )
160150
161151 return table_lines , index_lines
162152
163153 def _column_def (self , col : Column ) -> str :
164154 """Generate a sa.Column() definition string."""
165- sa_type = build_type_string (col , self ._TYPE_MAP ,
155+ sa_type = build_type_string (
156+ col ,
157+ self ._TYPE_MAP ,
166158 string_fmt = "{}({})" ,
167159 string_default = "sa.String" ,
168160 decimal_fmt = "{}({}, {})" ,
@@ -184,12 +176,16 @@ def _column_def(self, col: Column) -> str:
184176 kwargs .append ("unique=True" )
185177
186178 # fn: defaults (server_default)
187- fn_default = resolve_fn_default (col , fn_wrapper = "sa.func.{}" , expr_fallback = "sa.text('{}')" )
179+ fn_default = resolve_fn_default (
180+ col , fn_wrapper = "sa.func.{}" , expr_fallback = "sa.text('{}')"
181+ )
188182 if fn_default :
189183 kwargs .append (f"server_default={ fn_default } " )
190184
191185 # Literal defaults
192- if col .default is not None and not (isinstance (col .default , str ) and col .default .startswith ("fn:" )):
186+ if col .default is not None and not (
187+ isinstance (col .default , str ) and col .default .startswith ("fn:" )
188+ ):
193189 lit = format_literal_default (col )
194190 kwargs .append (f"server_default={ lit } " )
195191
0 commit comments