alembic 1.13.1__py3-none-any.whl → 1.13.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
alembic/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  from . import context
2
2
  from . import op
3
3
 
4
- __version__ = "1.13.1"
4
+ __version__ = "1.13.2"
@@ -596,9 +596,9 @@ class RevisionContext:
596
596
  migration_script = self.generated_revisions[-1]
597
597
  if not getattr(migration_script, "_needs_render", False):
598
598
  migration_script.upgrade_ops_list[-1].upgrade_token = upgrade_token
599
- migration_script.downgrade_ops_list[
600
- -1
601
- ].downgrade_token = downgrade_token
599
+ migration_script.downgrade_ops_list[-1].downgrade_token = (
600
+ downgrade_token
601
+ )
602
602
  migration_script._needs_render = True
603
603
  else:
604
604
  migration_script._upgrade_ops.append(
@@ -983,7 +983,7 @@ def _normalize_computed_default(sqltext: str) -> str:
983
983
 
984
984
  """
985
985
 
986
- return re.sub(r"[ \(\)'\"`\[\]]", "", sqltext).lower()
986
+ return re.sub(r"[ \(\)'\"`\[\]\t\r\n]", "", sqltext).lower()
987
987
 
988
988
 
989
989
  def _compare_computed_default(
@@ -187,9 +187,11 @@ def _render_create_table_comment(
187
187
  prefix=_alembic_autogenerate_prefix(autogen_context),
188
188
  tname=op.table_name,
189
189
  comment="%r" % op.comment if op.comment is not None else None,
190
- existing="%r" % op.existing_comment
191
- if op.existing_comment is not None
192
- else None,
190
+ existing=(
191
+ "%r" % op.existing_comment
192
+ if op.existing_comment is not None
193
+ else None
194
+ ),
193
195
  schema="'%s'" % op.schema if op.schema is not None else None,
194
196
  indent=" ",
195
197
  )
@@ -216,9 +218,11 @@ def _render_drop_table_comment(
216
218
  return templ.format(
217
219
  prefix=_alembic_autogenerate_prefix(autogen_context),
218
220
  tname=op.table_name,
219
- existing="%r" % op.existing_comment
220
- if op.existing_comment is not None
221
- else None,
221
+ existing=(
222
+ "%r" % op.existing_comment
223
+ if op.existing_comment is not None
224
+ else None
225
+ ),
222
226
  schema="'%s'" % op.schema if op.schema is not None else None,
223
227
  indent=" ",
224
228
  )
@@ -328,9 +332,11 @@ def _add_index(autogen_context: AutogenContext, op: ops.CreateIndexOp) -> str:
328
332
  _get_index_rendered_expressions(index, autogen_context)
329
333
  ),
330
334
  "unique": index.unique or False,
331
- "schema": (", schema=%r" % _ident(index.table.schema))
332
- if index.table.schema
333
- else "",
335
+ "schema": (
336
+ (", schema=%r" % _ident(index.table.schema))
337
+ if index.table.schema
338
+ else ""
339
+ ),
334
340
  "kwargs": ", " + ", ".join(opts) if opts else "",
335
341
  }
336
342
  return text
@@ -592,9 +598,11 @@ def _get_index_rendered_expressions(
592
598
  idx: Index, autogen_context: AutogenContext
593
599
  ) -> List[str]:
594
600
  return [
595
- repr(_ident(getattr(exp, "name", None)))
596
- if isinstance(exp, sa_schema.Column)
597
- else _render_potential_expr(exp, autogen_context, is_index=True)
601
+ (
602
+ repr(_ident(getattr(exp, "name", None)))
603
+ if isinstance(exp, sa_schema.Column)
604
+ else _render_potential_expr(exp, autogen_context, is_index=True)
605
+ )
598
606
  for exp in idx.expressions
599
607
  ]
600
608
 
@@ -1075,9 +1083,11 @@ def _render_check_constraint(
1075
1083
  )
1076
1084
  return "%(prefix)sCheckConstraint(%(sqltext)s%(opts)s)" % {
1077
1085
  "prefix": _sqlalchemy_autogenerate_prefix(autogen_context),
1078
- "opts": ", " + (", ".join("%s=%s" % (k, v) for k, v in opts))
1079
- if opts
1080
- else "",
1086
+ "opts": (
1087
+ ", " + (", ".join("%s=%s" % (k, v) for k, v in opts))
1088
+ if opts
1089
+ else ""
1090
+ ),
1081
1091
  "sqltext": _render_potential_expr(
1082
1092
  constraint.sqltext, autogen_context, wrap_in_text=False
1083
1093
  ),
alembic/command.py CHANGED
@@ -49,7 +49,7 @@ def init(
49
49
 
50
50
  :param config: a :class:`.Config` object.
51
51
 
52
- :param directory: string path of the target directory
52
+ :param directory: string path of the target directory.
53
53
 
54
54
  :param template: string name of the migration environment template to
55
55
  use.
@@ -174,7 +174,7 @@ def revision(
174
174
  will be applied to the structure generated by the revision process
175
175
  where it can be altered programmatically. Note that unlike all
176
176
  the other parameters, this option is only available via programmatic
177
- use of :func:`.command.revision`
177
+ use of :func:`.command.revision`.
178
178
 
179
179
  """
180
180
 
@@ -315,9 +315,11 @@ def merge(
315
315
 
316
316
  :param config: a :class:`.Config` instance
317
317
 
318
- :param message: string message to apply to the revision
318
+ :param revisions: The revisions to merge.
319
319
 
320
- :param branch_label: string label name to apply to the new revision
320
+ :param message: string message to apply to the revision.
321
+
322
+ :param branch_label: string label name to apply to the new revision.
321
323
 
322
324
  :param rev_id: hardcoded revision identifier instead of generating a new
323
325
  one.
@@ -370,9 +372,10 @@ def upgrade(
370
372
 
371
373
  :param config: a :class:`.Config` instance.
372
374
 
373
- :param revision: string revision target or range for --sql mode
375
+ :param revision: string revision target or range for --sql mode. May be
376
+ ``"heads"`` to target the most recent revision(s).
374
377
 
375
- :param sql: if True, use ``--sql`` mode
378
+ :param sql: if True, use ``--sql`` mode.
376
379
 
377
380
  :param tag: an arbitrary "tag" that can be intercepted by custom
378
381
  ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument`
@@ -413,9 +416,10 @@ def downgrade(
413
416
 
414
417
  :param config: a :class:`.Config` instance.
415
418
 
416
- :param revision: string revision target or range for --sql mode
419
+ :param revision: string revision target or range for --sql mode. May
420
+ be ``"base"`` to target the first revision.
417
421
 
418
- :param sql: if True, use ``--sql`` mode
422
+ :param sql: if True, use ``--sql`` mode.
419
423
 
420
424
  :param tag: an arbitrary "tag" that can be intercepted by custom
421
425
  ``env.py`` scripts via the :meth:`.EnvironmentContext.get_tag_argument`
@@ -449,12 +453,13 @@ def downgrade(
449
453
  script.run_env()
450
454
 
451
455
 
452
- def show(config, rev):
456
+ def show(config: Config, rev: str) -> None:
453
457
  """Show the revision(s) denoted by the given symbol.
454
458
 
455
459
  :param config: a :class:`.Config` instance.
456
460
 
457
- :param revision: string revision target
461
+ :param rev: string revision target. May be ``"current"`` to show the
462
+ revision(s) currently applied in the database.
458
463
 
459
464
  """
460
465
 
@@ -484,7 +489,7 @@ def history(
484
489
 
485
490
  :param config: a :class:`.Config` instance.
486
491
 
487
- :param rev_range: string revision range
492
+ :param rev_range: string revision range.
488
493
 
489
494
  :param verbose: output in verbose mode.
490
495
 
@@ -543,7 +548,9 @@ def history(
543
548
  _display_history(config, script, base, head)
544
549
 
545
550
 
546
- def heads(config, verbose=False, resolve_dependencies=False):
551
+ def heads(
552
+ config: Config, verbose: bool = False, resolve_dependencies: bool = False
553
+ ) -> None:
547
554
  """Show current available heads in the script directory.
548
555
 
549
556
  :param config: a :class:`.Config` instance.
@@ -568,7 +575,7 @@ def heads(config, verbose=False, resolve_dependencies=False):
568
575
  )
569
576
 
570
577
 
571
- def branches(config, verbose=False):
578
+ def branches(config: Config, verbose: bool = False) -> None:
572
579
  """Show current branch points.
573
580
 
574
581
  :param config: a :class:`.Config` instance.
@@ -638,7 +645,9 @@ def stamp(
638
645
  :param config: a :class:`.Config` instance.
639
646
 
640
647
  :param revision: target revision or list of revisions. May be a list
641
- to indicate stamping of multiple branch heads.
648
+ to indicate stamping of multiple branch heads; may be ``"base"``
649
+ to remove all revisions from the table or ``"heads"`` to stamp the
650
+ most recent revision(s).
642
651
 
643
652
  .. note:: this parameter is called "revisions" in the command line
644
653
  interface.
@@ -728,7 +737,7 @@ def ensure_version(config: Config, sql: bool = False) -> None:
728
737
 
729
738
  :param config: a :class:`.Config` instance.
730
739
 
731
- :param sql: use ``--sql`` mode
740
+ :param sql: use ``--sql`` mode.
732
741
 
733
742
  .. versionadded:: 1.7.6
734
743
 
alembic/config.py CHANGED
@@ -221,8 +221,7 @@ class Config:
221
221
  @overload
222
222
  def get_section(
223
223
  self, name: str, default: None = ...
224
- ) -> Optional[Dict[str, str]]:
225
- ...
224
+ ) -> Optional[Dict[str, str]]: ...
226
225
 
227
226
  # "default" here could also be a TypeVar
228
227
  # _MT = TypeVar("_MT", bound=Mapping[str, str]),
@@ -230,14 +229,12 @@ class Config:
230
229
  @overload
231
230
  def get_section(
232
231
  self, name: str, default: Dict[str, str]
233
- ) -> Dict[str, str]:
234
- ...
232
+ ) -> Dict[str, str]: ...
235
233
 
236
234
  @overload
237
235
  def get_section(
238
236
  self, name: str, default: Mapping[str, str]
239
- ) -> Union[Dict[str, str], Mapping[str, str]]:
240
- ...
237
+ ) -> Union[Dict[str, str], Mapping[str, str]]: ...
241
238
 
242
239
  def get_section(
243
240
  self, name: str, default: Optional[Mapping[str, str]] = None
@@ -313,14 +310,12 @@ class Config:
313
310
  return default
314
311
 
315
312
  @overload
316
- def get_main_option(self, name: str, default: str) -> str:
317
- ...
313
+ def get_main_option(self, name: str, default: str) -> str: ...
318
314
 
319
315
  @overload
320
316
  def get_main_option(
321
317
  self, name: str, default: Optional[str] = None
322
- ) -> Optional[str]:
323
- ...
318
+ ) -> Optional[str]: ...
324
319
 
325
320
  def get_main_option(
326
321
  self, name: str, default: Optional[str] = None
alembic/ddl/_autogen.py CHANGED
@@ -287,18 +287,22 @@ class _fk_constraint_sig(_constraint_sig[ForeignKeyConstraint]):
287
287
  self.target_table,
288
288
  tuple(self.target_columns),
289
289
  ) + (
290
- (None if onupdate.lower() == "no action" else onupdate.lower())
291
- if onupdate
292
- else None,
293
- (None if ondelete.lower() == "no action" else ondelete.lower())
294
- if ondelete
295
- else None,
290
+ (
291
+ (None if onupdate.lower() == "no action" else onupdate.lower())
292
+ if onupdate
293
+ else None
294
+ ),
295
+ (
296
+ (None if ondelete.lower() == "no action" else ondelete.lower())
297
+ if ondelete
298
+ else None
299
+ ),
296
300
  # convert initially + deferrable into one three-state value
297
- "initially_deferrable"
298
- if initially and initially.lower() == "deferred"
299
- else "deferrable"
300
- if deferrable
301
- else "not deferrable",
301
+ (
302
+ "initially_deferrable"
303
+ if initially and initially.lower() == "deferred"
304
+ else "deferrable" if deferrable else "not deferrable"
305
+ ),
302
306
  )
303
307
 
304
308
  @util.memoized_property
alembic/ddl/base.py CHANGED
@@ -40,7 +40,6 @@ _ServerDefault = Union["TextClause", "FetchedValue", "Function[Any]", str]
40
40
 
41
41
 
42
42
  class AlterTable(DDLElement):
43
-
44
43
  """Represent an ALTER TABLE statement.
45
44
 
46
45
  Only the string name and optional schema name of the table
@@ -238,9 +237,11 @@ def visit_column_default(
238
237
  return "%s %s %s" % (
239
238
  alter_table(compiler, element.table_name, element.schema),
240
239
  alter_column(compiler, element.column_name),
241
- "SET DEFAULT %s" % format_server_default(compiler, element.default)
242
- if element.default is not None
243
- else "DROP DEFAULT",
240
+ (
241
+ "SET DEFAULT %s" % format_server_default(compiler, element.default)
242
+ if element.default is not None
243
+ else "DROP DEFAULT"
244
+ ),
244
245
  )
245
246
 
246
247
 
alembic/ddl/impl.py CHANGED
@@ -77,7 +77,6 @@ _impls: Dict[str, Type[DefaultImpl]] = {}
77
77
 
78
78
 
79
79
  class DefaultImpl(metaclass=ImplMeta):
80
-
81
80
  """Provide the entrypoint for major migration operations,
82
81
  including database-specific behavioral variances.
83
82
 
@@ -168,16 +167,15 @@ class DefaultImpl(metaclass=ImplMeta):
168
167
  def _exec(
169
168
  self,
170
169
  construct: Union[Executable, str],
171
- execution_options: Optional[dict[str, Any]] = None,
172
- multiparams: Sequence[dict] = (),
173
- params: Dict[str, Any] = util.immutabledict(),
170
+ execution_options: Optional[Mapping[str, Any]] = None,
171
+ multiparams: Optional[Sequence[Mapping[str, Any]]] = None,
172
+ params: Mapping[str, Any] = util.immutabledict(),
174
173
  ) -> Optional[CursorResult]:
175
174
  if isinstance(construct, str):
176
175
  construct = text(construct)
177
176
  if self.as_sql:
178
- if multiparams or params:
179
- # TODO: coverage
180
- raise Exception("Execution arguments not allowed with as_sql")
177
+ if multiparams is not None or params:
178
+ raise TypeError("SQL parameters not allowed with as_sql")
181
179
 
182
180
  compile_kw: dict[str, Any]
183
181
  if self.literal_binds and not isinstance(
@@ -200,11 +198,16 @@ class DefaultImpl(metaclass=ImplMeta):
200
198
  assert conn is not None
201
199
  if execution_options:
202
200
  conn = conn.execution_options(**execution_options)
203
- if params:
204
- assert isinstance(multiparams, tuple)
205
- multiparams += (params,)
206
201
 
207
- return conn.execute(construct, multiparams)
202
+ if params and multiparams is not None:
203
+ raise TypeError(
204
+ "Can't send params and multiparams at the same time"
205
+ )
206
+
207
+ if multiparams:
208
+ return conn.execute(construct, multiparams)
209
+ else:
210
+ return conn.execute(construct, params)
208
211
 
209
212
  def execute(
210
213
  self,
@@ -421,13 +424,15 @@ class DefaultImpl(metaclass=ImplMeta):
421
424
  self._exec(
422
425
  sqla_compat._insert_inline(table).values(
423
426
  **{
424
- k: sqla_compat._literal_bindparam(
425
- k, v, type_=table.c[k].type
426
- )
427
- if not isinstance(
428
- v, sqla_compat._literal_bindparam
427
+ k: (
428
+ sqla_compat._literal_bindparam(
429
+ k, v, type_=table.c[k].type
430
+ )
431
+ if not isinstance(
432
+ v, sqla_compat._literal_bindparam
433
+ )
434
+ else v
429
435
  )
430
- else v
431
436
  for k, v in row.items()
432
437
  }
433
438
  )
alembic/ddl/mysql.py CHANGED
@@ -94,21 +94,29 @@ class MySQLImpl(DefaultImpl):
94
94
  column_name,
95
95
  schema=schema,
96
96
  newname=name if name is not None else column_name,
97
- nullable=nullable
98
- if nullable is not None
99
- else existing_nullable
100
- if existing_nullable is not None
101
- else True,
97
+ nullable=(
98
+ nullable
99
+ if nullable is not None
100
+ else (
101
+ existing_nullable
102
+ if existing_nullable is not None
103
+ else True
104
+ )
105
+ ),
102
106
  type_=type_ if type_ is not None else existing_type,
103
- default=server_default
104
- if server_default is not False
105
- else existing_server_default,
106
- autoincrement=autoincrement
107
- if autoincrement is not None
108
- else existing_autoincrement,
109
- comment=comment
110
- if comment is not False
111
- else existing_comment,
107
+ default=(
108
+ server_default
109
+ if server_default is not False
110
+ else existing_server_default
111
+ ),
112
+ autoincrement=(
113
+ autoincrement
114
+ if autoincrement is not None
115
+ else existing_autoincrement
116
+ ),
117
+ comment=(
118
+ comment if comment is not False else existing_comment
119
+ ),
112
120
  )
113
121
  )
114
122
  elif (
@@ -123,21 +131,29 @@ class MySQLImpl(DefaultImpl):
123
131
  column_name,
124
132
  schema=schema,
125
133
  newname=name if name is not None else column_name,
126
- nullable=nullable
127
- if nullable is not None
128
- else existing_nullable
129
- if existing_nullable is not None
130
- else True,
134
+ nullable=(
135
+ nullable
136
+ if nullable is not None
137
+ else (
138
+ existing_nullable
139
+ if existing_nullable is not None
140
+ else True
141
+ )
142
+ ),
131
143
  type_=type_ if type_ is not None else existing_type,
132
- default=server_default
133
- if server_default is not False
134
- else existing_server_default,
135
- autoincrement=autoincrement
136
- if autoincrement is not None
137
- else existing_autoincrement,
138
- comment=comment
139
- if comment is not False
140
- else existing_comment,
144
+ default=(
145
+ server_default
146
+ if server_default is not False
147
+ else existing_server_default
148
+ ),
149
+ autoincrement=(
150
+ autoincrement
151
+ if autoincrement is not None
152
+ else existing_autoincrement
153
+ ),
154
+ comment=(
155
+ comment if comment is not False else existing_comment
156
+ ),
141
157
  )
142
158
  )
143
159
  elif server_default is not False:
@@ -368,9 +384,11 @@ def _mysql_alter_default(
368
384
  return "%s ALTER COLUMN %s %s" % (
369
385
  alter_table(compiler, element.table_name, element.schema),
370
386
  format_column_name(compiler, element.column_name),
371
- "SET DEFAULT %s" % format_server_default(compiler, element.default)
372
- if element.default is not None
373
- else "DROP DEFAULT",
387
+ (
388
+ "SET DEFAULT %s" % format_server_default(compiler, element.default)
389
+ if element.default is not None
390
+ else "DROP DEFAULT"
391
+ ),
374
392
  )
375
393
 
376
394
 
alembic/ddl/oracle.py CHANGED
@@ -141,9 +141,11 @@ def visit_column_default(
141
141
  return "%s %s %s" % (
142
142
  alter_table(compiler, element.table_name, element.schema),
143
143
  alter_column(compiler, element.column_name),
144
- "DEFAULT %s" % format_server_default(compiler, element.default)
145
- if element.default is not None
146
- else "DEFAULT NULL",
144
+ (
145
+ "DEFAULT %s" % format_server_default(compiler, element.default)
146
+ if element.default is not None
147
+ else "DEFAULT NULL"
148
+ ),
147
149
  )
148
150
 
149
151
 
alembic/ddl/postgresql.py CHANGED
@@ -218,7 +218,8 @@ class PostgresqlImpl(DefaultImpl):
218
218
  "join pg_class t on t.oid=d.refobjid "
219
219
  "join pg_attribute a on a.attrelid=t.oid and "
220
220
  "a.attnum=d.refobjsubid "
221
- "where c.relkind='S' and c.relname=:seqname"
221
+ "where c.relkind='S' and "
222
+ "c.oid=cast(:seqname as regclass)"
222
223
  ),
223
224
  seqname=seq_match.group(1),
224
225
  ).first()
@@ -406,8 +406,7 @@ class AbstractOperations(util.ModuleClsProxy):
406
406
  return self.migration_context
407
407
 
408
408
  @overload
409
- def invoke(self, operation: CreateTableOp) -> Table:
410
- ...
409
+ def invoke(self, operation: CreateTableOp) -> Table: ...
411
410
 
412
411
  @overload
413
412
  def invoke(
@@ -427,12 +426,10 @@ class AbstractOperations(util.ModuleClsProxy):
427
426
  DropTableOp,
428
427
  ExecuteSQLOp,
429
428
  ],
430
- ) -> None:
431
- ...
429
+ ) -> None: ...
432
430
 
433
431
  @overload
434
- def invoke(self, operation: MigrateOperation) -> Any:
435
- ...
432
+ def invoke(self, operation: MigrateOperation) -> Any: ...
436
433
 
437
434
  def invoke(self, operation: MigrateOperation) -> Any:
438
435
  """Given a :class:`.MigrateOperation`, invoke it in terms of
@@ -1724,7 +1721,7 @@ class BatchOperations(AbstractOperations):
1724
1721
 
1725
1722
  def create_foreign_key(
1726
1723
  self,
1727
- constraint_name: str,
1724
+ constraint_name: Optional[str],
1728
1725
  referent_table: str,
1729
1726
  local_cols: List[str],
1730
1727
  remote_cols: List[str],
@@ -1774,7 +1771,7 @@ class BatchOperations(AbstractOperations):
1774
1771
  ...
1775
1772
 
1776
1773
  def create_primary_key(
1777
- self, constraint_name: str, columns: List[str]
1774
+ self, constraint_name: Optional[str], columns: List[str]
1778
1775
  ) -> None:
1779
1776
  """Issue a "create primary key" instruction using the
1780
1777
  current batch migration context.
alembic/operations/ops.py CHANGED
@@ -349,7 +349,7 @@ class CreatePrimaryKeyOp(AddConstraintOp):
349
349
  def batch_create_primary_key(
350
350
  cls,
351
351
  operations: BatchOperations,
352
- constraint_name: str,
352
+ constraint_name: Optional[str],
353
353
  columns: List[str],
354
354
  ) -> None:
355
355
  """Issue a "create primary key" instruction using the
@@ -681,7 +681,7 @@ class CreateForeignKeyOp(AddConstraintOp):
681
681
  def batch_create_foreign_key(
682
682
  cls,
683
683
  operations: BatchOperations,
684
- constraint_name: str,
684
+ constraint_name: Optional[str],
685
685
  referent_table: str,
686
686
  local_cols: List[str],
687
687
  remote_cols: List[str],
@@ -1371,9 +1371,9 @@ class DropTableOp(MigrateOperation):
1371
1371
  info=self.info.copy() if self.info else {},
1372
1372
  prefixes=list(self.prefixes) if self.prefixes else [],
1373
1373
  schema=self.schema,
1374
- _constraints_included=self._reverse._constraints_included
1375
- if self._reverse
1376
- else False,
1374
+ _constraints_included=(
1375
+ self._reverse._constraints_included if self._reverse else False
1376
+ ),
1377
1377
  **self.table_kw,
1378
1378
  )
1379
1379
  return t
@@ -223,10 +223,12 @@ class SchemaObjects:
223
223
  t = sa_schema.Table(name, m, *cols, **kw)
224
224
 
225
225
  constraints = [
226
- sqla_compat._copy(elem, target_table=t)
227
- if getattr(elem, "parent", None) is not t
228
- and getattr(elem, "parent", None) is not None
229
- else elem
226
+ (
227
+ sqla_compat._copy(elem, target_table=t)
228
+ if getattr(elem, "parent", None) is not t
229
+ and getattr(elem, "parent", None) is not None
230
+ else elem
231
+ )
230
232
  for elem in columns
231
233
  if isinstance(elem, (Constraint, Index))
232
234
  ]
@@ -108,7 +108,6 @@ CompareType = Callable[
108
108
 
109
109
 
110
110
  class EnvironmentContext(util.ModuleClsProxy):
111
-
112
111
  """A configurational facade made available in an ``env.py`` script.
113
112
 
114
113
  The :class:`.EnvironmentContext` acts as a *facade* to the more
@@ -342,18 +341,17 @@ class EnvironmentContext(util.ModuleClsProxy):
342
341
  return self.context_opts.get("tag", None) # type: ignore[no-any-return] # noqa: E501
343
342
 
344
343
  @overload
345
- def get_x_argument(self, as_dictionary: Literal[False]) -> List[str]:
346
- ...
344
+ def get_x_argument(self, as_dictionary: Literal[False]) -> List[str]: ...
347
345
 
348
346
  @overload
349
- def get_x_argument(self, as_dictionary: Literal[True]) -> Dict[str, str]:
350
- ...
347
+ def get_x_argument(
348
+ self, as_dictionary: Literal[True]
349
+ ) -> Dict[str, str]: ...
351
350
 
352
351
  @overload
353
352
  def get_x_argument(
354
353
  self, as_dictionary: bool = ...
355
- ) -> Union[List[str], Dict[str, str]]:
356
- ...
354
+ ) -> Union[List[str], Dict[str, str]]: ...
357
355
 
358
356
  def get_x_argument(
359
357
  self, as_dictionary: bool = False
@@ -86,7 +86,6 @@ class _ProxyTransaction:
86
86
 
87
87
 
88
88
  class MigrationContext:
89
-
90
89
  """Represent the database state made available to a migration
91
90
  script.
92
91
 
@@ -218,9 +217,11 @@ class MigrationContext:
218
217
  log.info("Generating static SQL")
219
218
  log.info(
220
219
  "Will assume %s DDL.",
221
- "transactional"
222
- if self.impl.transactional_ddl
223
- else "non-transactional",
220
+ (
221
+ "transactional"
222
+ if self.impl.transactional_ddl
223
+ else "non-transactional"
224
+ ),
224
225
  )
225
226
 
226
227
  @classmethod
@@ -345,9 +346,9 @@ class MigrationContext:
345
346
  # except that it will not know it's in "autocommit" and will
346
347
  # emit deprecation warnings when an autocommit action takes
347
348
  # place.
348
- self.connection = (
349
- self.impl.connection
350
- ) = base_connection.execution_options(isolation_level="AUTOCOMMIT")
349
+ self.connection = self.impl.connection = (
350
+ base_connection.execution_options(isolation_level="AUTOCOMMIT")
351
+ )
351
352
 
352
353
  # sqlalchemy future mode will "autobegin" in any case, so take
353
354
  # control of that "transaction" here
@@ -1006,8 +1007,7 @@ class MigrationStep:
1006
1007
  if TYPE_CHECKING:
1007
1008
 
1008
1009
  @property
1009
- def doc(self) -> Optional[str]:
1010
- ...
1010
+ def doc(self) -> Optional[str]: ...
1011
1011
 
1012
1012
  @property
1013
1013
  def name(self) -> str:
alembic/script/base.py CHANGED
@@ -56,7 +56,6 @@ _split_on_space_comma_colon = re.compile(r", *|(?: +)|\:")
56
56
 
57
57
 
58
58
  class ScriptDirectory:
59
-
60
59
  """Provides operations upon an Alembic script directory.
61
60
 
62
61
  This object is useful to get information as to current revisions,
@@ -610,7 +609,7 @@ class ScriptDirectory:
610
609
  if self.timezone is not None:
611
610
  if ZoneInfo is None:
612
611
  raise util.CommandError(
613
- "Python >= 3.9 is required for timezone support or"
612
+ "Python >= 3.9 is required for timezone support or "
614
613
  "the 'backports.zoneinfo' package must be installed."
615
614
  )
616
615
  # First, assume correct capitalization
@@ -732,9 +731,11 @@ class ScriptDirectory:
732
731
  if depends_on:
733
732
  with self._catch_revision_errors():
734
733
  resolved_depends_on = [
735
- dep
736
- if dep in rev.branch_labels # maintain branch labels
737
- else rev.revision # resolve partial revision identifiers
734
+ (
735
+ dep
736
+ if dep in rev.branch_labels # maintain branch labels
737
+ else rev.revision
738
+ ) # resolve partial revision identifiers
738
739
  for rev, dep in [
739
740
  (not_none(self.revision_map.get_revision(dep)), dep)
740
741
  for dep in util.to_list(depends_on)
@@ -808,7 +809,6 @@ class ScriptDirectory:
808
809
 
809
810
 
810
811
  class Script(revision.Revision):
811
-
812
812
  """Represent a single revision file in a ``versions/`` directory.
813
813
 
814
814
  The :class:`.Script` instance is returned by methods
@@ -930,9 +930,11 @@ class Script(revision.Revision):
930
930
  if head_indicators or tree_indicators:
931
931
  text += "%s%s%s" % (
932
932
  " (head)" if self._is_real_head else "",
933
- " (effective head)"
934
- if self.is_head and not self._is_real_head
935
- else "",
933
+ (
934
+ " (effective head)"
935
+ if self.is_head and not self._is_real_head
936
+ else ""
937
+ ),
936
938
  " (current)" if self._db_current_indicator else "",
937
939
  )
938
940
  if tree_indicators:
@@ -56,8 +56,7 @@ class _CollectRevisionsProtocol(Protocol):
56
56
  inclusive: bool,
57
57
  implicit_base: bool,
58
58
  assert_relative_length: bool,
59
- ) -> Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase], ...]]:
60
- ...
59
+ ) -> Tuple[Set[Revision], Tuple[Optional[_RevisionOrBase], ...]]: ...
61
60
 
62
61
 
63
62
  class RevisionError(Exception):
@@ -720,9 +719,11 @@ class RevisionMap:
720
719
  resolved_target = target
721
720
 
722
721
  resolved_test_against_revs = [
723
- self._revision_for_ident(test_against_rev)
724
- if not isinstance(test_against_rev, Revision)
725
- else test_against_rev
722
+ (
723
+ self._revision_for_ident(test_against_rev)
724
+ if not isinstance(test_against_rev, Revision)
725
+ else test_against_rev
726
+ )
726
727
  for test_against_rev in util.to_tuple(
727
728
  test_against_revs, default=()
728
729
  )
@@ -1016,9 +1017,9 @@ class RevisionMap:
1016
1017
  # each time but it was getting complicated
1017
1018
  current_heads[current_candidate_idx] = heads_to_add[0]
1018
1019
  current_heads.extend(heads_to_add[1:])
1019
- ancestors_by_idx[
1020
- current_candidate_idx
1021
- ] = get_ancestors(heads_to_add[0])
1020
+ ancestors_by_idx[current_candidate_idx] = (
1021
+ get_ancestors(heads_to_add[0])
1022
+ )
1022
1023
  ancestors_by_idx.extend(
1023
1024
  get_ancestors(head) for head in heads_to_add[1:]
1024
1025
  )
@@ -1183,9 +1184,13 @@ class RevisionMap:
1183
1184
  branch_label = symbol
1184
1185
  # Walk down the tree to find downgrade target.
1185
1186
  rev = self._walk(
1186
- start=self.get_revision(symbol)
1187
- if branch_label is None
1188
- else self.get_revision("%s@%s" % (branch_label, symbol)),
1187
+ start=(
1188
+ self.get_revision(symbol)
1189
+ if branch_label is None
1190
+ else self.get_revision(
1191
+ "%s@%s" % (branch_label, symbol)
1192
+ )
1193
+ ),
1189
1194
  steps=rel_int,
1190
1195
  no_overwalk=assert_relative_length,
1191
1196
  )
@@ -1303,9 +1308,13 @@ class RevisionMap:
1303
1308
  )
1304
1309
  return (
1305
1310
  self._walk(
1306
- start=self.get_revision(symbol)
1307
- if branch_label is None
1308
- else self.get_revision("%s@%s" % (branch_label, symbol)),
1311
+ start=(
1312
+ self.get_revision(symbol)
1313
+ if branch_label is None
1314
+ else self.get_revision(
1315
+ "%s@%s" % (branch_label, symbol)
1316
+ )
1317
+ ),
1309
1318
  steps=relative,
1310
1319
  no_overwalk=assert_relative_length,
1311
1320
  ),
@@ -1694,15 +1703,13 @@ class Revision:
1694
1703
 
1695
1704
 
1696
1705
  @overload
1697
- def tuple_rev_as_scalar(rev: None) -> None:
1698
- ...
1706
+ def tuple_rev_as_scalar(rev: None) -> None: ...
1699
1707
 
1700
1708
 
1701
1709
  @overload
1702
1710
  def tuple_rev_as_scalar(
1703
1711
  rev: Union[Tuple[_T, ...], List[_T]]
1704
- ) -> Union[_T, Tuple[_T, ...], List[_T]]:
1705
- ...
1712
+ ) -> Union[_T, Tuple[_T, ...], List[_T]]: ...
1706
1713
 
1707
1714
 
1708
1715
  def tuple_rev_as_scalar(
@@ -1,7 +1,8 @@
1
1
  # A generic, single database configuration.
2
2
 
3
3
  [alembic]
4
- # path to migration scripts
4
+ # path to migration scripts.
5
+ # Use forward slashes (/) also on windows to provide an os agnostic path
5
6
  script_location = ${script_location}
6
7
 
7
8
  # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
@@ -20,8 +21,7 @@ prepend_sys_path = .
20
21
  # leave blank for localtime
21
22
  # timezone =
22
23
 
23
- # max length of characters to apply to the
24
- # "slug" field
24
+ # max length of characters to apply to the "slug" field
25
25
  # truncate_slug_length = 40
26
26
 
27
27
  # set to 'true' to run the environment during
@@ -2,6 +2,7 @@
2
2
 
3
3
  [alembic]
4
4
  # path to migration scripts
5
+ # Use forward slashes (/) also on windows to provide an os agnostic path
5
6
  script_location = ${script_location}
6
7
 
7
8
  # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
@@ -22,8 +23,7 @@ prepend_sys_path = .
22
23
  # leave blank for localtime
23
24
  # timezone =
24
25
 
25
- # max length of characters to apply to the
26
- # "slug" field
26
+ # max length of characters to apply to the "slug" field
27
27
  # truncate_slug_length = 40
28
28
 
29
29
  # set to 'true' to run the environment during
@@ -2,6 +2,7 @@
2
2
 
3
3
  [alembic]
4
4
  # path to migration scripts
5
+ # Use forward slashes (/) also on windows to provide an os agnostic path
5
6
  script_location = ${script_location}
6
7
 
7
8
  # template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
@@ -22,8 +23,7 @@ prepend_sys_path = .
22
23
  # leave blank for localtime
23
24
  # timezone =
24
25
 
25
- # max length of characters to apply to the
26
- # "slug" field
26
+ # max length of characters to apply to the "slug" field
27
27
  # truncate_slug_length = 40
28
28
 
29
29
  # set to 'true' to run the environment during
@@ -49,6 +49,12 @@ class TestBase(SQLAlchemyTestBase):
49
49
  connection, opts=dict(transaction_per_migration=True)
50
50
  )
51
51
 
52
+ @testing.fixture
53
+ def as_sql_migration_context(self, connection):
54
+ return MigrationContext.configure(
55
+ connection, opts=dict(transaction_per_migration=True, as_sql=True)
56
+ )
57
+
52
58
  @testing.fixture
53
59
  def connection(self):
54
60
  with config.db.connect() as conn:
@@ -268,9 +274,11 @@ class AlterColRoundTripFixture:
268
274
  "x",
269
275
  column.name,
270
276
  existing_type=column.type,
271
- existing_server_default=column.server_default
272
- if column.server_default is not None
273
- else False,
277
+ existing_server_default=(
278
+ column.server_default
279
+ if column.server_default is not None
280
+ else False
281
+ ),
274
282
  existing_nullable=True if column.nullable else False,
275
283
  # existing_comment=column.comment,
276
284
  nullable=to_.get("nullable", None),
@@ -298,9 +306,13 @@ class AlterColRoundTripFixture:
298
306
  new_col["type"],
299
307
  new_col.get("default", None),
300
308
  compare.get("type", old_col["type"]),
301
- compare["server_default"].text
302
- if "server_default" in compare
303
- else column.server_default.arg.text
304
- if column.server_default is not None
305
- else None,
309
+ (
310
+ compare["server_default"].text
311
+ if "server_default" in compare
312
+ else (
313
+ column.server_default.arg.text
314
+ if column.server_default is not None
315
+ else None
316
+ )
317
+ ),
306
318
  )
@@ -124,6 +124,7 @@ class AutogenerateComputedTest(AutogenFixtureTest, TestBase):
124
124
  lambda: (None, None),
125
125
  lambda: (sa.Computed("5"), sa.Computed("5")),
126
126
  lambda: (sa.Computed("bar*5"), sa.Computed("bar*5")),
127
+ lambda: (sa.Computed("bar*5"), sa.Computed("bar * \r\n\t5")),
127
128
  (
128
129
  lambda: (sa.Computed("bar*5"), None),
129
130
  config.requirements.computed_doesnt_reflect_as_server_default,
@@ -24,9 +24,9 @@ class MigrationTransactionTest(TestBase):
24
24
  self.context = MigrationContext.configure(
25
25
  dialect=conn.dialect, opts=opts
26
26
  )
27
- self.context.output_buffer = (
28
- self.context.impl.output_buffer
29
- ) = io.StringIO()
27
+ self.context.output_buffer = self.context.impl.output_buffer = (
28
+ io.StringIO()
29
+ )
30
30
  else:
31
31
  self.context = MigrationContext.configure(
32
32
  connection=conn, opts=opts
@@ -234,20 +234,17 @@ def rev_id() -> str:
234
234
 
235
235
 
236
236
  @overload
237
- def to_tuple(x: Any, default: Tuple[Any, ...]) -> Tuple[Any, ...]:
238
- ...
237
+ def to_tuple(x: Any, default: Tuple[Any, ...]) -> Tuple[Any, ...]: ...
239
238
 
240
239
 
241
240
  @overload
242
- def to_tuple(x: None, default: Optional[_T] = ...) -> _T:
243
- ...
241
+ def to_tuple(x: None, default: Optional[_T] = ...) -> _T: ...
244
242
 
245
243
 
246
244
  @overload
247
245
  def to_tuple(
248
246
  x: Any, default: Optional[Tuple[Any, ...]] = None
249
- ) -> Tuple[Any, ...]:
250
- ...
247
+ ) -> Tuple[Any, ...]: ...
251
248
 
252
249
 
253
250
  def to_tuple(
alembic/util/messaging.py CHANGED
@@ -95,11 +95,17 @@ def msg(
95
95
  write_outstream(sys.stdout, "\n")
96
96
  else:
97
97
  # left indent output lines
98
- lines = textwrap.wrap(msg, TERMWIDTH)
98
+ indent = " "
99
+ lines = textwrap.wrap(
100
+ msg,
101
+ TERMWIDTH,
102
+ initial_indent=indent,
103
+ subsequent_indent=indent,
104
+ )
99
105
  if len(lines) > 1:
100
106
  for line in lines[0:-1]:
101
- write_outstream(sys.stdout, " ", line, "\n")
102
- write_outstream(sys.stdout, " ", lines[-1], ("\n" if newline else ""))
107
+ write_outstream(sys.stdout, line, "\n")
108
+ write_outstream(sys.stdout, lines[-1], ("\n" if newline else ""))
103
109
  if flush:
104
110
  sys.stdout.flush()
105
111
 
@@ -59,8 +59,7 @@ _CE = TypeVar("_CE", bound=Union["ColumnElement[Any]", "SchemaItem"])
59
59
 
60
60
 
61
61
  class _CompilerProtocol(Protocol):
62
- def __call__(self, element: Any, compiler: Any, **kw: Any) -> str:
63
- ...
62
+ def __call__(self, element: Any, compiler: Any, **kw: Any) -> str: ...
64
63
 
65
64
 
66
65
  def _safe_int(value: str) -> Union[int, str]:
@@ -95,8 +94,7 @@ if TYPE_CHECKING:
95
94
 
96
95
  def compiles(
97
96
  element: Type[ClauseElement], *dialects: str
98
- ) -> Callable[[_CompilerProtocol], _CompilerProtocol]:
99
- ...
97
+ ) -> Callable[[_CompilerProtocol], _CompilerProtocol]: ...
100
98
 
101
99
  else:
102
100
  from sqlalchemy.ext.compiler import compiles
@@ -1,4 +1,4 @@
1
- Copyright 2009-2023 Michael Bayer.
1
+ Copyright 2009-2024 Michael Bayer.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of
4
4
  this software and associated documentation files (the "Software"), to deal in
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
16
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
17
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
18
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
- SOFTWARE.
19
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: alembic
3
- Version: 1.13.1
3
+ Version: 1.13.2
4
4
  Summary: A database migration tool for SQLAlchemy.
5
5
  Home-page: https://alembic.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -1,7 +1,7 @@
1
- alembic/__init__.py,sha256=PMiQT_1tHyC_Od3GDBArBk7r14v8F62_xkzliPq9tLU,63
1
+ alembic/__init__.py,sha256=Cgo-xQ2JolKXx84viUN_535WHtufvauqLNTDnW4vMmc,63
2
2
  alembic/__main__.py,sha256=373m7-TBh72JqrSMYviGrxCHZo-cnweM8AGF8A22PmY,78
3
- alembic/command.py,sha256=jWFNS-wPWA-Klfm0GsPfWh_8sPj4n7rKROJ0zrwhoR0,21712
4
- alembic/config.py,sha256=I12lm4V-AXSt-7nvub-Vtx5Zfa68pYP5xSrFQQd45rQ,22256
3
+ alembic/command.py,sha256=2tkKrIoEgPfXrGgvMRGrUXH4l-7z466DOxd7Q2XOfL8,22169
4
+ alembic/config.py,sha256=BZ7mwFRk2gq8GFNxxy9qvMUFx43YbDbQTC99OnjqiKY,22216
5
5
  alembic/context.py,sha256=hK1AJOQXJ29Bhn276GYcosxeG7pC5aZRT5E8c4bMJ4Q,195
6
6
  alembic/context.pyi,sha256=hUHbSnbSeEEMVkk0gDSXOq4_9edSjYzsjmmf-mL9Iao,31737
7
7
  alembic/environment.py,sha256=MM5lPayGT04H3aeng1H7GQ8HEAs3VGX5yy6mDLCPLT4,43
@@ -10,48 +10,48 @@ alembic/op.py,sha256=flHtcsVqOD-ZgZKK2pv-CJ5Cwh-KJ7puMUNXzishxLw,167
10
10
  alembic/op.pyi,sha256=8R6SJr1dQharU0blmMJJj23XFO_hk9ZmAQBJBQOeXRU,49816
11
11
  alembic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  alembic/autogenerate/__init__.py,sha256=ntmUTXhjLm4_zmqIwyVaECdpPDn6_u1yM9vYk6-553E,543
13
- alembic/autogenerate/api.py,sha256=Oc7MRtDhkSICsQ82fYP9bBMYaAjzzW2X_izM3AQU-OY,22171
14
- alembic/autogenerate/compare.py,sha256=3QLK2yCDW37bXbAIXcHGz4YOFlOW8bSfLHJ8bmzgG1M,44938
15
- alembic/autogenerate/render.py,sha256=uSbCpkh72mo00xGZ8CJa3teM_gqulCoNtxH0Ey8Ny1k,34939
13
+ alembic/autogenerate/api.py,sha256=Bh-37G0PSFeT9WSfEQ-3TZoainXGLL2nsl4okv_xYc0,22173
14
+ alembic/autogenerate/compare.py,sha256=cdUBH6qsedaJsnToSOu4MfcJaI4bjUJ4VWqtBlqsSr8,44944
15
+ alembic/autogenerate/render.py,sha256=Sx4aQy1OafI0eii_uEtO9venaI8GOOBj1p-TMhTWNNw,35099
16
16
  alembic/autogenerate/rewriter.py,sha256=uZWRkTYJoncoEJ5WY1QBRiozjyChqZDJPy4LtcRibjM,7846
17
17
  alembic/ddl/__init__.py,sha256=Df8fy4Vn_abP8B7q3x8gyFwEwnLw6hs2Ljt_bV3EZWE,152
18
- alembic/ddl/_autogen.py,sha256=0no9ywWP8gjvO57Ozc2naab4qNusVNn2fiJekjc275g,9179
19
- alembic/ddl/base.py,sha256=Jd7oPoAOGjOMcdMUIzSKnTjd8NKnTd7IjBXXyVpDCkU,9955
20
- alembic/ddl/impl.py,sha256=vkhkXFpLPJBG9jW2kv_sR5CC5czNd1ERLjLtfLuOFP0,28778
18
+ alembic/ddl/_autogen.py,sha256=Blv2RrHNyF4cE6znCQXNXG5T9aO-YmiwD4Fz-qfoaWA,9275
19
+ alembic/ddl/base.py,sha256=fzGvWyvpSluIOKDQ7Ajc-i_jlDpH4j-JZFOOPxxYS-s,9986
20
+ alembic/ddl/impl.py,sha256=R4oIVxl4OllYBU6BuQRH-4MhUAU4Qfu_M3lBkYb5pv4,29033
21
21
  alembic/ddl/mssql.py,sha256=ydvgBSaftKYjaBaMyqius66Ta4CICQSj79Og3Ed2atY,14219
22
- alembic/ddl/mysql.py,sha256=am221U_UK3wX33tNcXNiOObZV-Pa4CXuv7vN-epF9IU,16788
23
- alembic/ddl/oracle.py,sha256=TmoCq_FlbfyWAAk3e_q6mMQU0YmlfIcgKHpRfNMmgr0,6211
24
- alembic/ddl/postgresql.py,sha256=dcWLdDSqivzizVCce_H6RnOVAayPXDFfns-NC4-UaA8,29842
22
+ alembic/ddl/mysql.py,sha256=kXOGYmpnL_9WL3ijXNsG4aAwy3m1HWJOoLZSePzmJF0,17316
23
+ alembic/ddl/oracle.py,sha256=669YlkcZihlXFbnXhH2krdrvDry8q5pcUGfoqkg_R6Y,6243
24
+ alembic/ddl/postgresql.py,sha256=GNCnx-N8UsCIstfW49J8ivYcKgRB8KFNPRgNtORC_AM,29883
25
25
  alembic/ddl/sqlite.py,sha256=wLXhb8bJWRspKQTb-iVfepR4LXYgOuEbUWKX5qwDhIQ,7570
26
26
  alembic/operations/__init__.py,sha256=e0KQSZAgLpTWvyvreB7DWg7RJV_MWSOPVDgCqsd2FzY,318
27
- alembic/operations/base.py,sha256=LCx4NH5NA2NLWQFaZTqE_p2KgLtqJ76oVcp1Grj-zFM,74004
27
+ alembic/operations/base.py,sha256=ExTfmPvL1XPu8GGftmJfRavbj47A8rJwO13nfM1Vb9c,74000
28
28
  alembic/operations/batch.py,sha256=YqtD4hJ3_RkFxvI7zbmBwxcLEyLHYyWQpsz4l5L85yI,26943
29
- alembic/operations/ops.py,sha256=2vtYFhYFDEVq158HwORfGTsobDM7c-t0lewuR7JKw7g,94353
30
- alembic/operations/schemaobj.py,sha256=vjoD57QvjbzzA-jyPIXulbOmb5_bGPtxoq58KsKI4Y0,9424
29
+ alembic/operations/ops.py,sha256=MUXsztT8LngGbv3wL06OSQuoty-FcI9uJWLwTmlm_GQ,94381
30
+ alembic/operations/schemaobj.py,sha256=Wp-bBe4a8lXPTvIHJttBY0ejtpVR5Jvtb2kI-U2PztQ,9468
31
31
  alembic/operations/toimpl.py,sha256=SoNY2_gZX2baXTD-pNjpCWnON8D2QBSYQBIjo13-WKA,7115
32
32
  alembic/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- alembic/runtime/environment.py,sha256=9wSJaePNAXBXvirif_85ql7dSq4bXM1E6pSb2k-6uGI,41508
34
- alembic/runtime/migration.py,sha256=Yfv2fa11wiQ0WgoZaFldlWxCPq4dVDOCEOxST_-1VB0,50066
33
+ alembic/runtime/environment.py,sha256=SkYB_am1h3FSG8IsExAQxGP_7WwzOVigqjlO747Aokc,41497
34
+ alembic/runtime/migration.py,sha256=sku7-2_TralZQnNeoDaEFlydTStL-SJechbr9K8AHJs,50093
35
35
  alembic/script/__init__.py,sha256=lSj06O391Iy5avWAiq8SPs6N8RBgxkSPjP8wpXcNDGg,100
36
- alembic/script/base.py,sha256=4gkppn2FKCYDoBgzGkTslcwdyxSabmHvGq0uGKulwbI,37586
37
- alembic/script/revision.py,sha256=sfnXQw2UwiXs0E6gEPHBKWuSsB5KyuxZPTrFn__hIEk,62060
36
+ alembic/script/base.py,sha256=XPydgsjabSI2sxmGEX-Ij_2mbtB1jC7aM66z7Ni3ZsI,37689
37
+ alembic/script/revision.py,sha256=NTu-eu5Y78u4NoVXpT0alpD2oL40SGATA2sEMEf1el4,62306
38
38
  alembic/script/write_hooks.py,sha256=NGB6NGgfdf7HK6XNNpSKqUCfzxazj-NRUePgFx7MJSM,5036
39
39
  alembic/templates/async/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
40
- alembic/templates/async/alembic.ini.mako,sha256=uuhJETLWQuiYcs_jAOXHEjshEJ7VslEc1q4RRj0HWbE,3525
40
+ alembic/templates/async/alembic.ini.mako,sha256=mtG-32u1WzE9pQCGRy4Pw_G2hPmnrGO0sVC7wRtk9G0,3597
41
41
  alembic/templates/async/env.py,sha256=zbOCf3Y7w2lg92hxSwmG1MM_7y56i_oRH4AKp0pQBYo,2389
42
42
  alembic/templates/async/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
43
43
  alembic/templates/generic/README,sha256=MVlc9TYmr57RbhXET6QxgyCcwWP7w-vLkEsirENqiIQ,38
44
- alembic/templates/generic/alembic.ini.mako,sha256=sT7F852yN3c8X1-GKFlhuWExXxw9hY1eb1ZZ9flFSzc,3634
44
+ alembic/templates/generic/alembic.ini.mako,sha256=fJLaRCOrnd_qRHdfMMrZA5iqzBxdtIpxKCo4jdLx6KA,3705
45
45
  alembic/templates/generic/env.py,sha256=TLRWOVW3Xpt_Tpf8JFzlnoPn_qoUu8UV77Y4o9XD6yI,2103
46
46
  alembic/templates/generic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
47
47
  alembic/templates/multidb/README,sha256=dWLDhnBgphA4Nzb7sNlMfCS3_06YqVbHhz-9O5JNqyI,606
48
- alembic/templates/multidb/alembic.ini.mako,sha256=mPh8JFJfWiGs6tMtL8_HAQ-Dz1QOoJgE5Vm76nIMqgU,3728
48
+ alembic/templates/multidb/alembic.ini.mako,sha256=57TVeVTk4jjuAT42AyTHFqgr7gEssMGFKARzE2yEtIU,3799
49
49
  alembic/templates/multidb/env.py,sha256=6zNjnW8mXGUk7erTsAvrfhvqoczJ-gagjVq1Ypg2YIQ,4230
50
50
  alembic/templates/multidb/script.py.mako,sha256=N06nMtNSwHkgl0EBXDyMt8njp9tlOesR583gfq21nbY,1090
51
51
  alembic/testing/__init__.py,sha256=kOxOh5nwmui9d-_CCq9WA4Udwy7ITjm453w74CTLZDo,1159
52
52
  alembic/testing/assertions.py,sha256=1CbJk8c8-WO9eJ0XJ0jJvMsNRLUrXV41NOeIJUAlOBk,5015
53
53
  alembic/testing/env.py,sha256=zJacVb_z6uLs2U1TtkmnFH9P3_F-3IfYbVv4UEPOvfo,10754
54
- alembic/testing/fixtures.py,sha256=NyP4wE_dFN9ZzSGiBagRu1cdzkka03nwJYJYHYrrkSY,9112
54
+ alembic/testing/fixtures.py,sha256=nBntOynOmVCFc7IYiN3DIQ3TBNTfiGCvL_1-FyCry8o,9462
55
55
  alembic/testing/requirements.py,sha256=dKeAO1l5TwBqXarJN-IPORlCqCJv-41Dj6oXoEikxHQ,5133
56
56
  alembic/testing/schemacompare.py,sha256=N5UqSNCOJetIKC4vKhpYzQEpj08XkdgIoqBmEPQ3tlc,4838
57
57
  alembic/testing/util.py,sha256=CQrcQDA8fs_7ME85z5ydb-Bt70soIIID-qNY1vbR2dg,3350
@@ -61,23 +61,23 @@ alembic/testing/plugin/bootstrap.py,sha256=9C6wtjGrIVztZ928w27hsQE0KcjDLIUtUN3dv
61
61
  alembic/testing/suite/__init__.py,sha256=MvE7-hwbaVN1q3NM-ztGxORU9dnIelUCINKqNxewn7Y,288
62
62
  alembic/testing/suite/_autogen_fixtures.py,sha256=cDq1pmzHe15S6dZPGNC6sqFaCQ3hLT_oPV2IDigUGQ0,9880
63
63
  alembic/testing/suite/test_autogen_comments.py,sha256=aEGqKUDw4kHjnDk298aoGcQvXJWmZXcIX_2FxH4cJK8,6283
64
- alembic/testing/suite/test_autogen_computed.py,sha256=qJeBpc8urnwTFvbwWrSTIbHVkRUuCXP-dKaNbUK2U2U,6077
64
+ alembic/testing/suite/test_autogen_computed.py,sha256=CXAeF-5Wr2cmW8PB7ztHG_4ZQsn1gSWrHWfxi72grNU,6147
65
65
  alembic/testing/suite/test_autogen_diffs.py,sha256=T4SR1n_kmcOKYhR4W1-dA0e5sddJ69DSVL2HW96kAkE,8394
66
66
  alembic/testing/suite/test_autogen_fks.py,sha256=AqFmb26Buex167HYa9dZWOk8x-JlB1OK3bwcvvjDFaU,32927
67
67
  alembic/testing/suite/test_autogen_identity.py,sha256=kcuqngG7qXAKPJDX4U8sRzPKHEJECHuZ0DtuaS6tVkk,5824
68
- alembic/testing/suite/test_environment.py,sha256=w9F0xnLEbALeR8k6_-Tz6JHvy91IqiTSypNasVzXfZQ,11877
68
+ alembic/testing/suite/test_environment.py,sha256=OwD-kpESdLoc4byBrGrXbZHvqtPbzhFCG4W9hJOJXPQ,11877
69
69
  alembic/testing/suite/test_op.py,sha256=2XQCdm_NmnPxHGuGj7hmxMzIhKxXNotUsKdACXzE1mM,1343
70
70
  alembic/util/__init__.py,sha256=KSZ7UT2YzH6CietgUtljVoE3QnGjoFKOi7RL5sgUxrk,1688
71
71
  alembic/util/compat.py,sha256=RjHdQa1NomU3Zlvgfvza0OMiSRQSLRL3xVl3OdUy2UE,2594
72
72
  alembic/util/editor.py,sha256=JIz6_BdgV8_oKtnheR6DZoB7qnrHrlRgWjx09AsTsUw,2546
73
73
  alembic/util/exc.py,sha256=KQTru4zcgAmN4IxLMwLFS56XToUewaXB7oOLcPNjPwg,98
74
- alembic/util/langhelpers.py,sha256=KYyOjFjJ26evPmrwhdTvLQNXN0bK7AIy5sRdKD91Fvg,10038
75
- alembic/util/messaging.py,sha256=BM5OCZ6qmLftFRw5yPSxj539_QmfVwNYoU8qYsDqoJY,3132
74
+ alembic/util/langhelpers.py,sha256=LpOcovnhMnP45kTt8zNJ4BHpyQrlF40OL6yDXjqKtsE,10026
75
+ alembic/util/messaging.py,sha256=BxAHiJsYHBPb2m8zv4yaueSRAlVuYXWkRCeN02JXhqw,3250
76
76
  alembic/util/pyfiles.py,sha256=zltVdcwEJJCPS2gHsQvkHkQakuF6wXiZ6zfwHbGNT0g,3489
77
- alembic/util/sqla_compat.py,sha256=toD1S63PgZ6iEteP9bwIf5E7DIUdQPo0UQ_Fn18qWnI,19536
78
- alembic-1.13.1.dist-info/LICENSE,sha256=soUmiob0QW6vTQWyrjiAwVb3xZqPk1pAK8BW6vszrwg,1058
79
- alembic-1.13.1.dist-info/METADATA,sha256=W1F2NBRkhqW55HiGmEIpdmiRt2skU5wwJd21UHFbSdQ,7390
80
- alembic-1.13.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
81
- alembic-1.13.1.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48
82
- alembic-1.13.1.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8
83
- alembic-1.13.1.dist-info/RECORD,,
77
+ alembic/util/sqla_compat.py,sha256=cg1kUQcatV8whwiYIP_IVVktQe7RkAzQ4aekHTWTITo,19520
78
+ alembic-1.13.2.dist-info/LICENSE,sha256=zhnnuit3ylhLgqZ5KFbhOOswsxHIlrB2wJpAXuRfvuk,1059
79
+ alembic-1.13.2.dist-info/METADATA,sha256=MiPeqh7s3_-Fw3qSLli6kj69bv82oARVZhLA5ToJ5rk,7390
80
+ alembic-1.13.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
81
+ alembic-1.13.2.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48
82
+ alembic-1.13.2.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8
83
+ alembic-1.13.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5