def test_change_integer_to_fake_fk_column(self): class Person(pw.Model): class Meta: database = self.db class Car(pw.Model): owner_id = pw.IntegerField(null=False) class Meta: database = self.db self.evolve_and_check_noop() car = Car.create(owner_id=-1) peeweedbevolve.unregister(Car) class Car(pw.Model): owner = foreign_key(Person, null=False, fake=True) class Meta: database = self.db self.evolve_and_check_noop() person = Person.create() car = Car.create(owner=-2) self.assertEqual(Car.select().count(), 2)
def test_change_fk_column_to_int(self): class Person(pw.Model): class Meta: database = self.db class Car(pw.Model): owner = foreign_key(Person, null=False) class Meta: database = self.db self.evolve_and_check_noop() person = Person.create() car = Car.create(owner=person) peeweedbevolve.unregister(Car) class Car(pw.Model): owner_id = pw.IntegerField(null=False) class Meta: database = self.db self.evolve_and_check_noop() self.assertEqual(Car.select().first().owner_id, person.id) Car.create(owner_id=-1) # this should not fail
def test_change_int_column_to_fk(self): class Person(pw.Model): class Meta: database = self.db class Car(pw.Model): owner_id = pw.IntegerField(null=False) class Meta: database = self.db self.evolve_and_check_noop() person = Person.create() car = Car.create(owner_id=person.id) peeweedbevolve.unregister(Car) class Car(pw.Model): owner = foreign_key(Person, null=False) class Meta: database = self.db self.evolve_and_check_noop() self.assertEqual(Car.select().first().owner_id, person.id) self.assertRaises(Exception, lambda: Car.create(owner=-1))
def test_add_fk_column(self): class Person(pw.Model): class Meta: database = self.db class Car(pw.Model): class Meta: database = self.db self.evolve_and_check_noop() peeweedbevolve.unregister(Car) class Car(pw.Model): owner = foreign_key(Person, null=False) class Meta: database = self.db self.evolve_and_check_noop() person = Person.create() car = Car.create(owner=person)
def test_drop_fk_column(self): class Person(pw.Model): class Meta: database = self.db class Car(pw.Model): owner = pw.ForeignKeyField(rel_model=Person, null=False) class Meta: database = self.db self.evolve_and_check_noop() person = Person.create() car = Car.create(owner=person) peeweedbevolve.unregister(Car) class Car(pw.Model): class Meta: database = self.db self.evolve_and_check_noop()
def db_migrate(self): # We care only about the tables defined in models from models.db import db # Joined must be outed # print(peeweedbevolve.all_models) # return declared_tables = [m._meta.table_name for m in pw.Model.__subclasses__()] for m in peeweedbevolve.all_models: if m._meta: declared_tables.append(m._meta.table_name) # return if self.app.pargs.schema: out_of_scope_tables = [ t if t not in declared_tables else None for t in db.get_tables(schema=self.app.pargs.schema) ] else: out_of_scope_tables = [t if t not in declared_tables else None for t in db.get_tables()] out_of_scope_tables = [i for i in out_of_scope_tables if i] out_of_scope_tables.append("basemodel") if self.app.pargs.tables: to_unregister = [] for m in peeweedbevolve.all_models: # print(m._meta.table_name, self.app.pargs.tables.split(',')) if m._meta.table_name not in self.app.pargs.tables.split(","): to_unregister.append(m) out_of_scope_tables.append(m._meta.table_name) for m in to_unregister: peeweedbevolve.unregister(m) print(out_of_scope_tables) [self.app.log.warning("Table " + table + " will be ignored") for table in out_of_scope_tables] # return if self.app.pargs.schema: db.evolve(ignore_tables=out_of_scope_tables, schema=self.app.pargs.schema) else: db.evolve(ignore_tables=out_of_scope_tables)