Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-Flask-Migrate for openSUSE:Factory checked in at 2021-07-23 23:41:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-Flask-Migrate (Old) and /work/SRC/openSUSE:Factory/.python-Flask-Migrate.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Flask-Migrate" Fri Jul 23 23:41:13 2021 rev:7 rq:907916 version:3.0.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-Flask-Migrate/python-Flask-Migrate.changes 2020-03-23 12:53:15.464058040 +0100 +++ /work/SRC/openSUSE:Factory/.python-Flask-Migrate.new.1899/python-Flask-Migrate.changes 2021-07-23 23:41:34.957802905 +0200 @@ -1,0 +2,25 @@ +Wed Jul 21 07:13:43 UTC 2021 - Antonio Larrosa <alarr...@suse.com> + +- Update to 3.0.1: + * Add support for Alchemical in addition to Flask-SQLAlchemy + * Remove Flask-Script references from the documentation + +- Changes from 3.0.0: + * Remove support for Flask-Script + * Use unittest testrunner + * Remove dependency on six package + * Added sphinx build files to .gitignore file + * Fix Sphinx warning + +- Changes from 2.7.0: + * Reuse engine from Flask-SQLAlchemy + * Update logging configuration to include Flask-Migrate's logger + +- Changes from 2.6.0: + * Removed deprecated --head-only option + * Initialize logger with a name + * Move import to the top in env.py file to avoid linter warnings + * Add a note to the documentation regarding logging + * Move builds to GitHub actions + +------------------------------------------------------------------- Old: ---- Flask-Migrate-2.5.3.tar.gz New: ---- Flask-Migrate-3.0.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-Flask-Migrate.spec ++++++ --- /var/tmp/diff_new_pack.Botri6/_old 2021-07-23 23:41:35.481802235 +0200 +++ /var/tmp/diff_new_pack.Botri6/_new 2021-07-23 23:41:35.485802230 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-Flask-Migrate # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %bcond_without python2 Name: python-Flask-Migrate -Version: 2.5.3 +Version: 3.0.1 Release: 0 Summary: SQLAlchemy database migrations for Flask applications using Alembic License: MIT @@ -27,7 +27,6 @@ Source: https://files.pythonhosted.org/packages/source/F/Flask-Migrate/Flask-Migrate-%{version}.tar.gz BuildRequires: %{python_module Flask >= 0.9} BuildRequires: %{python_module Flask-SQLAlchemy >= 1.0} -BuildRequires: %{python_module Flask-Script >= 0.6} BuildRequires: %{python_module alembic >= 0.7} BuildRequires: %{python_module setuptools} %if %{with python2} @@ -37,7 +36,6 @@ BuildRequires: python-rpm-macros Requires: python-Flask >= 0.9 Requires: python-Flask-SQLAlchemy >= 1.0 -Requires: python-Flask-Script >= 0.6 Requires: python-alembic >= 0.7 BuildArch: noarch %python_subpackages ++++++ Flask-Migrate-2.5.3.tar.gz -> Flask-Migrate-3.0.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/Flask_Migrate.egg-info/PKG-INFO new/Flask-Migrate-3.0.1/Flask_Migrate.egg-info/PKG-INFO --- old/Flask-Migrate-2.5.3/Flask_Migrate.egg-info/PKG-INFO 2020-03-14 11:04:08.000000000 +0100 +++ new/Flask-Migrate-3.0.1/Flask_Migrate.egg-info/PKG-INFO 2021-05-31 01:09:32.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Flask-Migrate -Version: 2.5.3 +Version: 3.0.1 Summary: SQLAlchemy database migrations for Flask applications using Alembic Home-page: http://github.com/miguelgrinberg/flask-migrate/ Author: Miguel Grinberg diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/Flask_Migrate.egg-info/SOURCES.txt new/Flask-Migrate-3.0.1/Flask_Migrate.egg-info/SOURCES.txt --- old/Flask-Migrate-2.5.3/Flask_Migrate.egg-info/SOURCES.txt 2020-03-14 11:04:08.000000000 +0100 +++ new/Flask-Migrate-3.0.1/Flask_Migrate.egg-info/SOURCES.txt 2021-05-31 01:09:32.000000000 +0200 @@ -22,12 +22,12 @@ flask_migrate/templates/flask-multidb/script.py.mako tests/__init__.py tests/app.py +tests/app1.db +tests/app2.db tests/app_compare_type1.py tests/app_compare_type2.py tests/app_custom_directory.py tests/app_custom_directory_path.py tests/app_multidb.py tests/test_migrate.py -tests/test_migrate_flaskcli.py -tests/test_multidb_migrate.py -tests/test_multidb_migrate_flaskcli.py \ No newline at end of file +tests/test_multidb_migrate.py \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/PKG-INFO new/Flask-Migrate-3.0.1/PKG-INFO --- old/Flask-Migrate-2.5.3/PKG-INFO 2020-03-14 11:04:08.327396900 +0100 +++ new/Flask-Migrate-3.0.1/PKG-INFO 2021-05-31 01:09:32.797726000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Flask-Migrate -Version: 2.5.3 +Version: 3.0.1 Summary: SQLAlchemy database migrations for Flask applications using Alembic Home-page: http://github.com/miguelgrinberg/flask-migrate/ Author: Miguel Grinberg diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/README.md new/Flask-Migrate-3.0.1/README.md --- old/Flask-Migrate-2.5.3/README.md 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/README.md 2020-11-21 20:28:26.000000000 +0100 @@ -1,7 +1,7 @@ Flask-Migrate ============= -[](https://travis-ci.org/miguelgrinberg/Flask-Migrate) +[](https://github.com/miguelgrinberg/flask-migrate/actions) Flask-Migrate is an extension that handles SQLAlchemy database migrations for Flask applications using Alembic. The database operations are provided as command-line arguments under the `flask db` command. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/__version__ new/Flask-Migrate-3.0.1/__version__ --- old/Flask-Migrate-2.5.3/__version__ 2020-03-14 11:03:59.000000000 +0100 +++ new/Flask-Migrate-3.0.1/__version__ 2021-05-31 01:09:29.000000000 +0200 @@ -1 +1 @@ -2.5.3 +3.0.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/__init__.py new/Flask-Migrate-3.0.1/flask_migrate/__init__.py --- old/Flask-Migrate-2.5.3/flask_migrate/__init__.py 2020-03-14 10:57:33.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/__init__.py 2021-05-15 16:27:37.000000000 +0200 @@ -4,17 +4,13 @@ import os import sys from flask import current_app -try: - from flask_script import Manager -except ImportError: - Manager = None from alembic import __version__ as __alembic_version__ from alembic.config import Config as AlembicConfig from alembic import command from alembic.util import CommandError alembic_version = tuple([int(v) for v in __alembic_version__.split('.')[0:3]]) -log = logging.getLogger() +log = logging.getLogger(__name__) class _MigrateConfig(object): @@ -54,8 +50,8 @@ self.alembic_ctx_kwargs.update(kwargs) if not hasattr(app, 'extensions'): app.extensions = {} - app.extensions['migrate'] = _MigrateConfig(self, self.db, - **self.alembic_ctx_kwargs) + app.extensions['migrate'] = _MigrateConfig( + self, self.db, **self.alembic_ctx_kwargs) def configure(self, f): self.configure_callbacks.append(f) @@ -100,25 +96,6 @@ return wrapped -if Manager is not None: - MigrateCommand = Manager(usage='Perform database migrations') -else: - class FakeCommand(object): - def option(self, *args, **kwargs): - def decorator(f): - return f - return decorator - - MigrateCommand = FakeCommand() - - -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) -@MigrateCommand.option('--multidb', dest='multidb', action='store_true', - default=False, - help=("Multiple databases migraton (default is " - "False)")) @catch_errors def init(directory=None, multidb=False): """Creates a new migration repository""" @@ -135,35 +112,6 @@ command.init(config, directory, 'flask') -@MigrateCommand.option('--rev-id', dest='rev_id', default=None, - help=('Specify a hardcoded revision id instead of ' - 'generating one')) -@MigrateCommand.option('--version-path', dest='version_path', default=None, - help=('Specify specific path from config for version ' - 'file')) -@MigrateCommand.option('--branch-label', dest='branch_label', default=None, - help=('Specify a branch label to apply to the new ' - 'revision')) -@MigrateCommand.option('--splice', dest='splice', action='store_true', - default=False, - help=('Allow a non-head revision as the "head" to ' - 'splice onto')) -@MigrateCommand.option('--head', dest='head', default='head', - help=('Specify head revision or <branchname>@head to ' - 'base new revision on')) -@MigrateCommand.option('--sql', dest='sql', action='store_true', default=False, - help=("Don't emit SQL to database - dump to standard " - "output instead")) -@MigrateCommand.option('--autogenerate', dest='autogenerate', - action='store_true', default=False, - help=('Populate revision script with candidate ' - 'migration operations, based on comparison of ' - 'database to model')) -@MigrateCommand.option('-m', '--message', dest='message', default=None, - help='Revision message') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def revision(directory=None, message=None, autogenerate=False, sql=False, head='head', splice=False, branch_label=None, version_path=None, @@ -175,32 +123,6 @@ version_path=version_path, rev_id=rev_id) -@MigrateCommand.option('--rev-id', dest='rev_id', default=None, - help=('Specify a hardcoded revision id instead of ' - 'generating one')) -@MigrateCommand.option('--version-path', dest='version_path', default=None, - help=('Specify specific path from config for version ' - 'file')) -@MigrateCommand.option('--branch-label', dest='branch_label', default=None, - help=('Specify a branch label to apply to the new ' - 'revision')) -@MigrateCommand.option('--splice', dest='splice', action='store_true', - default=False, - help=('Allow a non-head revision as the "head" to ' - 'splice onto')) -@MigrateCommand.option('--head', dest='head', default='head', - help=('Specify head revision or <branchname>@head to ' - 'base new revision on')) -@MigrateCommand.option('--sql', dest='sql', action='store_true', default=False, - help=("Don't emit SQL to database - dump to standard " - "output instead")) -@MigrateCommand.option('-m', '--message', dest='message', default=None) -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) -@MigrateCommand.option('-x', '--x-arg', dest='x_arg', default=None, - action='append', help=("Additional arguments consumed " - "by custom env.py scripts")) @catch_errors def migrate(directory=None, message=None, sql=False, head='head', splice=False, branch_label=None, version_path=None, rev_id=None, x_arg=None): @@ -212,11 +134,6 @@ version_path=version_path, rev_id=rev_id) -@MigrateCommand.option('revision', nargs='?', default='head', - help="revision identifier") -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def edit(directory=None, revision='current'): """Edit current revision.""" @@ -228,18 +145,6 @@ raise RuntimeError('Alembic 0.8.0 or greater is required') -@MigrateCommand.option('--rev-id', dest='rev_id', default=None, - help=('Specify a hardcoded revision id instead of ' - 'generating one')) -@MigrateCommand.option('--branch-label', dest='branch_label', default=None, - help=('Specify a branch label to apply to the new ' - 'revision')) -@MigrateCommand.option('-m', '--message', dest='message', default=None) -@MigrateCommand.option('revisions', nargs='+', - help='one or more revisions, or "heads" for all heads') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def merge(directory=None, revisions='', message=None, branch_label=None, rev_id=None): @@ -249,20 +154,6 @@ branch_label=branch_label, rev_id=rev_id) -@MigrateCommand.option('--tag', dest='tag', default=None, - help=("Arbitrary 'tag' name - can be used by custom " - "env.py scripts")) -@MigrateCommand.option('--sql', dest='sql', action='store_true', default=False, - help=("Don't emit SQL to database - dump to standard " - "output instead")) -@MigrateCommand.option('revision', nargs='?', default='head', - help="revision identifier") -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) -@MigrateCommand.option('-x', '--x-arg', dest='x_arg', default=None, - action='append', help=("Additional arguments consumed " - "by custom env.py scripts")) @catch_errors def upgrade(directory=None, revision='head', sql=False, tag=None, x_arg=None): """Upgrade to a later version""" @@ -271,20 +162,6 @@ command.upgrade(config, revision, sql=sql, tag=tag) -@MigrateCommand.option('--tag', dest='tag', default=None, - help=("Arbitrary 'tag' name - can be used by custom " - "env.py scripts")) -@MigrateCommand.option('--sql', dest='sql', action='store_true', default=False, - help=("Don't emit SQL to database - dump to standard " - "output instead")) -@MigrateCommand.option('revision', nargs='?', default="-1", - help="revision identifier") -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) -@MigrateCommand.option('-x', '--x-arg', dest='x_arg', default=None, - action='append', help=("Additional arguments consumed " - "by custom env.py scripts")) @catch_errors def downgrade(directory=None, revision='-1', sql=False, tag=None, x_arg=None): """Revert to a previous version""" @@ -295,11 +172,6 @@ command.downgrade(config, revision, sql=sql, tag=tag) -@MigrateCommand.option('revision', nargs='?', default="head", - help="revision identifier") -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def show(directory=None, revision='head'): """Show the revision denoted by the given symbol.""" @@ -307,33 +179,18 @@ command.show(config, revision) -@MigrateCommand.option('-i', '--indicate-current', dest='indicate_current', action='store_true', - default=False, help='Indicate current version (Alembic 0.9.9 or greater is required)') -@MigrateCommand.option('-v', '--verbose', dest='verbose', action='store_true', - default=False, help='Use more verbose output') -@MigrateCommand.option('-r', '--rev-range', dest='rev_range', default=None, - help='Specify a revision range; format is [start]:[end]') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors -def history(directory=None, rev_range=None, verbose=False, indicate_current=False): +def history(directory=None, rev_range=None, verbose=False, + indicate_current=False): """List changeset scripts in chronological order.""" config = current_app.extensions['migrate'].migrate.get_config(directory) if alembic_version >= (0, 9, 9): - command.history(config, rev_range, verbose=verbose, indicate_current=indicate_current) + command.history(config, rev_range, verbose=verbose, + indicate_current=indicate_current) else: command.history(config, rev_range, verbose=verbose) -@MigrateCommand.option('--resolve-dependencies', dest='resolve_dependencies', - action='store_true', default=False, - help='Treat dependency versions as down revisions') -@MigrateCommand.option('-v', '--verbose', dest='verbose', action='store_true', - default=False, help='Use more verbose output') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def heads(directory=None, verbose=False, resolve_dependencies=False): """Show current available heads in the script directory""" @@ -342,11 +199,6 @@ resolve_dependencies=resolve_dependencies) -@MigrateCommand.option('-v', '--verbose', dest='verbose', action='store_true', - default=False, help='Use more verbose output') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def branches(directory=None, verbose=False): """Show current branch points""" @@ -354,31 +206,13 @@ command.branches(config, verbose=verbose) -@MigrateCommand.option('--head-only', dest='head_only', action='store_true', - default=False, - help='Deprecated. Use --verbose for additional output') -@MigrateCommand.option('-v', '--verbose', dest='verbose', action='store_true', - default=False, help='Use more verbose output') -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors -def current(directory=None, verbose=False, head_only=False): +def current(directory=None, verbose=False): """Display the current revision for each database.""" config = current_app.extensions['migrate'].migrate.get_config(directory) - command.current(config, verbose=verbose, head_only=head_only) + command.current(config, verbose=verbose) -@MigrateCommand.option('--tag', dest='tag', default=None, - help=("Arbitrary 'tag' name - can be used by custom " - "env.py scripts")) -@MigrateCommand.option('--sql', dest='sql', action='store_true', default=False, - help=("Don't emit SQL to database - dump to standard " - "output instead")) -@MigrateCommand.option('revision', default=None, help="revision identifier") -@MigrateCommand.option('-d', '--directory', dest='directory', default=None, - help=("Migration script directory (default is " - "'migrations')")) @catch_errors def stamp(directory=None, revision='head', sql=False, tag=None): """'stamp' the revision table with the given revision; don't run any diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/cli.py new/Flask-Migrate-3.0.1/flask_migrate/cli.py --- old/Flask-Migrate-2.5.3/flask_migrate/cli.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/cli.py 2021-01-19 12:25:54.000000000 +0100 @@ -14,6 +14,7 @@ from flask_migrate import current as _current from flask_migrate import stamp as _stamp + @click.group() def db(): """Perform database migrations.""" @@ -85,7 +86,8 @@ @with_appcontext def migrate(directory, message, sql, head, splice, branch_label, version_path, rev_id, x_arg): - """Autogenerate a new revision file (Alias for 'revision --autogenerate')""" + """Autogenerate a new revision file (Alias for + 'revision --autogenerate')""" _migrate(directory, message, sql, head, splice, branch_label, version_path, rev_id, x_arg) @@ -168,7 +170,9 @@ @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') -@click.option('-i', '--indicate-current', is_flag=True, help='Indicate current version (Alembic 0.9.9 or greater is required)') +@click.option('-i', '--indicate-current', is_flag=True, + help=('Indicate current version (Alembic 0.9.9 or greater is ' + 'required)')) @with_appcontext def history(directory, rev_range, verbose, indicate_current): """List changeset scripts in chronological order.""" @@ -201,12 +205,10 @@ @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): +def current(directory, verbose): """Display the current revision for each database.""" - _current(directory, verbose, head_only) + _current(directory, verbose) @db.command() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/templates/flask/alembic.ini.mako new/Flask-Migrate-3.0.1/flask_migrate/templates/flask/alembic.ini.mako --- old/Flask-Migrate-2.5.3/flask_migrate/templates/flask/alembic.ini.mako 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/templates/flask/alembic.ini.mako 2021-02-12 11:35:50.000000000 +0100 @@ -11,7 +11,7 @@ # Logging configuration [loggers] -keys = root,sqlalchemy,alembic +keys = root,sqlalchemy,alembic,flask_migrate [handlers] keys = console @@ -34,6 +34,11 @@ handlers = qualname = alembic +[logger_flask_migrate] +level = INFO +handlers = +qualname = flask_migrate + [handler_console] class = StreamHandler args = (sys.stderr,) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/templates/flask/env.py new/Flask-Migrate-3.0.1/flask_migrate/templates/flask/env.py --- old/Flask-Migrate-2.5.3/flask_migrate/templates/flask/env.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/templates/flask/env.py 2021-05-31 01:07:20.000000000 +0200 @@ -3,8 +3,7 @@ import logging from logging.config import fileConfig -from sqlalchemy import engine_from_config -from sqlalchemy import pool +from flask import current_app from alembic import context @@ -21,10 +20,10 @@ # for 'autogenerate' support # from myapp import mymodel # target_metadata = mymodel.Base.metadata -from flask import current_app config.set_main_option( 'sqlalchemy.url', - str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%')) + str(current_app.extensions['migrate'].db.get_engine().url).replace( + '%', '%%')) target_metadata = current_app.extensions['migrate'].db.metadata # other values from the config, defined by the needs of env.py, @@ -72,11 +71,7 @@ directives[:] = [] logger.info('No changes in schema detected.') - connectable = engine_from_config( - config.get_section(config.config_ini_section), - prefix='sqlalchemy.', - poolclass=pool.NullPool, - ) + connectable = current_app.extensions['migrate'].db.get_engine() with connectable.connect() as connection: context.configure( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/alembic.ini.mako new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/alembic.ini.mako --- old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/alembic.ini.mako 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/alembic.ini.mako 2021-02-12 11:35:58.000000000 +0100 @@ -11,7 +11,7 @@ # Logging configuration [loggers] -keys = root,sqlalchemy,alembic +keys = root,sqlalchemy,alembic,flask_migrate [handlers] keys = console @@ -34,6 +34,11 @@ handlers = qualname = alembic +[logger_flask_migrate] +level = INFO +handlers = +qualname = flask_migrate + [handler_console] class = StreamHandler args = (sys.stderr,) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/env.py new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/env.py --- old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/env.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/env.py 2021-05-31 01:07:04.000000000 +0200 @@ -2,11 +2,8 @@ import logging from logging.config import fileConfig -import re -from sqlalchemy import engine_from_config from sqlalchemy import MetaData -from sqlalchemy import pool from flask import current_app from alembic import context @@ -28,14 +25,20 @@ # target_metadata = mymodel.Base.metadata config.set_main_option( 'sqlalchemy.url', - str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%')) -bind_names = [] -for bind in current_app.config.get("SQLALCHEMY_BINDS"): + str(current_app.extensions['migrate'].db.get_engine().url).replace( + '%', '%%')) +if current_app.config.get('SQLALCHEMY_BINDS') is not None: + bind_names = list(current_app.config['SQLALCHEMY_BINDS'].keys()) +else: + get_bind_names = getattr(current_app.extensions['migrate'].db, + 'bind_names', None) + if get_bind_names: + bind_names = get_bind_names() +for bind in bind_names: context.config.set_section_option( bind, "sqlalchemy.url", str(current_app.extensions['migrate'].db.get_engine( - current_app, bind).url).replace('%', '%%')) - bind_names.append(bind) + bind=bind).url).replace('%', '%%')) target_metadata = current_app.extensions['migrate'].db.metadata @@ -121,20 +124,12 @@ # for the direct-to-DB use case, start a transaction on all # engines, then run all migrations, then commit all transactions. engines = { - '': { - 'engine': engine_from_config( - config.get_section(config.config_ini_section), - prefix='sqlalchemy.', - poolclass=pool.NullPool, - ) - } + '': {'engine': current_app.extensions['migrate'].db.get_engine()} } for name in bind_names: engines[name] = rec = {} - rec['engine'] = engine_from_config( - context.config.get_section(name), - prefix='sqlalchemy.', - poolclass=pool.NullPool) + rec['engine'] = current_app.extensions['migrate'].db.get_engine( + bind=name) for name, rec in engines.items(): engine = rec['engine'] @@ -164,7 +159,7 @@ for rec in engines.values(): rec['transaction'].commit() - except: + except: # noqa: E722 for rec in engines.values(): rec['transaction'].rollback() raise diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/script.py.mako new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/script.py.mako --- old/Flask-Migrate-2.5.3/flask_migrate/templates/flask-multidb/script.py.mako 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/flask_migrate/templates/flask-multidb/script.py.mako 2021-05-31 01:05:12.000000000 +0200 @@ -28,7 +28,13 @@ <% from flask import current_app - db_names = [''] + list(current_app.config.get("SQLALCHEMY_BINDS").keys()) + if current_app.config.get('SQLALCHEMY_BINDS') is not None: + bind_names = list(current_app.config['SQLALCHEMY_BINDS'].keys()) + else: + get_bind_names = getattr(current_app.extensions['migrate'].db, 'bind_names', None) + if get_bind_names: + bind_names = get_bind_names() + db_names = [''] + bind_names %> ## generate an "upgrade_<xyz>() / downgrade_<xyz>()" function diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/setup.py new/Flask-Migrate-3.0.1/setup.py --- old/Flask-Migrate-2.5.3/setup.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/setup.py 2021-05-15 16:17:04.000000000 +0200 @@ -28,15 +28,11 @@ 'Flask-SQLAlchemy>=1.0', 'alembic>=0.7' ], - tests_require=[ - 'Flask-Script>=0.6' - ], entry_points={ 'flask.commands': [ 'db=flask_migrate.cli:db' ], }, - test_suite="tests", classifiers=[ 'Environment :: Web Environment', 'Intended Audience :: Developers', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/__init__.py new/Flask-Migrate-3.0.1/tests/__init__.py --- old/Flask-Migrate-2.5.3/tests/__init__.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/__init__.py 2020-11-21 20:28:26.000000000 +0100 @@ -1 +0,0 @@ - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app.py new/Flask-Migrate-3.0.1/tests/app.py --- old/Flask-Migrate-2.5.3/tests/app.py 2019-12-12 00:11:30.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app.py 2021-05-15 16:37:25.000000000 +0200 @@ -1,8 +1,7 @@ #!/bin/env python from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' @@ -11,20 +10,18 @@ db = SQLAlchemy(app) migrate = Migrate(app, db) -manager = Manager(app) -manager.add_command('db', MigrateCommand) - class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) -@manager.command +@app.cli.command() def add(): + """Add test user.""" db.session.add(User(name='test')) db.session.commit() if __name__ == '__main__': - manager.run() + app.run() Binary files old/Flask-Migrate-2.5.3/tests/app1.db and new/Flask-Migrate-3.0.1/tests/app1.db differ Binary files old/Flask-Migrate-2.5.3/tests/app2.db and new/Flask-Migrate-3.0.1/tests/app2.db differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app_compare_type1.py new/Flask-Migrate-3.0.1/tests/app_compare_type1.py --- old/Flask-Migrate-2.5.3/tests/app_compare_type1.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app_compare_type1.py 2021-05-15 16:33:41.000000000 +0200 @@ -1,7 +1,6 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' @@ -10,13 +9,11 @@ db = SQLAlchemy(app) migrate = Migrate(app, db, compare_type=True) -manager = Manager(app) -manager.add_command('db', MigrateCommand) - class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) + if __name__ == '__main__': - manager.run() + app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app_compare_type2.py new/Flask-Migrate-3.0.1/tests/app_compare_type2.py --- old/Flask-Migrate-2.5.3/tests/app_compare_type2.py 2019-12-08 18:39:20.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app_compare_type2.py 2021-05-15 16:33:58.000000000 +0200 @@ -1,7 +1,6 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' @@ -10,13 +9,11 @@ db = SQLAlchemy(app) migrate = Migrate(app, db, compare_type=True) -manager = Manager(app) -manager.add_command('db', MigrateCommand) - class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(10)) + if __name__ == '__main__': - manager.run() + app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app_custom_directory.py new/Flask-Migrate-3.0.1/tests/app_custom_directory.py --- old/Flask-Migrate-2.5.3/tests/app_custom_directory.py 2019-12-12 00:11:34.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app_custom_directory.py 2021-05-15 16:37:20.000000000 +0200 @@ -1,7 +1,6 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' @@ -10,20 +9,18 @@ db = SQLAlchemy(app) migrate = Migrate(app, db, directory='temp_folder/temp_migrations') -manager = Manager(app) -manager.add_command('db', MigrateCommand) - class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) -@manager.command +@app.cli.command() def add(): + """Add test user.""" db.session.add(User(name='test')) db.session.commit() if __name__ == '__main__': - manager.run() + app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app_custom_directory_path.py new/Flask-Migrate-3.0.1/tests/app_custom_directory_path.py --- old/Flask-Migrate-2.5.3/tests/app_custom_directory_path.py 2020-03-14 10:57:33.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app_custom_directory_path.py 2021-05-15 16:41:10.000000000 +0200 @@ -1,7 +1,6 @@ from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate from pathlib import Path app = Flask(__name__) @@ -11,20 +10,18 @@ db = SQLAlchemy(app) migrate = Migrate(app, db, directory=Path('temp_folder/temp_migrations')) -manager = Manager(app) -manager.add_command('db', MigrateCommand) - class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128)) -@manager.command +@app.cli.command() def add(): + """Add test user.""" db.session.add(User(name='test')) db.session.commit() if __name__ == '__main__': - manager.run() + app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/app_multidb.py new/Flask-Migrate-3.0.1/tests/app_multidb.py --- old/Flask-Migrate-2.5.3/tests/app_multidb.py 2019-12-12 00:09:00.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/app_multidb.py 2021-05-30 16:48:14.000000000 +0200 @@ -1,8 +1,7 @@ #!/bin/env python from flask import Flask from flask_sqlalchemy import SQLAlchemy -from flask_script import Manager -from flask_migrate import Migrate, MigrateCommand +from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app1.db' @@ -27,16 +26,14 @@ migrate = Migrate(app, db) -manager = Manager(app) -manager.add_command('db', MigrateCommand) - -@manager.command +@app.cli.command() def add(): + """Add test users.""" db.session.add(User(name='test')) db.session.add(Group(name='group')) db.session.commit() if __name__ == '__main__': - manager.run() + app.run() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/test_migrate.py new/Flask-Migrate-3.0.1/tests/test_migrate.py --- old/Flask-Migrate-2.5.3/tests/test_migrate.py 2020-03-14 10:57:33.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/test_migrate.py 2021-05-15 16:32:35.000000000 +0200 @@ -1,13 +1,13 @@ import os -import shlex import shutil -import subprocess -import sys import unittest +import subprocess +import shlex -def run_cmd(cmd): +def run_cmd(app, cmd): """Run a command and return a tuple with (stdout, stderr, exit_code)""" + os.environ['FLASK_APP'] = app process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = process.communicate() @@ -54,43 +54,49 @@ self.assertTrue(isinstance(v, int)) def test_migrate_upgrade(self): - (o, e, s) = run_cmd(sys.executable + ' app.py db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app.py db migrate') + (o, e, s) = run_cmd('app.py', 'flask db init') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app.py db upgrade') + (o, e, s) = run_cmd('app.py', 'flask db migrate') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app.py add') + (o, e, s) = run_cmd('app.py', 'flask db upgrade') self.assertTrue(s == 0) + from .app import db, User + db.session.add(User(name='test')) + db.session.commit() + def test_custom_directory(self): - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory.py db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory.py db migrate') + (o, e, s) = run_cmd('app_custom_directory.py', 'flask db init') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory.py db upgrade') + (o, e, s) = run_cmd('app_custom_directory.py', 'flask db migrate') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory.py add') + (o, e, s) = run_cmd('app_custom_directory.py', 'flask db upgrade') self.assertTrue(s == 0) + from .app_custom_directory import db, User + db.session.add(User(name='test')) + db.session.commit() + def test_custom_directory_path(self): - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory_path.py db init') + (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db init') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory_path.py db migrate') + (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db migrate') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory_path.py db upgrade') - self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_custom_directory_path.py add') + (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db upgrade') self.assertTrue(s == 0) + from .app_custom_directory_path import db, User + db.session.add(User(name='test')) + db.session.commit() + def test_compare_type(self): - (o, e, s) = run_cmd(sys.executable + ' app_compare_type1.py db init') + (o, e, s) = run_cmd('app_compare_type1.py', 'flask db init') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_compare_type1.py db migrate') + (o, e, s) = run_cmd('app_compare_type1.py', 'flask db migrate') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_compare_type1.py db upgrade') + (o, e, s) = run_cmd('app_compare_type1.py', 'flask db upgrade') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_compare_type2.py db migrate') + (o, e, s) = run_cmd('app_compare_type2.py', 'flask db migrate') self.assertTrue(s == 0) self.assertTrue(b'Detected type change from VARCHAR(length=128) ' b'to String(length=10)' in e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/test_migrate_flaskcli.py new/Flask-Migrate-3.0.1/tests/test_migrate_flaskcli.py --- old/Flask-Migrate-2.5.3/tests/test_migrate_flaskcli.py 2020-03-14 10:57:33.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/test_migrate_flaskcli.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,102 +0,0 @@ -import os -import shutil -import unittest -import subprocess -import shlex - - -def run_cmd(app, cmd): - """Run a command and return a tuple with (stdout, stderr, exit_code)""" - os.environ['FLASK_APP'] = app - process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - (stdout, stderr) = process.communicate() - print('\n$ ' + cmd) - print(stdout.decode('utf-8')) - print(stderr.decode('utf-8')) - return stdout, stderr, process.wait() - - -class TestMigrate(unittest.TestCase): - def setUp(self): - os.chdir(os.path.split(os.path.abspath(__file__))[0]) - try: - os.remove('app.db') - except OSError: - pass - try: - shutil.rmtree('migrations') - except OSError: - pass - try: - shutil.rmtree('temp_folder') - except OSError: - pass - - def tearDown(self): - try: - os.remove('app.db') - except OSError: - pass - try: - shutil.rmtree('migrations') - except OSError: - pass - try: - shutil.rmtree('temp_folder') - except OSError: - pass - - def test_alembic_version(self): - from flask_migrate import alembic_version - self.assertEqual(len(alembic_version), 3) - for v in alembic_version: - self.assertTrue(isinstance(v, int)) - - def test_migrate_upgrade(self): - (o, e, s) = run_cmd('app.py', 'flask db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app.py', 'flask db migrate') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app.py', 'flask db upgrade') - self.assertTrue(s == 0) - - from .app import db, User - db.session.add(User(name='test')) - db.session.commit() - - def test_custom_directory(self): - (o, e, s) = run_cmd('app_custom_directory.py', 'flask db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_custom_directory.py', 'flask db migrate') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_custom_directory.py', 'flask db upgrade') - self.assertTrue(s == 0) - - from .app_custom_directory import db, User - db.session.add(User(name='test')) - db.session.commit() - - def test_custom_directory_path(self): - (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db migrate') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_custom_directory_path.py', 'flask db upgrade') - self.assertTrue(s == 0) - - from .app_custom_directory_path import db, User - db.session.add(User(name='test')) - db.session.commit() - - def test_compare_type(self): - (o, e, s) = run_cmd('app_compare_type1.py', 'flask db init') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_compare_type1.py', 'flask db migrate') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_compare_type1.py', 'flask db upgrade') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_compare_type2.py', 'flask db migrate') - self.assertTrue(s == 0) - self.assertTrue(b'Detected type change from VARCHAR(length=128) ' - b'to String(length=10)' in e) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/test_multidb_migrate.py new/Flask-Migrate-3.0.1/tests/test_multidb_migrate.py --- old/Flask-Migrate-2.5.3/tests/test_multidb_migrate.py 2019-12-12 00:09:27.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/test_multidb_migrate.py 2019-12-08 18:39:21.000000000 +0100 @@ -1,14 +1,14 @@ import os -import shlex import shutil -import sqlite3 -import subprocess -import sys import unittest +import subprocess +import shlex +import sqlite3 -def run_cmd(cmd): +def run_cmd(app, cmd): """Run a command and return a tuple with (stdout, stderr, exit_code)""" + os.environ['FLASK_APP'] = app process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = process.communicate() @@ -40,11 +40,11 @@ pass def test_multidb_migrate_upgrade(self): - (o, e, s) = run_cmd(sys.executable + ' app_multidb.py db init --multidb') + (o, e, s) = run_cmd('app_multidb.py', 'flask db init --multidb') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_multidb.py db migrate') + (o, e, s) = run_cmd('app_multidb.py', 'flask db migrate') self.assertTrue(s == 0) - (o, e, s) = run_cmd(sys.executable + ' app_multidb.py db upgrade') + (o, e, s) = run_cmd('app_multidb.py', 'flask db upgrade') self.assertTrue(s == 0) # ensure the tables are in the correct databases @@ -65,11 +65,13 @@ self.assertIn(('group',), tables) # ensure the databases can be written to - (o, e, s) = run_cmd(sys.executable + ' app_multidb.py add') - self.assertTrue(s == 0) + from .app_multidb import db, User, Group + db.session.add(User(name='test')) + db.session.add(Group(name='group')) + db.session.commit() # ensure the downgrade works - (o, e, s) = run_cmd(sys.executable + ' app_multidb.py db downgrade') + (o, e, s) = run_cmd('app_multidb.py', 'flask db downgrade') self.assertTrue(s == 0) conn1 = sqlite3.connect('app1.db') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Flask-Migrate-2.5.3/tests/test_multidb_migrate_flaskcli.py new/Flask-Migrate-3.0.1/tests/test_multidb_migrate_flaskcli.py --- old/Flask-Migrate-2.5.3/tests/test_multidb_migrate_flaskcli.py 2019-12-08 18:39:21.000000000 +0100 +++ new/Flask-Migrate-3.0.1/tests/test_multidb_migrate_flaskcli.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,91 +0,0 @@ -import os -import shutil -import unittest -import subprocess -import shlex -import sqlite3 - - -def run_cmd(app, cmd): - """Run a command and return a tuple with (stdout, stderr, exit_code)""" - os.environ['FLASK_APP'] = app - process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - (stdout, stderr) = process.communicate() - return stdout, stderr, process.wait() - - -class TestMigrate(unittest.TestCase): - def setUp(self): - os.chdir(os.path.split(os.path.abspath(__file__))[0]) - try: - os.remove('app1.db') - os.remove('app2.db') - except OSError: - pass - try: - shutil.rmtree('migrations') - except OSError: - pass - - def tearDown(self): - try: - os.remove('app1.db') - os.remove('app2.db') - except OSError: - pass - try: - shutil.rmtree('migrations') - except OSError: - pass - - def test_multidb_migrate_upgrade(self): - (o, e, s) = run_cmd('app_multidb.py', 'flask db init --multidb') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_multidb.py', 'flask db migrate') - self.assertTrue(s == 0) - (o, e, s) = run_cmd('app_multidb.py', 'flask db upgrade') - self.assertTrue(s == 0) - - # ensure the tables are in the correct databases - conn1 = sqlite3.connect('app1.db') - c = conn1.cursor() - c.execute('select name from sqlite_master') - tables = c.fetchall() - conn1.close() - 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.assertIn(('alembic_version',), tables) - self.assertIn(('group',), tables) - - # ensure the databases can be written to - from .app_multidb import db, User, Group - db.session.add(User(name='test')) - db.session.add(Group(name='group')) - db.session.commit() - - # ensure the downgrade works - (o, e, s) = run_cmd('app_multidb.py', 'flask db downgrade') - self.assertTrue(s == 0) - - conn1 = sqlite3.connect('app1.db') - c = conn1.cursor() - c.execute('select name from sqlite_master') - tables = c.fetchall() - conn1.close() - 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.assertIn(('alembic_version',), tables) - self.assertNotIn(('group',), tables)