From: Mike Bayer Date: Wed, 5 Dec 2012 20:36:45 +0000 (-0500) Subject: Added support for autogenerate render of X-Git-Tag: rel_0_4_1~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0ed20805f3f32de768b9b4eb9eebc9c3e0ac7453;p=thirdparty%2Fsqlalchemy%2Falembic.git Added support for autogenerate render of ForeignKeyConstraint options onupdate, ondelete, initially, and deferred. #92 --- diff --git a/alembic/autogenerate.py b/alembic/autogenerate.py index 57227953..11c8789e 100644 --- a/alembic/autogenerate.py +++ b/alembic/autogenerate.py @@ -628,8 +628,16 @@ def _render_foreign_key(constraint, autogen_context): opts = [] if constraint.name: opts.append(("name", repr(constraint.name))) + if constraint.onupdate: + opts.append(("onupdate", repr(constraint.onupdate))) + if constraint.ondelete: + opts.append(("ondelete", repr(constraint.ondelete))) + if constraint.initially: + opts.append(("initially", repr(constraint.initially))) + if constraint.deferrable: + opts.append(("deferrable", repr(constraint.deferrable))) + apply_metadata_schema = constraint.parent.metadata.schema - # TODO: deferrable, initially, etc. return "%(prefix)sForeignKeyConstraint([%(cols)s], "\ "[%(refcols)s], %(args)s)" % { "prefix": _sqlalchemy_autogenerate_prefix(autogen_context), diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 2d52e19b..6059f128 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -9,6 +9,14 @@ Changelog :version: 0.4.1 :released: + .. change:: + :tags: bug + :tickets: 92 + + Added support for autogenerate render of + ForeignKeyConstraint options onupdate, + ondelete, initially, and deferred. + .. change:: :tags: bug :tickets: 94 diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index 3b008ac6..63e60afe 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -1,7 +1,7 @@ from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \ Numeric, CHAR, ForeignKey, DATETIME, \ TypeDecorator, CheckConstraint, Unicode, Enum,\ - UniqueConstraint, Boolean + UniqueConstraint, Boolean, ForeignKeyConstraint from sqlalchemy.types import NULLTYPE, TIMESTAMP from sqlalchemy.dialects import mysql from sqlalchemy.engine.reflection import Inspector @@ -954,6 +954,35 @@ class AutogenRenderTest(TestCase): "existing_type=sa.Integer(), nullable=True, schema='foo')" ) + def test_render_fk_constraint_kwarg(self): + m = MetaData() + t1 = Table('t', m, Column('c', Integer)) + t2 = Table('t2', m, Column('c_rem', Integer)) + + fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], onupdate="CASCADE") + eq_ignore_whitespace( + autogenerate._render_constraint(fk, self.autogen_context), + "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], onupdate='CASCADE')" + ) + + fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], ondelete="CASCADE") + eq_ignore_whitespace( + autogenerate._render_constraint(fk, self.autogen_context), + "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], ondelete='CASCADE')" + ) + + fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], deferrable=True) + eq_ignore_whitespace( + autogenerate._render_constraint(fk, self.autogen_context), + "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], deferrable=True)" + ) + + fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], initially="XYZ") + eq_ignore_whitespace( + autogenerate._render_constraint(fk, self.autogen_context), + "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], initially='XYZ')" + ) + def test_render_check_constraint_literal(self): eq_ignore_whitespace( autogenerate._render_check_constraint(