log = logging.getLogger(__name__)
+MAX_PYTHON_ARGS = 255
+
try:
from sqlalchemy.sql.naming import conv
def _render_gen_name(autogen_context, name):
return repr(value)
def _add_table(table, autogen_context):
+ args = [col for col in
+ [_render_column(col, autogen_context) for col in table.c]
+ if col] + \
+ sorted([rcons for rcons in
+ [_render_constraint(cons, autogen_context) for cons in
+ table.constraints]
+ if rcons is not None
+ ])
+
+ if len(args) > MAX_PYTHON_ARGS:
+ args = '*[' + ',\n'.join(args) + ']'
+ else:
+ args = ',\n'.join(args)
+
text = "%(prefix)screate_table(%(tablename)r,\n%(args)s" % {
'tablename': table.name,
'prefix': _alembic_autogenerate_prefix(autogen_context),
- 'args': ',\n'.join(
- [col for col in
- [_render_column(col, autogen_context) for col in table.c]
- if col] +
- sorted([rcons for rcons in
- [_render_constraint(cons, autogen_context) for cons in
- table.constraints]
- if rcons is not None
- ])
- )
+ 'args': args,
}
if table.schema:
text += ",\nschema=%r" % table.schema
testing_config.read(['test.cfg'])
if py33:
- from unittest.mock import Mock, call
+ from unittest.mock import Mock, call, patch
from unittest import mock
else:
try:
- from mock import Mock, call
+ from mock import Mock, call, patch
import mock
except ImportError:
raise ImportError(
from sqlalchemy.dialects import mysql, postgresql
from sqlalchemy.sql import and_, column, literal_column
+from . import patch
+
from alembic import autogenerate, util, compat
from . import eq_, eq_ignore_whitespace, requires_092, requires_09, requires_094
")"
)
+ @patch("alembic.autogenerate.render.MAX_PYTHON_ARGS", 3)
+ def test_render_table_max_cols(self):
+ m = MetaData()
+ t = Table(
+ 'test', m,
+ Column('a', Integer),
+ Column('b', Integer),
+ Column('c', Integer),
+ Column('d', Integer),
+ )
+ eq_ignore_whitespace(
+ autogenerate.render._add_table(t, self.autogen_context),
+ "op.create_table('test',"
+ "*[sa.Column('a', sa.Integer(), nullable=True),"
+ "sa.Column('b', sa.Integer(), nullable=True),"
+ "sa.Column('c', sa.Integer(), nullable=True),"
+ "sa.Column('d', sa.Integer(), nullable=True)])"
+ )
+
+ t2 = Table(
+ 'test2', m,
+ Column('a', Integer),
+ Column('b', Integer),
+ Column('c', Integer),
+ )
+
+ eq_ignore_whitespace(
+ autogenerate.render._add_table(t2, self.autogen_context),
+ "op.create_table('test2',"
+ "sa.Column('a', sa.Integer(), nullable=True),"
+ "sa.Column('b', sa.Integer(), nullable=True),"
+ "sa.Column('c', sa.Integer(), nullable=True))"
+ )
+
def test_render_table_w_fk_schema(self):
m = MetaData()
t = Table('test', m,