alembic 1.13.2__py3-none-any.whl → 1.13.3__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.2"
4
+ __version__ = "1.13.3"
@@ -279,6 +279,9 @@ def _add_table(autogen_context: AutogenContext, op: ops.CreateTableOp) -> str:
279
279
  prefixes = ", ".join("'%s'" % p for p in table._prefixes)
280
280
  text += ",\nprefixes=[%s]" % prefixes
281
281
 
282
+ if op.if_not_exists is not None:
283
+ text += ",\nif_not_exists=%r" % bool(op.if_not_exists)
284
+
282
285
  text += "\n)"
283
286
  return text
284
287
 
@@ -291,6 +294,10 @@ def _drop_table(autogen_context: AutogenContext, op: ops.DropTableOp) -> str:
291
294
  }
292
295
  if op.schema:
293
296
  text += ", schema=%r" % _ident(op.schema)
297
+
298
+ if op.if_exists is not None:
299
+ text += ", if_exists=%r" % bool(op.if_exists)
300
+
294
301
  text += ")"
295
302
  return text
296
303
 
@@ -324,6 +331,8 @@ def _add_index(autogen_context: AutogenContext, op: ops.CreateIndexOp) -> str:
324
331
  assert index.table is not None
325
332
 
326
333
  opts = _render_dialect_kwargs_items(autogen_context, index)
334
+ if op.if_not_exists is not None:
335
+ opts.append("if_not_exists=%r" % bool(op.if_not_exists))
327
336
  text = tmpl % {
328
337
  "prefix": _alembic_autogenerate_prefix(autogen_context),
329
338
  "name": _render_gen_name(autogen_context, index.name),
@@ -356,6 +365,8 @@ def _drop_index(autogen_context: AutogenContext, op: ops.DropIndexOp) -> str:
356
365
  "table_name=%(table_name)r%(schema)s%(kwargs)s)"
357
366
  )
358
367
  opts = _render_dialect_kwargs_items(autogen_context, index)
368
+ if op.if_exists is not None:
369
+ opts.append("if_exists=%r" % bool(op.if_exists))
359
370
  text = tmpl % {
360
371
  "prefix": _alembic_autogenerate_prefix(autogen_context),
361
372
  "name": _render_gen_name(autogen_context, op.index_name),
alembic/ddl/impl.py CHANGED
@@ -362,11 +362,11 @@ class DefaultImpl(metaclass=ImplMeta):
362
362
  base.RenameTable(old_table_name, new_table_name, schema=schema)
363
363
  )
364
364
 
365
- def create_table(self, table: Table) -> None:
365
+ def create_table(self, table: Table, **kw: Any) -> None:
366
366
  table.dispatch.before_create(
367
367
  table, self.connection, checkfirst=False, _ddl_runner=self
368
368
  )
369
- self._exec(schema.CreateTable(table))
369
+ self._exec(schema.CreateTable(table, **kw))
370
370
  table.dispatch.after_create(
371
371
  table, self.connection, checkfirst=False, _ddl_runner=self
372
372
  )
@@ -385,11 +385,11 @@ class DefaultImpl(metaclass=ImplMeta):
385
385
  if comment and with_comment:
386
386
  self.create_column_comment(column)
387
387
 
388
- def drop_table(self, table: Table) -> None:
388
+ def drop_table(self, table: Table, **kw: Any) -> None:
389
389
  table.dispatch.before_drop(
390
390
  table, self.connection, checkfirst=False, _ddl_runner=self
391
391
  )
392
- self._exec(schema.DropTable(table))
392
+ self._exec(schema.DropTable(table, **kw))
393
393
  table.dispatch.after_drop(
394
394
  table, self.connection, checkfirst=False, _ddl_runner=self
395
395
  )
alembic/op.pyi CHANGED
@@ -747,7 +747,12 @@ def create_primary_key(
747
747
 
748
748
  """
749
749
 
750
- def create_table(table_name: str, *columns: SchemaItem, **kw: Any) -> Table:
750
+ def create_table(
751
+ table_name: str,
752
+ *columns: SchemaItem,
753
+ if_not_exists: Optional[bool] = None,
754
+ **kw: Any,
755
+ ) -> Table:
751
756
  r"""Issue a "create table" instruction using the current migration
752
757
  context.
753
758
 
@@ -818,6 +823,10 @@ def create_table(table_name: str, *columns: SchemaItem, **kw: Any) -> Table:
818
823
  quoting of the schema outside of the default behavior, use
819
824
  the SQLAlchemy construct
820
825
  :class:`~sqlalchemy.sql.elements.quoted_name`.
826
+ :param if_not_exists: If True, adds IF NOT EXISTS operator when
827
+ creating the new table.
828
+
829
+ .. versionadded:: 1.13.3
821
830
  :param \**kw: Other keyword arguments are passed to the underlying
822
831
  :class:`sqlalchemy.schema.Table` object created for the command.
823
832
 
@@ -998,7 +1007,11 @@ def drop_index(
998
1007
  """
999
1008
 
1000
1009
  def drop_table(
1001
- table_name: str, *, schema: Optional[str] = None, **kw: Any
1010
+ table_name: str,
1011
+ *,
1012
+ schema: Optional[str] = None,
1013
+ if_exists: Optional[bool] = None,
1014
+ **kw: Any,
1002
1015
  ) -> None:
1003
1016
  r"""Issue a "drop table" instruction using the current
1004
1017
  migration context.
@@ -1013,6 +1026,10 @@ def drop_table(
1013
1026
  quoting of the schema outside of the default behavior, use
1014
1027
  the SQLAlchemy construct
1015
1028
  :class:`~sqlalchemy.sql.elements.quoted_name`.
1029
+ :param if_exists: If True, adds IF EXISTS operator when
1030
+ dropping the table.
1031
+
1032
+ .. versionadded:: 1.13.3
1016
1033
  :param \**kw: Other keyword arguments are passed to the underlying
1017
1034
  :class:`sqlalchemy.schema.Table` object created for the command.
1018
1035
 
@@ -1175,7 +1175,11 @@ class Operations(AbstractOperations):
1175
1175
  ...
1176
1176
 
1177
1177
  def create_table(
1178
- self, table_name: str, *columns: SchemaItem, **kw: Any
1178
+ self,
1179
+ table_name: str,
1180
+ *columns: SchemaItem,
1181
+ if_not_exists: Optional[bool] = None,
1182
+ **kw: Any,
1179
1183
  ) -> Table:
1180
1184
  r"""Issue a "create table" instruction using the current migration
1181
1185
  context.
@@ -1247,6 +1251,10 @@ class Operations(AbstractOperations):
1247
1251
  quoting of the schema outside of the default behavior, use
1248
1252
  the SQLAlchemy construct
1249
1253
  :class:`~sqlalchemy.sql.elements.quoted_name`.
1254
+ :param if_not_exists: If True, adds IF NOT EXISTS operator when
1255
+ creating the new table.
1256
+
1257
+ .. versionadded:: 1.13.3
1250
1258
  :param \**kw: Other keyword arguments are passed to the underlying
1251
1259
  :class:`sqlalchemy.schema.Table` object created for the command.
1252
1260
 
@@ -1438,7 +1446,12 @@ class Operations(AbstractOperations):
1438
1446
  ...
1439
1447
 
1440
1448
  def drop_table(
1441
- self, table_name: str, *, schema: Optional[str] = None, **kw: Any
1449
+ self,
1450
+ table_name: str,
1451
+ *,
1452
+ schema: Optional[str] = None,
1453
+ if_exists: Optional[bool] = None,
1454
+ **kw: Any,
1442
1455
  ) -> None:
1443
1456
  r"""Issue a "drop table" instruction using the current
1444
1457
  migration context.
@@ -1453,6 +1466,10 @@ class Operations(AbstractOperations):
1453
1466
  quoting of the schema outside of the default behavior, use
1454
1467
  the SQLAlchemy construct
1455
1468
  :class:`~sqlalchemy.sql.elements.quoted_name`.
1469
+ :param if_exists: If True, adds IF EXISTS operator when
1470
+ dropping the table.
1471
+
1472
+ .. versionadded:: 1.13.3
1456
1473
  :param \**kw: Other keyword arguments are passed to the underlying
1457
1474
  :class:`sqlalchemy.schema.Table` object created for the command.
1458
1475
 
alembic/operations/ops.py CHANGED
@@ -1159,6 +1159,7 @@ class CreateTableOp(MigrateOperation):
1159
1159
  columns: Sequence[SchemaItem],
1160
1160
  *,
1161
1161
  schema: Optional[str] = None,
1162
+ if_not_exists: Optional[bool] = None,
1162
1163
  _namespace_metadata: Optional[MetaData] = None,
1163
1164
  _constraints_included: bool = False,
1164
1165
  **kw: Any,
@@ -1166,6 +1167,7 @@ class CreateTableOp(MigrateOperation):
1166
1167
  self.table_name = table_name
1167
1168
  self.columns = columns
1168
1169
  self.schema = schema
1170
+ self.if_not_exists = if_not_exists
1169
1171
  self.info = kw.pop("info", {})
1170
1172
  self.comment = kw.pop("comment", None)
1171
1173
  self.prefixes = kw.pop("prefixes", None)
@@ -1228,6 +1230,7 @@ class CreateTableOp(MigrateOperation):
1228
1230
  operations: Operations,
1229
1231
  table_name: str,
1230
1232
  *columns: SchemaItem,
1233
+ if_not_exists: Optional[bool] = None,
1231
1234
  **kw: Any,
1232
1235
  ) -> Table:
1233
1236
  r"""Issue a "create table" instruction using the current migration
@@ -1300,6 +1303,10 @@ class CreateTableOp(MigrateOperation):
1300
1303
  quoting of the schema outside of the default behavior, use
1301
1304
  the SQLAlchemy construct
1302
1305
  :class:`~sqlalchemy.sql.elements.quoted_name`.
1306
+ :param if_not_exists: If True, adds IF NOT EXISTS operator when
1307
+ creating the new table.
1308
+
1309
+ .. versionadded:: 1.13.3
1303
1310
  :param \**kw: Other keyword arguments are passed to the underlying
1304
1311
  :class:`sqlalchemy.schema.Table` object created for the command.
1305
1312
 
@@ -1307,7 +1314,7 @@ class CreateTableOp(MigrateOperation):
1307
1314
  to the parameters given.
1308
1315
 
1309
1316
  """
1310
- op = cls(table_name, columns, **kw)
1317
+ op = cls(table_name, columns, if_not_exists=if_not_exists, **kw)
1311
1318
  return operations.invoke(op)
1312
1319
 
1313
1320
 
@@ -1320,11 +1327,13 @@ class DropTableOp(MigrateOperation):
1320
1327
  table_name: str,
1321
1328
  *,
1322
1329
  schema: Optional[str] = None,
1330
+ if_exists: Optional[bool] = None,
1323
1331
  table_kw: Optional[MutableMapping[Any, Any]] = None,
1324
1332
  _reverse: Optional[CreateTableOp] = None,
1325
1333
  ) -> None:
1326
1334
  self.table_name = table_name
1327
1335
  self.schema = schema
1336
+ self.if_exists = if_exists
1328
1337
  self.table_kw = table_kw or {}
1329
1338
  self.comment = self.table_kw.pop("comment", None)
1330
1339
  self.info = self.table_kw.pop("info", None)
@@ -1385,6 +1394,7 @@ class DropTableOp(MigrateOperation):
1385
1394
  table_name: str,
1386
1395
  *,
1387
1396
  schema: Optional[str] = None,
1397
+ if_exists: Optional[bool] = None,
1388
1398
  **kw: Any,
1389
1399
  ) -> None:
1390
1400
  r"""Issue a "drop table" instruction using the current
@@ -1400,11 +1410,15 @@ class DropTableOp(MigrateOperation):
1400
1410
  quoting of the schema outside of the default behavior, use
1401
1411
  the SQLAlchemy construct
1402
1412
  :class:`~sqlalchemy.sql.elements.quoted_name`.
1413
+ :param if_exists: If True, adds IF EXISTS operator when
1414
+ dropping the table.
1415
+
1416
+ .. versionadded:: 1.13.3
1403
1417
  :param \**kw: Other keyword arguments are passed to the underlying
1404
1418
  :class:`sqlalchemy.schema.Table` object created for the command.
1405
1419
 
1406
1420
  """
1407
- op = cls(table_name, schema=schema, table_kw=kw)
1421
+ op = cls(table_name, schema=schema, if_exists=if_exists, table_kw=kw)
1408
1422
  operations.invoke(op)
1409
1423
 
1410
1424
 
@@ -79,8 +79,14 @@ def alter_column(
79
79
 
80
80
  @Operations.implementation_for(ops.DropTableOp)
81
81
  def drop_table(operations: "Operations", operation: "ops.DropTableOp") -> None:
82
+ kw = {}
83
+ if operation.if_exists is not None:
84
+ if not sqla_14:
85
+ raise NotImplementedError("SQLAlchemy 1.4+ required")
86
+
87
+ kw["if_exists"] = operation.if_exists
82
88
  operations.impl.drop_table(
83
- operation.to_table(operations.migration_context)
89
+ operation.to_table(operations.migration_context), **kw
84
90
  )
85
91
 
86
92
 
@@ -127,8 +133,14 @@ def drop_index(operations: "Operations", operation: "ops.DropIndexOp") -> None:
127
133
  def create_table(
128
134
  operations: "Operations", operation: "ops.CreateTableOp"
129
135
  ) -> "Table":
136
+ kw = {}
137
+ if operation.if_not_exists is not None:
138
+ if not sqla_14:
139
+ raise NotImplementedError("SQLAlchemy 1.4+ required")
140
+
141
+ kw["if_not_exists"] = operation.if_not_exists
130
142
  table = operation.to_table(operations.migration_context)
131
- operations.impl.create_table(table)
143
+ operations.impl.create_table(table, **kw)
132
144
  return table
133
145
 
134
146
 
alembic/script/base.py CHANGED
@@ -187,6 +187,7 @@ class ScriptDirectory:
187
187
  split_on_path = {
188
188
  None: None,
189
189
  "space": " ",
190
+ "newline": "\n",
190
191
  "os": os.pathsep,
191
192
  ":": ":",
192
193
  ";": ";",
@@ -200,7 +201,8 @@ class ScriptDirectory:
200
201
  raise ValueError(
201
202
  "'%s' is not a valid value for "
202
203
  "version_path_separator; "
203
- "expected 'space', 'os', ':', ';'" % version_path_separator
204
+ "expected 'space', 'newline', 'os', ':', ';'"
205
+ % version_path_separator
204
206
  ) from ke
205
207
  else:
206
208
  if split_char is None:
@@ -210,7 +212,9 @@ class ScriptDirectory:
210
212
  )
211
213
  else:
212
214
  version_locations = [
213
- x for x in version_locations_str.split(split_char) if x
215
+ x.strip()
216
+ for x in version_locations_str.split(split_char)
217
+ if x
214
218
  ]
215
219
  else:
216
220
  version_locations = None
@@ -47,6 +47,7 @@ prepend_sys_path = .
47
47
  # version_path_separator = :
48
48
  # version_path_separator = ;
49
49
  # version_path_separator = space
50
+ # version_path_separator = newline
50
51
  version_path_separator = os # Use os.pathsep. Default configuration used for new projects.
51
52
 
52
53
  # set to 'true' to search source files recursively
@@ -49,6 +49,7 @@ prepend_sys_path = .
49
49
  # version_path_separator = :
50
50
  # version_path_separator = ;
51
51
  # version_path_separator = space
52
+ # version_path_separator = newline
52
53
  version_path_separator = os # Use os.pathsep. Default configuration used for new projects.
53
54
 
54
55
  # set to 'true' to search source files recursively
@@ -49,6 +49,7 @@ prepend_sys_path = .
49
49
  # version_path_separator = :
50
50
  # version_path_separator = ;
51
51
  # version_path_separator = space
52
+ # version_path_separator = newline
52
53
  version_path_separator = os # Use os.pathsep. Default configuration used for new projects.
53
54
 
54
55
  # set to 'true' to search source files recursively
@@ -74,7 +74,9 @@ class _ErrorContainer:
74
74
 
75
75
 
76
76
  @contextlib.contextmanager
77
- def _expect_raises(except_cls, msg=None, check_context=False):
77
+ def _expect_raises(
78
+ except_cls, msg=None, check_context=False, text_exact=False
79
+ ):
78
80
  ec = _ErrorContainer()
79
81
  if check_context:
80
82
  are_we_already_in_a_traceback = sys.exc_info()[0]
@@ -85,7 +87,10 @@ def _expect_raises(except_cls, msg=None, check_context=False):
85
87
  ec.error = err
86
88
  success = True
87
89
  if msg is not None:
88
- assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}"
90
+ if text_exact:
91
+ assert str(err) == msg, f"{msg} != {err}"
92
+ else:
93
+ assert re.search(msg, str(err), re.UNICODE), f"{msg} !~ {err}"
89
94
  if check_context and not are_we_already_in_a_traceback:
90
95
  _assert_proper_exception_context(err)
91
96
  print(str(err).encode("utf-8"))
@@ -98,8 +103,12 @@ def expect_raises(except_cls, check_context=True):
98
103
  return _expect_raises(except_cls, check_context=check_context)
99
104
 
100
105
 
101
- def expect_raises_message(except_cls, msg, check_context=True):
102
- return _expect_raises(except_cls, msg=msg, check_context=check_context)
106
+ def expect_raises_message(
107
+ except_cls, msg, check_context=True, text_exact=False
108
+ ):
109
+ return _expect_raises(
110
+ except_cls, msg=msg, check_context=check_context, text_exact=text_exact
111
+ )
103
112
 
104
113
 
105
114
  def eq_ignore_whitespace(a, b, msg=None):
@@ -527,7 +527,7 @@ class _textual_index_element(sql.ColumnElement):
527
527
  self.fake_column = schema.Column(self.text.text, sqltypes.NULLTYPE)
528
528
  table.append_column(self.fake_column)
529
529
 
530
- def get_children(self):
530
+ def get_children(self, **kw):
531
531
  return [self.fake_column]
532
532
 
533
533
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: alembic
3
- Version: 1.13.2
3
+ Version: 1.13.3
4
4
  Summary: A database migration tool for SQLAlchemy.
5
5
  Home-page: https://alembic.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -1,4 +1,4 @@
1
- alembic/__init__.py,sha256=Cgo-xQ2JolKXx84viUN_535WHtufvauqLNTDnW4vMmc,63
1
+ alembic/__init__.py,sha256=IZLF4dqHa7mXm10zXXAxFsXBP7yE27ZxghGv3BhN-Jw,63
2
2
  alembic/__main__.py,sha256=373m7-TBh72JqrSMYviGrxCHZo-cnweM8AGF8A22PmY,78
3
3
  alembic/command.py,sha256=2tkKrIoEgPfXrGgvMRGrUXH4l-7z466DOxd7Q2XOfL8,22169
4
4
  alembic/config.py,sha256=BZ7mwFRk2gq8GFNxxy9qvMUFx43YbDbQTC99OnjqiKY,22216
@@ -7,49 +7,49 @@ alembic/context.pyi,sha256=hUHbSnbSeEEMVkk0gDSXOq4_9edSjYzsjmmf-mL9Iao,31737
7
7
  alembic/environment.py,sha256=MM5lPayGT04H3aeng1H7GQ8HEAs3VGX5yy6mDLCPLT4,43
8
8
  alembic/migration.py,sha256=MV6Fju6rZtn2fTREKzXrCZM6aIBGII4OMZFix0X-GLs,41
9
9
  alembic/op.py,sha256=flHtcsVqOD-ZgZKK2pv-CJ5Cwh-KJ7puMUNXzishxLw,167
10
- alembic/op.pyi,sha256=8R6SJr1dQharU0blmMJJj23XFO_hk9ZmAQBJBQOeXRU,49816
10
+ alembic/op.pyi,sha256=QZ1ERetxIrpZNTyg48Btn5OJhhpMId-_MLMP36RauOw,50168
11
11
  alembic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  alembic/autogenerate/__init__.py,sha256=ntmUTXhjLm4_zmqIwyVaECdpPDn6_u1yM9vYk6-553E,543
13
13
  alembic/autogenerate/api.py,sha256=Bh-37G0PSFeT9WSfEQ-3TZoainXGLL2nsl4okv_xYc0,22173
14
14
  alembic/autogenerate/compare.py,sha256=cdUBH6qsedaJsnToSOu4MfcJaI4bjUJ4VWqtBlqsSr8,44944
15
- alembic/autogenerate/render.py,sha256=Sx4aQy1OafI0eii_uEtO9venaI8GOOBj1p-TMhTWNNw,35099
15
+ alembic/autogenerate/render.py,sha256=YB3C90rq7XDhjTia9GAnK6yfnVVzCROziZrbArmG9SE,35481
16
16
  alembic/autogenerate/rewriter.py,sha256=uZWRkTYJoncoEJ5WY1QBRiozjyChqZDJPy4LtcRibjM,7846
17
17
  alembic/ddl/__init__.py,sha256=Df8fy4Vn_abP8B7q3x8gyFwEwnLw6hs2Ljt_bV3EZWE,152
18
18
  alembic/ddl/_autogen.py,sha256=Blv2RrHNyF4cE6znCQXNXG5T9aO-YmiwD4Fz-qfoaWA,9275
19
19
  alembic/ddl/base.py,sha256=fzGvWyvpSluIOKDQ7Ajc-i_jlDpH4j-JZFOOPxxYS-s,9986
20
- alembic/ddl/impl.py,sha256=R4oIVxl4OllYBU6BuQRH-4MhUAU4Qfu_M3lBkYb5pv4,29033
20
+ alembic/ddl/impl.py,sha256=VggQMr6aqeVw12Cj4EqJpiETMhbrwIiG22HEJtPcR4s,29067
21
21
  alembic/ddl/mssql.py,sha256=ydvgBSaftKYjaBaMyqius66Ta4CICQSj79Og3Ed2atY,14219
22
22
  alembic/ddl/mysql.py,sha256=kXOGYmpnL_9WL3ijXNsG4aAwy3m1HWJOoLZSePzmJF0,17316
23
23
  alembic/ddl/oracle.py,sha256=669YlkcZihlXFbnXhH2krdrvDry8q5pcUGfoqkg_R6Y,6243
24
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=ExTfmPvL1XPu8GGftmJfRavbj47A8rJwO13nfM1Vb9c,74000
27
+ alembic/operations/base.py,sha256=JRaOtPqyqfaPjzGHxuP9VMcO1KsJNmbbLOvwG82qxGA,74474
28
28
  alembic/operations/batch.py,sha256=YqtD4hJ3_RkFxvI7zbmBwxcLEyLHYyWQpsz4l5L85yI,26943
29
- alembic/operations/ops.py,sha256=MUXsztT8LngGbv3wL06OSQuoty-FcI9uJWLwTmlm_GQ,94381
29
+ alembic/operations/ops.py,sha256=guIpLQzlqgkdP2LGDW8vWg_DXeAouEldiVZDgRas7YI,94953
30
30
  alembic/operations/schemaobj.py,sha256=Wp-bBe4a8lXPTvIHJttBY0ejtpVR5Jvtb2kI-U2PztQ,9468
31
- alembic/operations/toimpl.py,sha256=SoNY2_gZX2baXTD-pNjpCWnON8D2QBSYQBIjo13-WKA,7115
31
+ alembic/operations/toimpl.py,sha256=Fx-UKcq6S8pVtsEwPFjTKtEcAVKjfptn-BfpE1k3_ck,7517
32
32
  alembic/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  alembic/runtime/environment.py,sha256=SkYB_am1h3FSG8IsExAQxGP_7WwzOVigqjlO747Aokc,41497
34
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=XPydgsjabSI2sxmGEX-Ij_2mbtB1jC7aM66z7Ni3ZsI,37689
36
+ alembic/script/base.py,sha256=XLNpdsLnBBSz4ZKMFUArFUdtL1HcjtuUDHNbA-5VlZA,37809
37
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=mtG-32u1WzE9pQCGRy4Pw_G2hPmnrGO0sVC7wRtk9G0,3597
40
+ alembic/templates/async/alembic.ini.mako,sha256=7VfUJqH9tEsydKOOmpnGFTsERHWhs7ghORuASnJb_Co,3632
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=fJLaRCOrnd_qRHdfMMrZA5iqzBxdtIpxKCo4jdLx6KA,3705
44
+ alembic/templates/generic/alembic.ini.mako,sha256=5wy1rOdDJjHbeEnieycSaZ9tz6AM6hONYk4RiOVXnmk,3740
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=57TVeVTk4jjuAT42AyTHFqgr7gEssMGFKARzE2yEtIU,3799
48
+ alembic/templates/multidb/alembic.ini.mako,sha256=oThPQgzkg-NOcbsSXIemi-Lg4nib3G6hDHKdejjtJIM,3834
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
- alembic/testing/assertions.py,sha256=1CbJk8c8-WO9eJ0XJ0jJvMsNRLUrXV41NOeIJUAlOBk,5015
52
+ alembic/testing/assertions.py,sha256=ScUb1sVopIl70BirfHUJDvwswC70Q93CiIWwkiZbhHg,5207
53
53
  alembic/testing/env.py,sha256=zJacVb_z6uLs2U1TtkmnFH9P3_F-3IfYbVv4UEPOvfo,10754
54
54
  alembic/testing/fixtures.py,sha256=nBntOynOmVCFc7IYiN3DIQ3TBNTfiGCvL_1-FyCry8o,9462
55
55
  alembic/testing/requirements.py,sha256=dKeAO1l5TwBqXarJN-IPORlCqCJv-41Dj6oXoEikxHQ,5133
@@ -74,10 +74,10 @@ alembic/util/exc.py,sha256=KQTru4zcgAmN4IxLMwLFS56XToUewaXB7oOLcPNjPwg,98
74
74
  alembic/util/langhelpers.py,sha256=LpOcovnhMnP45kTt8zNJ4BHpyQrlF40OL6yDXjqKtsE,10026
75
75
  alembic/util/messaging.py,sha256=BxAHiJsYHBPb2m8zv4yaueSRAlVuYXWkRCeN02JXhqw,3250
76
76
  alembic/util/pyfiles.py,sha256=zltVdcwEJJCPS2gHsQvkHkQakuF6wXiZ6zfwHbGNT0g,3489
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,,
77
+ alembic/util/sqla_compat.py,sha256=XMfZaLdbVbJoniNUyI3RUUXu4gCWljjVBbJ7db6vCgc,19526
78
+ alembic-1.13.3.dist-info/LICENSE,sha256=zhnnuit3ylhLgqZ5KFbhOOswsxHIlrB2wJpAXuRfvuk,1059
79
+ alembic-1.13.3.dist-info/METADATA,sha256=6CGNPkq-FufkoGWO6PUhx64LztmqCUAyhbObbop42yQ,7390
80
+ alembic-1.13.3.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
81
+ alembic-1.13.3.dist-info/entry_points.txt,sha256=aykM30soxwGN0pB7etLc1q0cHJbL9dy46RnK9VX4LLw,48
82
+ alembic-1.13.3.dist-info/top_level.txt,sha256=FwKWd5VsPFC8iQjpu1u9Cn-JnK3-V1RhUCmWqz1cl-s,8
83
+ alembic-1.13.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5