Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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))
Exemple #4
0
    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)
Exemple #5
0
    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()
Exemple #6
0
    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)