def db_scope_fn(app, request): """ Session-wide test database """ migrations_path = Path(__file__).parent.parent.joinpath("migrations") with app.app_context(): _db.init_app(current_app) repo = DatabaseMigrationRepository(_db, "migrations") migrator = Migrator(repo, _db) if not migrator.repository_exists(): repo.create_repository() migrator.rollback(migrations_path) migrator.run(migrations_path)
def db(app): from orator.migrations import Migrator, DatabaseMigrationRepository db = app.extensions.db repository = DatabaseMigrationRepository(db, 'migrations') migrator = Migrator(repository, db) if not migrator.repository_exists(): repository.create_repository() path = os.path.join(app.root_path, 'db/migrations') migrator.run(path) yield db migrator.rollback(path)
def migrate_in_memory(database_manager: DatabaseManager): """ 参考: https://github.com/sdispater/orator/issues/159#issuecomment-288464538 """ migration_repository = DatabaseMigrationRepository(database_manager, 'migrations') migrator = Migrator(migration_repository, database_manager) if not migrator.repository_exists(): migration_repository.create_repository() migrations_path = Path(__file__).parents[4] / 'migrations' migrator.run(migrations_path)
def execute(self, i, o): """ Executes the command. :type i: cleo.inputs.input.Input :type o: cleo.outputs.output.Output """ super(MigrateCommand, self).execute(i, o) dialog = self.get_helper('dialog') confirm = dialog.ask_confirmation( o, '<question>Are you sure you want to proceed with the migration?</question> ', False ) if not confirm: return database = i.get_option('database') repository = DatabaseMigrationRepository(self._resolver, 'migrations') migrator = Migrator(repository, self._resolver) self._prepare_database(migrator, database, i, o) pretend = i.get_option('pretend') path = i.get_option('path') if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): o.writeln(note) # If the "seed" option has been given, we will rerun the database seed task # to repopulate the database. if i.get_option('seed'): options = [ ('--database', database), ('--config', i.get_option('config')), ('-n', True) ] if i.get_option('seed-path'): options.append(('--path', i.get_option('seed-path'))) self.call('db:seed', options, o)
def setup_database(): DATABASES = {"sqlite": {"driver": "sqlite", "database": "test.db"}} db = DatabaseManager(DATABASES) Schema(db) Model.set_connection_resolver(db) repository = DatabaseMigrationRepository(db, "migrations") migrator = Migrator(repository, db) if not repository.repository_exists(): repository.create_repository() migrator.reset("app/migrations") migrator.run("app/migrations")
def pytest_runtest_setup(): from personalwebpageapi.models import db migrations_path = f'{os.getcwd()}/migrations' repository = DatabaseMigrationRepository( db, 'migrations', ) migrator = Migrator(repository, db) if not migrator.repository_exists(): repository.create_repository() migrator.set_connection(db.get_default_connection()) migrator.run(migrations_path)
def fire(self): """ Executes the command. """ dialog = self.get_helper('dialog') confirm = dialog.ask_confirmation( self.output, '<question>Are you sure you want to proceed with the migration?</question> ', False ) if not confirm: return database = self.option('database') repository = DatabaseMigrationRepository(self.resolver, 'migrations') migrator = Migrator(repository, self.resolver) self._prepare_database(migrator, database) pretend = self.option('pretend') path = self.option('path') if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): self.line(note) # If the "seed" option has been given, we will rerun the database seed task # to repopulate the database. if self.option('seed'): options = [ ('--database', database), ('-n', True) ] if self.get_definition().has_option('config'): options.append(('--config', self.option('config'))) if self.option('seed-path'): options.append(('--path', self.option('seed-path'))) self.call('db:seed', options)
def __init__(self): self.db_directory = tempfile.TemporaryDirectory() self.db_file = os.path.join(self.db_directory.name, 'test.db') self.db_manager = DatabaseManager(self.database_configuration()) migrations_directory = os.path.join(os.path.dirname(__file__), "..", 'migrations') migration_repository = DatabaseMigrationRepository(self.db_manager, "migrations") migration_repository.create_repository() migrator = Migrator( migration_repository, self.db_manager, ) migrator.reset(migrations_directory) migrator.run(migrations_directory) _Model.set_connection_resolver(self.db_manager)
def fire(self): """ Executes the command. """ dialog = self.get_helper('dialog') confirm = dialog.ask_confirmation( self.output, '<question>Are you sure you want to proceed with the migration?</question> ', False) if not confirm: return database = self.option('database') repository = DatabaseMigrationRepository(self.resolver, 'migrations') migrator = Migrator(repository, self.resolver) self._prepare_database(migrator, database) pretend = self.option('pretend') path = self.option('path') if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): self.line(note) # If the "seed" option has been given, we will rerun the database seed task # to repopulate the database. if self.option('seed'): options = [('--database', database), ('-n', True)] if self.get_definition().has_option('config'): options.append(('--config', self.option('config'))) if self.option('seed-path'): options.append(('--path', self.option('seed-path'))) self.call('db:seed', options)
def handle(self): if not self.confirm_to_proceed( "<question>Are you sure you want to proceed with the migration?</question> " ): return database = self.option("database") repository = DatabaseMigrationRepository(self.resolver, "migrations") migrator = Migrator(repository, self.resolver) self._prepare_database(migrator, database) pretend = self.option("pretend") path = self.option("path") if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): self.line(note) # If the "seed" option has been given, we will rerun the database seed task # to repopulate the database. if self.option("seed"): options = [("--force", self.option("force"))] if database: options.append(("--database", database)) if self.get_definition().has_option("config"): options.append(("--config", self.option("config"))) if self.option("seed-path"): options.append(("--path", self.option("seed-path"))) self.call("db:seed", options)
def handle(self): prompt_msg = ('<question>Are you sureyou want ' 'to proceed with the migration?</question> ') if not self.confirm_to_proceed(prompt_msg): return database = self.option('database') repository = DatabaseMigrationRepository(self.resolver, 'migrations') migrator = Migrator(repository, self.resolver) self._prepare_database(migrator, database) pretend = self.option('pretend') path = self.option('path') if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): self.line(note) # If the "seed" option has been given, # we will rerun the database seed task to repopulate the database. if self.option('seed'): options = [('--force', self.option('force'))] if database: options.append(('--database', database)) if self.get_definition().has_option('config'): options.append(('--config', self.option('config'))) if self.option('seed-path'): options.append(('--path', self.option('seed-path'))) self.call('db:seed', options)
def execute(self, i, o): """ Executes the command. :type i: cleo.inputs.input.Input :type o: cleo.outputs.output.Output """ super(MigrateCommand, self).execute(i, o) dialog = self.get_helper('dialog') confirm = dialog.ask_confirmation( o, '<question>Are you sure you want to proceed with the migration?</question> ', False ) if not confirm: return database = i.get_option('database') repository = DatabaseMigrationRepository(self._resolver, 'migrations') migrator = Migrator(repository, self._resolver) self._prepare_database(migrator, database, i, o) pretend = i.get_option('pretend') path = i.get_option('path') if path is None: path = self._get_migration_path() migrator.run(path, pretend) for note in migrator.get_notes(): o.writeln(note)
class Migrations(HasColoredCommands): def __init__(self, connection=None): self._ran = [] self._notes = [] from config import database database_dict = database.DB self.repository = DatabaseMigrationRepository(database.DB, 'migrations') self.migrator = Migrator(self.repository, database.DB) if not connection or connection == 'default': connection = database.DATABASES['default'] self.migrator.set_connection(connection) if not self.repository.repository_exists(): self.repository.create_repository() from wsgi import container self.migration_directories = ['databases/migrations'] for key, value in container.providers.items(): if isinstance(key, str) and 'MigrationDirectory' in key: self.migration_directories.append(value) try: add_venv_site_packages() except ImportError: self.comment( 'This command must be ran inside of the root of a Masonite project directory' ) def run(self): for directory in self.migration_directories: try: if len(self.migration_directories) > 1: self.info('Migrating: {}'.format(directory)) self.migrator.run(directory) self._ran.append(self.repository.get_ran()) self._notes = self.migrator._notes except Exception as e: self.danger(str(e)) return self def rollback(self): for directory in self.migration_directories: try: if len(self.migration_directories) > 1: self.info('Migrating: {}'.format(directory)) self.migrator.rollback(directory) self._ran.append(self.repository.get_ran()) self._notes = self.migrator._notes except Exception as e: self.danger(str(e)) return self def refresh(self): self.run() self.rollback() def reset(self): for directory in self.migration_directories: try: if len(self.migration_directories) > 1: self.info('Migrating: {}'.format(directory)) self.migrator.reset(directory) self._ran.append(self.repository.get_ran()) self._notes = self.migrator._notes except Exception as e: self.danger(str(e)) return self def ran(self): return self._ran