From e799e42f18f6f84ee2bca9618719b4cf7ba895ee Mon Sep 17 00:00:00 2001 From: Jet Zhou Date: Thu, 27 May 2021 14:26:51 -0400 Subject: [PATCH] Add kwargs support to DropIndexOp autogenerate render Fixed issue where dialect-specific keyword arguments within the :class:`.DropIndex` operation directive would not render in the autogenerated Python code. As support was improved for adding dialect specific arguments to directives as part of :ticket:`803`, in particular arguments such as "postgresql_concurrently" which apply to the actual create/drop of the index, support was needed for these to render even in a drop index operation. Pull request courtesy Jet Zhou. Fixes: #849 Closes: #852 Pull-request: https://github.com/sqlalchemy/alembic/pull/852 Pull-request-sha: 6392a287179ed746f709ba1e0e07ccab3ea8e4c6 Change-Id: I9b602178c32d6c6a41c0dbe0969a19bd4fa329bd --- alembic/autogenerate/render.py | 18 ++++++++++++++++-- docs/build/unreleased/849.rst | 11 +++++++++++ tests/test_autogen_render.py | 17 +++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 docs/build/unreleased/849.rst diff --git a/alembic/autogenerate/render.py b/alembic/autogenerate/render.py index 58b469c5..79d02615 100644 --- a/alembic/autogenerate/render.py +++ b/alembic/autogenerate/render.py @@ -272,14 +272,16 @@ def _add_index(autogen_context, op): @renderers.dispatch_for(ops.DropIndexOp) def _drop_index(autogen_context, op): + index = op.to_index() + has_batch = autogen_context._has_batch if has_batch: - tmpl = "%(prefix)sdrop_index(%(name)r)" + tmpl = "%(prefix)sdrop_index(%(name)r%(kwargs)s)" else: tmpl = ( "%(prefix)sdrop_index(%(name)r, " - "table_name=%(table_name)r%(schema)s)" + "table_name=%(table_name)r%(schema)s%(kwargs)s)" ) text = tmpl % { @@ -287,6 +289,18 @@ def _drop_index(autogen_context, op): "name": _render_gen_name(autogen_context, op.index_name), "table_name": _ident(op.table_name), "schema": ((", schema=%r" % _ident(op.schema)) if op.schema else ""), + "kwargs": ( + ", " + + ", ".join( + [ + "%s=%s" + % (key, _render_potential_expr(val, autogen_context)) + for key, val in index.kwargs.items() + ] + ) + ) + if len(index.kwargs) + else "", } return text diff --git a/docs/build/unreleased/849.rst b/docs/build/unreleased/849.rst new file mode 100644 index 00000000..b6afb33d --- /dev/null +++ b/docs/build/unreleased/849.rst @@ -0,0 +1,11 @@ +.. change:: + :tags: bug, autogenerate + :tickets: 849 + + Fixed issue where dialect-specific keyword arguments within the + :class:`.DropIndex` operation directive would not render in the + autogenerated Python code. As support was improved for adding dialect + specific arguments to directives as part of :ticket:`803`, in particular + arguments such as "postgresql_concurrently" which apply to the actual + create/drop of the index, support was needed for these to render even in a + drop index operation. Pull request courtesy Jet Zhou. diff --git a/tests/test_autogen_render.py b/tests/test_autogen_render.py index dbd3b109..d4ce4328 100644 --- a/tests/test_autogen_render.py +++ b/tests/test_autogen_render.py @@ -240,6 +240,23 @@ class AutogenRenderTest(TestBase): "op.drop_index('test_active_code_idx', table_name='test')", ) + @testing.emits_warning("Can't validate argument ") + def test_render_drop_index_custom_kwarg(self): + t = Table( + "test", + MetaData(), + Column("id", Integer, primary_key=True), + Column("active", Boolean()), + Column("code", String(255)), + ) + idx = Index(None, t.c.active, t.c.code, somedialect_foobar="option") + op_obj = ops.DropIndexOp.from_index(idx) + eq_ignore_whitespace( + autogenerate.render_op_text(self.autogen_context, op_obj), + "op.drop_index(op.f('ix_test_active'), table_name='test', " + "somedialect_foobar='option')", + ) + def test_drop_index_batch(self): """ autogenerate.render._drop_index -- 2.47.2