123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import click
- from flask.cli import with_appcontext
- from flask_migrate import init as _init
- from flask_migrate import revision as _revision
- from flask_migrate import migrate as _migrate
- from flask_migrate import edit as _edit
- from flask_migrate import merge as _merge
- from flask_migrate import upgrade as _upgrade
- from flask_migrate import downgrade as _downgrade
- from flask_migrate import show as _show
- from flask_migrate import history as _history
- from flask_migrate import heads as _heads
- from flask_migrate import branches as _branches
- from flask_migrate import current as _current
- from flask_migrate import stamp as _stamp
- @click.group()
- def db():
- """Perform database migrations."""
- pass
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('--multidb', is_flag=True,
- help=('Support multiple databases'))
- @with_appcontext
- def init(directory, multidb):
- """Creates a new migration repository."""
- _init(directory, multidb)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-m', '--message', default=None, help='Revision message')
- @click.option('--autogenerate', is_flag=True,
- help=('Populate revision script with andidate migration '
- 'operatons, based on comparison of database to model'))
- @click.option('--sql', is_flag=True,
- help=('Don\'t emit SQL to database - dump to standard output '
- 'instead'))
- @click.option('--head', default='head',
- help=('Specify head revision or <branchname>@head to base new '
- 'revision on'))
- @click.option('--splice', is_flag=True,
- help=('Allow a non-head revision as the "head" to splice onto'))
- @click.option('--branch-label', default=None,
- help=('Specify a branch label to apply to the new revision'))
- @click.option('--version-path', default=None,
- help=('Specify specific path from config for version file'))
- @click.option('--rev-id', default=None,
- help=('Specify a hardcoded revision id instead of generating '
- 'one'))
- @with_appcontext
- def revision(directory, message, autogenerate, sql, head, splice, branch_label,
- version_path, rev_id):
- """Create a new revision file."""
- _revision(directory, message, autogenerate, sql, head, splice,
- branch_label, version_path, rev_id)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-m', '--message', default=None, help='Revision message')
- @click.option('--sql', is_flag=True,
- help=('Don\'t emit SQL to database - dump to standard output '
- 'instead'))
- @click.option('--head', default='head',
- help=('Specify head revision or <branchname>@head to base new '
- 'revision on'))
- @click.option('--splice', is_flag=True,
- help=('Allow a non-head revision as the "head" to splice onto'))
- @click.option('--branch-label', default=None,
- help=('Specify a branch label to apply to the new revision'))
- @click.option('--version-path', default=None,
- help=('Specify specific path from config for version file'))
- @click.option('--rev-id', default=None,
- help=('Specify a hardcoded revision id instead of generating '
- 'one'))
- @with_appcontext
- def migrate(directory, message, sql, head, splice, branch_label, version_path,
- rev_id):
- """Autogenerate a new revision file (Alias for 'revision --autogenerate')"""
- _migrate(directory, message, sql, head, splice, branch_label, version_path,
- rev_id)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.argument('revision', default='head')
- @with_appcontext
- def edit(directory, revision):
- """Edit a revision file"""
- _edit(directory, revision)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-m', '--message', default=None, help='Merge revision message')
- @click.option('--branch-label', default=None,
- help=('Specify a branch label to apply to the new revision'))
- @click.option('--rev-id', default=None,
- help=('Specify a hardcoded revision id instead of generating '
- 'one'))
- @click.argument('revisions', nargs=-1)
- @with_appcontext
- def merge(directory, message, branch_label, rev_id, revisions):
- """Merge two revisions together, creating a new revision file"""
- _merge(directory, revisions, message, branch_label, rev_id)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('--sql', is_flag=True,
- help=('Don\'t emit SQL to database - dump to standard output '
- 'instead'))
- @click.option('--tag', default=None,
- help=('Arbitrary "tag" name - can be used by custom "env.py '
- 'scripts'))
- @click.option('-x', '--x-arg', multiple=True,
- help='Additional arguments consumed by custom env.py scripts')
- @click.argument('revision', default='head')
- @with_appcontext
- def upgrade(directory, sql, tag, x_arg, revision):
- """Upgrade to a later version"""
- _upgrade(directory, revision, sql, tag, x_arg)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('--sql', is_flag=True,
- help=('Don\'t emit SQL to database - dump to standard output '
- 'instead'))
- @click.option('--tag', default=None,
- help=('Arbitrary "tag" name - can be used by custom "env.py '
- 'scripts'))
- @click.option('-x', '--x-arg', multiple=True,
- help='Additional arguments consumed by custom env.py scripts')
- @click.argument('revision', default='-1')
- @with_appcontext
- def downgrade(directory, sql, tag, x_arg, revision):
- """Revert to a previous version"""
- _downgrade(directory, revision, sql, tag, x_arg)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.argument('revision', default='head')
- @with_appcontext
- def show(directory, revision):
- """Show the revision denoted by the given symbol."""
- _show(directory, revision)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-r', '--rev-range', default=None,
- help='Specify a revision range; format is [start]:[end]')
- @click.option('-v', '--verbose', is_flag=True, help='Use more verbose output')
- @with_appcontext
- def history(directory, rev_range, verbose):
- """List changeset scripts in chronological order."""
- _history(directory, rev_range, verbose)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-v', '--verbose', is_flag=True, help='Use more verbose output')
- @click.option('--resolve-dependencies', is_flag=True,
- help='Treat dependency versions as down revisions')
- @with_appcontext
- def heads(directory, verbose, resolve_dependencies):
- """Show current available heads in the script directory"""
- _heads(directory, verbose, resolve_dependencies)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-v', '--verbose', is_flag=True, help='Use more verbose output')
- @with_appcontext
- def branches(directory, verbose):
- """Show current branch points"""
- _branches(directory, verbose)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('-v', '--verbose', is_flag=True, help='Use more verbose output')
- @click.option('--head-only', is_flag=True,
- help='Deprecated. Use --verbose for additional output')
- @with_appcontext
- def current(directory, verbose, head_only):
- """Display the current revision for each database."""
- _current(directory, verbose, head_only)
- @db.command()
- @click.option('-d', '--directory', default=None,
- help=('migration script directory (default is "migrations")'))
- @click.option('--sql', is_flag=True,
- help=('Don\'t emit SQL to database - dump to standard output '
- 'instead'))
- @click.option('--tag', default=None,
- help=('Arbitrary "tag" name - can be used by custom "env.py '
- 'scripts'))
- @click.argument('revision', default='head')
- @with_appcontext
- def stamp(directory, sql, tag, revision):
- """'stamp' the revision table with the given revision; don't run any
- migrations"""
- _stamp(directory, revision, sql, tag)
|