コード例 #1
0
def test_router():
    from peewee_migrate import MigrateHistory
    from peewee_migrate.cli import get_router

    router = get_router('tests/migrations', 'sqlite:///:memory:')

    assert router.database
    assert isinstance(router.database, pw.Database)

    assert router.todo == ['001_test', '002_test', '003_tespy']
    assert router.done == []
    assert router.diff == ['001_test', '002_test', '003_tespy']

    router.create('new')
    assert router.todo == ['001_test', '002_test', '003_tespy', '004_new']
    os.remove('tests/migrations/004_new.py')

    MigrateHistory.create(name='001_test')
    assert router.diff == ['002_test', '003_tespy']

    MigrateHistory.delete().execute()

    router.run()
    assert router.diff == []

    migrations = MigrateHistory.select()
    assert list(migrations)
    assert migrations.count() == 3

    router.rollback('003_tespy')
    assert router.diff == ['003_tespy']
    assert migrations.count() == 2
コード例 #2
0
ファイル: test_auto.py プロジェクト: ianlini/peewee_migrate
def test_auto():
    from peewee_migrate.auto import diff_one, diff_many, model_to_code
    from peewee_migrate.cli import get_router

    router = get_router('tests/migrations', 'sqlite:///:memory:')
    router.run()
    migrator = router.migrator
    models = migrator.orm.values()
    Person_ = migrator.orm['person']
    Tag_ = migrator.orm['tag']

    code = model_to_code(Person_)
    assert code
    import ipdb; ipdb.set_trace()  # XXX BREAKPOINT
    assert 'db_table = "person"' in code

    changes = diff_many(models, [], migrator=migrator)
    assert len(changes) == 2

    class Person(pw.Model):
        first_name = pw.IntegerField()
        last_name = pw.CharField(max_length=1024, null=True)
        tag = pw.ForeignKeyField(Tag_, on_delete='CASCADE', related_name='persons')

    changes = diff_one(Person, Person_, migrator=migrator)
    assert len(changes) == 4
    assert "on_delete='CASCADE'" in changes[0]
    assert "related_name='persons'" in changes[0]
    assert changes[-1] == "migrator.drop_not_null('person', 'last_name')"
コード例 #3
0
ファイル: test_auto.py プロジェクト: ezc/peewee_migrate
def test_auto():
    from peewee_migrate.auto import diff_one, diff_many, model_to_code
    from peewee_migrate.cli import get_router

    router = get_router(path.join(CURDIR, 'migrations'), 'sqlite:///:memory:')
    router.run()
    migrator = router.migrator
    models = migrator.orm.values()
    Person_ = migrator.orm['person']
    Tag_ = migrator.orm['tag']

    code = model_to_code(Person_)
    assert code
    assert "default=dt.datetime.now" in code
    assert 'db_table = "person"' in code
    assert "order_by = ('-dob',)" in code

    changes = diff_many(models, [], migrator=migrator)
    assert len(changes) == 2

    class Person(pw.Model):
        first_name = pw.IntegerField()
        last_name = pw.CharField(max_length=1024, null=True, unique=True)
        tag = pw.ForeignKeyField(Tag_,
                                 on_delete='CASCADE',
                                 related_name='persons')

    changes = diff_one(Person, Person_, migrator=migrator)
    assert len(changes) == 6
    assert "on_delete='CASCADE'" in changes[0]
    assert "related_name='persons'" in changes[0]
    assert changes[-3] == "migrator.drop_not_null('person', 'last_name')"
    assert changes[-2] == "migrator.drop_index('person', 'last_name')"
    assert changes[
        -1] == "migrator.add_index('person', 'last_name', unique=True)"
コード例 #4
0
def router(migrations_dir, database):
    from peewee_migrate.cli import get_router
    router = get_router(migrations_dir, database)

    assert router.database is database
    assert isinstance(router.database, pw.Database)

    return router
コード例 #5
0
def test_router_compile(tmpdir):
    from peewee_migrate.cli import get_router

    migrations = tmpdir.mkdir('migrations')
    router = get_router(str(migrations), 'sqlite:///:memory:')
    router.compile('test_router_compile')

    with open(str(migrations.join('001_test_router_compile.py'))) as f:
        content = f.read()
        assert 'SQL = pw.SQL' in content
コード例 #6
0
def migrate(name=None,
            database=None,
            directory=None,
            verbose=None,
            fake=False):
    """Migrate database."""
    router = get_router(directory, database, verbose)
    migrations = router.run(name, fake=fake)
    if migrations:
        print('Migrations completed: %s' % ', '.join(migrations))
コード例 #7
0
def test_auto():
    from peewee_migrate.auto import diff_one, diff_many, model_to_code
    from peewee_migrate.cli import get_router

    router = get_router(path.join(CURDIR, 'migrations'), 'sqlite:///:memory:')
    router.run()
    migrator = router.migrator
    models = migrator.orm.values()
    Person_ = migrator.orm['person']
    Tag_ = migrator.orm['tag']

    code = model_to_code(Person_)
    assert code
    assert 'table_name = "person"' in code

    changes = diff_many(models, [], migrator=migrator)
    assert len(changes) == 2

    class Person(pw.Model):
        first_name = pw.IntegerField()
        last_name = pw.CharField(max_length=1024, null=True, unique=True)
        tag = pw.ForeignKeyField(Tag_,
                                 on_delete='CASCADE',
                                 related_name='persons')
        email = pw.CharField(index=True, unique=True)

    changes = diff_one(Person, Person_, migrator=migrator)
    assert len(changes) == 6
    assert "on_delete='CASCADE'" in changes[0]
    assert "backref='persons'" in changes[0]
    assert changes[-3] == "migrator.drop_not_null('person', 'last_name')"
    assert changes[-2] == "migrator.drop_index('person', 'last_name')"
    assert changes[
        -1] == "migrator.add_index('person', 'last_name', unique=True)"

    migrator.drop_index('person', 'email')
    migrator.add_index('person', 'email', unique=True)

    class Person(pw.Model):
        first_name = pw.CharField(unique=True)
        last_name = pw.CharField(max_length=255, index=True)
        dob = pw.DateField(null=True)
        birthday = pw.DateField(default=dt.datetime.now)
        email = pw.CharField(index=True, unique=True)

    changes = diff_one(Person_, Person, migrator=migrator)
    assert not changes

    class Color(pw.Model):
        id = pw.AutoField()
        name = pw.CharField(default='red')

    code = model_to_code(Color)
    assert "DEFAULT 'red'" in code
コード例 #8
0
def test_router():
    from peewee_migrate import MigrateHistory
    from peewee_migrate.cli import get_router

    router = get_router(MIGRATIONS_DIR, 'sqlite:///:memory:')

    assert router.database
    assert isinstance(router.database, pw.Database)

    assert router.todo == ['001_test', '002_test', '003_tespy']
    assert router.done == []
    assert router.diff == ['001_test', '002_test', '003_tespy']

    router.create('new')
    assert router.todo == ['001_test', '002_test', '003_tespy', '004_new']
    os.remove(os.path.join(MIGRATIONS_DIR, '004_new.py'))

    MigrateHistory.create(name='001_test')
    assert router.diff == ['002_test', '003_tespy']

    MigrateHistory.delete().execute()

    router.run()
    assert router.diff == []

    with mock.patch('peewee.Database.execute_sql') as execute_sql:
        router.run_one('002_test', router.migrator, fake=True)

    assert not execute_sql.called

    migrations = MigrateHistory.select()
    assert list(migrations)
    assert migrations.count() == 3

    router.rollback('003_tespy')
    assert router.diff == ['003_tespy']
    assert migrations.count() == 2

    with mock.patch('os.remove') as mocked:
        router.merge()
        assert mocked.call_count == 3
        assert mocked.call_args[0][0] == os.path.join(MIGRATIONS_DIR, '003_tespy.py')
        assert MigrateHistory.select().count() == 1

    os.remove(os.path.join(MIGRATIONS_DIR, '001_initial.py'))

    from peewee_migrate.router import load_models

    models = load_models('tests.test_autodiscover')
    assert models

    models = load_models('tests.test_autodiscover')
    assert models
コード例 #9
0
def test_router_schema(tmpdir):
    from peewee_migrate.cli import get_router

    schema_name = 'test'
    migrations = tmpdir.mkdir('migrations')

    with mock.patch('peewee_migrate.router.BaseRouter.done'):
        router = get_router(str(migrations),
                            'postgres:///fake',
                            schema=schema_name)

        assert router.schema == schema_name
        assert router.migrator.schema == schema_name
コード例 #10
0
ファイル: test_auto.py プロジェクト: klen/peewee_migrate
def test_auto():
    from peewee_migrate.auto import diff_one, diff_many, model_to_code
    from peewee_migrate.cli import get_router

    router = get_router(path.join(CURDIR, 'migrations'), 'sqlite:///:memory:')
    router.run()
    migrator = router.migrator
    models = migrator.orm.values()
    Person_ = migrator.orm['person']
    Tag_ = migrator.orm['tag']

    code = model_to_code(Person_)
    assert code
    assert 'table_name = "person"' in code

    changes = diff_many(models, [], migrator=migrator)
    assert len(changes) == 2

    class Person(pw.Model):
        first_name = pw.IntegerField()
        last_name = pw.CharField(max_length=1024, null=True, unique=True)
        tag = pw.ForeignKeyField(Tag_, on_delete='CASCADE', backref='persons')
        email = pw.CharField(index=True, unique=True)

    changes = diff_one(Person, Person_, migrator=migrator)
    assert len(changes) == 6
    assert "on_delete='CASCADE'" in changes[0]
    assert "backref='persons'" in changes[0]
    assert changes[-3] == "migrator.drop_not_null('person', 'last_name')"
    assert changes[-2] == "migrator.drop_index('person', 'last_name')"
    assert changes[-1] == "migrator.add_index('person', 'last_name', unique=True)"

    migrator.drop_index('person', 'email')
    migrator.add_index('person', 'email', unique=True)

    class Person(pw.Model):
        first_name = pw.CharField(unique=True)
        last_name = pw.CharField(max_length=255, index=True)
        dob = pw.DateField(null=True)
        birthday = pw.DateField(default=dt.datetime.now)
        email = pw.CharField(index=True, unique=True)

    changes = diff_one(Person_, Person, migrator=migrator)
    assert not changes

    class Color(pw.Model):
        id = pw.AutoField()
        name = pw.CharField(default='red')

    code = model_to_code(Color)
    assert "DEFAULT 'red'" in code
コード例 #11
0
def test_router():
    from peewee_migrate import MigrateHistory
    from peewee_migrate.cli import get_router

    router = get_router('tests/migrations', 'sqlite:///:memory:')

    assert router.database
    assert isinstance(router.database, pw.Database)

    assert router.todo == ['001_test', '002_test', '003_tespy']
    assert router.done == []
    assert router.diff == ['001_test', '002_test', '003_tespy']

    router.create('new')
    assert router.todo == ['001_test', '002_test', '003_tespy', '004_new']
    os.remove('tests/migrations/004_new.py')

    MigrateHistory.create(name='001_test')
    assert router.diff == ['002_test', '003_tespy']

    MigrateHistory.delete().execute()

    router.run()
    assert router.diff == []

    migrations = MigrateHistory.select()
    assert list(migrations)
    assert migrations.count() == 3

    router.rollback('003_tespy')
    assert router.diff == ['003_tespy']
    assert migrations.count() == 2

    with mock.patch('os.remove') as mocked:
        router.merge()
        assert mocked.call_count == 3
        assert mocked.call_args[0][0] == 'tests/migrations/003_tespy.py'
        assert MigrateHistory.select().count() == 1

    os.remove('tests/migrations/001_initial.py')
コード例 #12
0
def test_auto():
    from peewee_migrate.auto import diff_one, diff_many, model_to_code
    from peewee_migrate.cli import get_router

    router = get_router('tests/migrations', 'sqlite:///:memory:')
    router.run()
    migrator = router.migrator
    models = migrator.orm.values()
    Person_, _ = models

    code = model_to_code(Person_)
    assert code

    changes = diff_many(models, [])
    assert len(changes) == 2

    class Person(pw.Model):
        first_name = pw.IntegerField()
        last_name = pw.CharField(max_length=1024)

    changes = diff_one(Person_, Person)
    assert len(changes) == 2
コード例 #13
0
def router(tmpdir, db_url):
    return lambda: get_router(str(tmpdir), db_url)