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
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')"
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)"
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
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
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))
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
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
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
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
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')
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
def router(tmpdir, db_url): return lambda: get_router(str(tmpdir), db_url)