Skip to content

Commit

Permalink
Support multiple -x arguments in Flask-Script interface
Browse files Browse the repository at this point in the history
Fixes #103
  • Loading branch information
miguelgrinberg committed Jan 30, 2017
1 parent 19af319 commit d294733
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 14 deletions.
14 changes: 8 additions & 6 deletions flask_migrate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,16 @@ def get_config(self, directory, x_arg=None, opts=None):
config.cmd_opts = argparse.Namespace()
for opt in opts or []:
setattr(config.cmd_opts, opt, True)
if x_arg is not None:
if not getattr(config.cmd_opts, 'x', None):
if not hasattr(config.cmd_opts, 'x'):
if x_arg is not None:
setattr(config.cmd_opts, 'x', [])
if isinstance(x_arg, list) or isinstance(x_arg, tuple):
for x in x_arg:
config.cmd_opts.x.append(x)
else:
config.cmd_opts.x.append(x_arg)
else:
setattr(config.cmd_opts, 'x', None)
return self.call_configure_callbacks(config)


Expand Down Expand Up @@ -233,8 +235,8 @@ def merge(directory=None, revisions='', message=None, branch_label=None,
help=("migration script directory (default is "
"'migrations')"))
@MigrateCommand.option('-x', '--x-arg', dest='x_arg', default=None,
help=("Additional arguments consumed by "
"custom env.py scripts"))
action='append', help=("Additional arguments consumed "
"by custom env.py scripts"))
def upgrade(directory=None, revision='head', sql=False, tag=None, x_arg=None):
"""Upgrade to a later version"""
config = current_app.extensions['migrate'].migrate.get_config(directory,
Expand All @@ -254,8 +256,8 @@ def upgrade(directory=None, revision='head', sql=False, tag=None, x_arg=None):
help=("migration script directory (default is "
"'migrations')"))
@MigrateCommand.option('-x', '--x-arg', dest='x_arg', default=None,
help=("Additional arguments consumed by "
"custom env.py scripts"))
action='append', help=("Additional arguments consumed "
"by custom env.py scripts"))
def downgrade(directory=None, revision='-1', sql=False, tag=None, x_arg=None):
"""Revert to a previous version"""
config = current_app.extensions['migrate'].migrate.get_config(directory,
Expand Down
12 changes: 8 additions & 4 deletions tests/test_multidb_migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,16 @@ def test_multidb_migrate_upgrade(self):
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn1.close()
self.assertEqual(tables, [('alembic_version',), ('user',)])
self.assertIn(('alembic_version',), tables)
self.assertIn(('user',), tables)

conn2 = sqlite3.connect('app2.db')
c = conn2.cursor()
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn2.close()
self.assertEqual(tables, [('alembic_version',), ('group',)])
self.assertIn(('alembic_version',), tables)
self.assertIn(('group',), tables)

# ensure the databases can be written to
from .app_multidb import db, User, Group
Expand All @@ -76,11 +78,13 @@ def test_multidb_migrate_upgrade(self):
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn1.close()
self.assertEqual(tables, [('alembic_version',)])
self.assertIn(('alembic_version',), tables)
self.assertNotIn(('user',), tables)

conn2 = sqlite3.connect('app2.db')
c = conn2.cursor()
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn2.close()
self.assertEqual(tables, [('alembic_version',)])
self.assertIn(('alembic_version',), tables)
self.assertNotIn(('group',), tables)
12 changes: 8 additions & 4 deletions tests/test_multidb_migrate_flaskcli.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,16 @@ def test_multidb_migrate_upgrade(self):
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn1.close()
self.assertEqual(tables, [('alembic_version',), ('user',)])
self.assertIn(('alembic_version',), tables)
self.assertIn(('user',), tables)

conn2 = sqlite3.connect('app2.db')
c = conn2.cursor()
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn2.close()
self.assertEqual(tables, [('alembic_version',), ('group',)])
self.assertIn(('alembic_version',), tables)
self.assertIn(('group',), tables)

# ensure the databases can be written to
from .app_multidb import db, User, Group
Expand All @@ -77,11 +79,13 @@ def test_multidb_migrate_upgrade(self):
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn1.close()
self.assertEqual(tables, [('alembic_version',)])
self.assertIn(('alembic_version',), tables)
self.assertNotIn(('user',), tables)

conn2 = sqlite3.connect('app2.db')
c = conn2.cursor()
c.execute('select name from sqlite_master')
tables = c.fetchall()
conn2.close()
self.assertEqual(tables, [('alembic_version',)])
self.assertIn(('alembic_version',), tables)
self.assertNotIn(('group',), tables)

0 comments on commit d294733

Please sign in to comment.