From: Mike Bayer Date: Sat, 20 Sep 2014 17:53:11 +0000 (-0400) Subject: - restore _render_server_default_for_compare() to compare.py using X-Git-Tag: rel_0_7_0~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eea8dfcfc208b05aa57faea17233224da0382678;p=thirdparty%2Fsqlalchemy%2Falembic.git - restore _render_server_default_for_compare() to compare.py using the method previously used in _render_server_default() in render; these two functions become more specific to compare vs. render now so are separated out --- diff --git a/alembic/autogenerate/compare.py b/alembic/autogenerate/compare.py index bfca75e6..b5af2d89 100644 --- a/alembic/autogenerate/compare.py +++ b/alembic/autogenerate/compare.py @@ -1,11 +1,9 @@ from sqlalchemy import schema as sa_schema, types as sqltypes -from sqlalchemy.exc import NoSuchTableError -from sqlalchemy import sql import logging from .. import compat -from .render import _render_server_default, _render_potential_expr from sqlalchemy.util import OrderedSet - +import re +from .render import _user_defined_render log = logging.getLogger(__name__) @@ -477,9 +475,25 @@ def _compare_type(schema, tname, cname, conn_col, def _render_server_default_for_compare(metadata_default, metadata_col, autogen_context): - return _render_server_default( - metadata_default, autogen_context, - repr_=metadata_col.type._type_affinity is sqltypes.String) + rendered = _user_defined_render( + "server_default", metadata_default, autogen_context) + if rendered is not False: + return rendered + + if isinstance(metadata_default, sa_schema.DefaultClause): + if isinstance(metadata_default.arg, compat.string_types): + metadata_default = metadata_default.arg + else: + metadata_default = str(metadata_default.arg.compile( + dialect=autogen_context['dialect'])) + if isinstance(metadata_default, compat.string_types): + if metadata_col.type._type_affinity is sqltypes.String: + metadata_default = re.sub(r"^'|'$", "", metadata_default) + return repr(metadata_default) + else: + return metadata_default + else: + return None def _compare_server_default(schema, tname, cname, conn_col, metadata_col, diff --git a/tests/test_postgresql.py b/tests/test_postgresql.py index abfe0ed5..36b3e498 100644 --- a/tests/test_postgresql.py +++ b/tests/test_postgresql.py @@ -173,7 +173,13 @@ class PostgresqlDefaultCompareTest(TestBase): 'imports': set(), 'connection': connection, 'dialect': connection.dialect, - 'context': context + 'context': context, + 'opts': { + 'compare_type': True, + 'compare_server_default': True, + 'alembic_module_prefix': 'op.', + 'sqlalchemy_module_prefix': 'sa.', + } } @classmethod