Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
    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)
Esempio n. 5
0
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)
Esempio n. 8
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 13
0
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