@@ -164,22 +164,29 @@ async def truncate_schema(conn: BaseDBAsyncClient, name: str) -> None:
164164 await conn .execute_script (f"SELECT truncate_schema('{ name } ')" )
165165
166166
167- async def wipe_schema (conn : BaseDBAsyncClient , name : str , immune_tables : Set [str ]) -> None :
167+ async def wipe_schema (
168+ conn : BaseDBAsyncClient ,
169+ schema_name : str ,
170+ immune_tables : Set [str ],
171+ ) -> None :
172+ """Truncate schema preserving immune tables. Executes in a transaction"""
168173 if isinstance (conn , SqliteClient ):
169174 raise NotImplementedError
170175
171- immune_schema_name = f'{ name } _immune'
172- if immune_tables :
173- await create_schema (conn , immune_schema_name )
174- for table in immune_tables :
175- await move_table (conn , table , name , immune_schema_name )
176+ immune_schema_name = f'{ schema_name } _immune'
176177
177- await truncate_schema (conn , name )
178+ async with conn ._in_transaction () as conn :
179+ if immune_tables :
180+ await create_schema (conn , immune_schema_name )
181+ for table in immune_tables :
182+ await move_table (conn , table , schema_name , immune_schema_name )
178183
179- if immune_tables :
180- for table in immune_tables :
181- await move_table (conn , table , immune_schema_name , name )
182- await drop_schema (conn , immune_schema_name )
184+ await truncate_schema (conn , schema_name )
185+
186+ if immune_tables :
187+ for table in immune_tables :
188+ await move_table (conn , table , immune_schema_name , schema_name )
189+ await drop_schema (conn , immune_schema_name )
183190
184191
185192async def drop_schema (conn : BaseDBAsyncClient , name : str ) -> None :
@@ -199,8 +206,9 @@ async def move_table(conn: BaseDBAsyncClient, name: str, schema: str, new_schema
199206
200207def prepare_models (package : Optional [str ]) -> None :
201208 """Prepare TortoiseORM models to use with DipDup.
202- Generate missing table names, validate models, increase decimal precision.
209+ Generate missing table names, validate models, increase decimal precision if needed .
203210 """
211+ # NOTE: Circular imports
204212 from dipdup .models import Model
205213
206214 decimal_context = decimal .getcontext ()
0 commit comments