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 +1 -1
- alembic/autogenerate/api.py +3 -3
- alembic/autogenerate/compare.py +1 -1
- alembic/autogenerate/render.py +25 -15
- alembic/command.py +24 -15
- alembic/config.py +5 -10
- alembic/ddl/_autogen.py +15 -11
- alembic/ddl/base.py +5 -4
- alembic/ddl/impl.py +22 -17
- alembic/ddl/mysql.py +49 -31
- alembic/ddl/oracle.py +5 -3
- alembic/ddl/postgresql.py +2 -1
- alembic/operations/base.py +5 -8
- alembic/operations/ops.py +5 -5
- alembic/operations/schemaobj.py +6 -4
- alembic/runtime/environment.py +5 -7
- alembic/runtime/migration.py +9 -9
- alembic/script/base.py +11 -9
- alembic/script/revision.py +25 -18
- alembic/templates/async/alembic.ini.mako +3 -3
- alembic/templates/generic/alembic.ini.mako +2 -2
- alembic/templates/multidb/alembic.ini.mako +2 -2
- alembic/testing/fixtures.py +20 -8
- alembic/testing/suite/test_autogen_computed.py +1 -0
- alembic/testing/suite/test_environment.py +3 -3
- alembic/util/langhelpers.py +3 -6
- alembic/util/messaging.py +9 -3
- alembic/util/sqla_compat.py +2 -4
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/LICENSE +2 -2
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/METADATA +1 -1
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/RECORD +34 -34
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/WHEEL +1 -1
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/entry_points.txt +0 -0
- {alembic-1.13.1.dist-info → alembic-1.13.2.dist-info}/top_level.txt +0 -0
alembic/__init__.py
CHANGED
alembic/autogenerate/api.py
CHANGED
@@ -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
|
-
|
601
|
-
|
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(
|
alembic/autogenerate/compare.py
CHANGED
alembic/autogenerate/render.py
CHANGED
@@ -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=
|
191
|
-
|
192
|
-
|
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=
|
220
|
-
|
221
|
-
|
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": (
|
332
|
-
|
333
|
-
|
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
|
-
|
596
|
-
|
597
|
-
|
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":
|
1079
|
-
|
1080
|
-
|
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
|
318
|
+
:param revisions: The revisions to merge.
|
319
319
|
|
320
|
-
:param
|
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
|
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(
|
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
|
-
(
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
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
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
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
|
-
|
242
|
-
|
243
|
-
|
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[
|
172
|
-
multiparams: Sequence[
|
173
|
-
params:
|
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
|
-
|
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
|
-
|
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:
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
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=
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
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=
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
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=
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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=
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
-
|
372
|
-
|
373
|
-
|
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
|
-
|
145
|
-
|
146
|
-
|
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
|
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()
|
alembic/operations/base.py
CHANGED
@@ -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=
|
1375
|
-
|
1376
|
-
|
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
|
alembic/operations/schemaobj.py
CHANGED
@@ -223,10 +223,12 @@ class SchemaObjects:
|
|
223
223
|
t = sa_schema.Table(name, m, *cols, **kw)
|
224
224
|
|
225
225
|
constraints = [
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
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
|
]
|
alembic/runtime/environment.py
CHANGED
@@ -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(
|
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
|
alembic/runtime/migration.py
CHANGED
@@ -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
|
-
|
222
|
-
|
223
|
-
|
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
|
-
|
350
|
-
)
|
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
|
-
|
736
|
-
|
737
|
-
|
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
|
-
|
934
|
-
|
935
|
-
|
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:
|
alembic/script/revision.py
CHANGED
@@ -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
|
-
|
724
|
-
|
725
|
-
|
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
|
-
|
1021
|
-
|
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=
|
1187
|
-
|
1188
|
-
|
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=
|
1307
|
-
|
1308
|
-
|
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
|
alembic/testing/fixtures.py
CHANGED
@@ -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=
|
272
|
-
|
273
|
-
|
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
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
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
|
-
|
29
|
-
)
|
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
|
alembic/util/langhelpers.py
CHANGED
@@ -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
|
-
|
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,
|
102
|
-
write_outstream(sys.stdout,
|
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
|
|
alembic/util/sqla_compat.py
CHANGED
@@ -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-
|
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,7 +1,7 @@
|
|
1
|
-
alembic/__init__.py,sha256=
|
1
|
+
alembic/__init__.py,sha256=Cgo-xQ2JolKXx84viUN_535WHtufvauqLNTDnW4vMmc,63
|
2
2
|
alembic/__main__.py,sha256=373m7-TBh72JqrSMYviGrxCHZo-cnweM8AGF8A22PmY,78
|
3
|
-
alembic/command.py,sha256=
|
4
|
-
alembic/config.py,sha256=
|
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=
|
14
|
-
alembic/autogenerate/compare.py,sha256=
|
15
|
-
alembic/autogenerate/render.py,sha256=
|
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=
|
19
|
-
alembic/ddl/base.py,sha256=
|
20
|
-
alembic/ddl/impl.py,sha256=
|
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=
|
23
|
-
alembic/ddl/oracle.py,sha256=
|
24
|
-
alembic/ddl/postgresql.py,sha256=
|
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=
|
27
|
+
alembic/operations/base.py,sha256=ExTfmPvL1XPu8GGftmJfRavbj47A8rJwO13nfM1Vb9c,74000
|
28
28
|
alembic/operations/batch.py,sha256=YqtD4hJ3_RkFxvI7zbmBwxcLEyLHYyWQpsz4l5L85yI,26943
|
29
|
-
alembic/operations/ops.py,sha256=
|
30
|
-
alembic/operations/schemaobj.py,sha256=
|
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=
|
34
|
-
alembic/runtime/migration.py,sha256=
|
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=
|
37
|
-
alembic/script/revision.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
75
|
-
alembic/util/messaging.py,sha256=
|
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=
|
78
|
-
alembic-1.13.
|
79
|
-
alembic-1.13.
|
80
|
-
alembic-1.13.
|
81
|
-
alembic-1.13.
|
82
|
-
alembic-1.13.
|
83
|
-
alembic-1.13.
|
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,,
|
File without changes
|
File without changes
|