コード例 #1
0
ファイル: auto.py プロジェクト: stlehmann/peewee_migrate
def diff_many(models1, models2, migrator=None, reverse=False):
    """Calculate changes for migrations from models2 to models1."""
    models1 = pw.sort_models(models1)
    models2 = pw.sort_models(models2)

    if reverse:
        models1 = reversed(models1)
        models2 = reversed(models2)

    models1 = OrderedDict([(m._meta.name, m) for m in models1])
    models2 = OrderedDict([(m._meta.name, m) for m in models2])

    changes = []

    for name, model1 in models1.items():
        if name not in models2:
            continue
        changes += diff_one(model1, models2[name], migrator=migrator)

    # Add models
    for name in [m for m in models1 if m not in models2]:
        changes.append(create_model(models1[name], migrator=migrator))

    # Remove models
    for name in [m for m in models2 if m not in models1]:
        changes.append(remove_model(models2[name]))

    return changes
コード例 #2
0
ファイル: auto.py プロジェクト: klen/peewee_migrate
def diff_many(models1, models2, migrator=None, reverse=False):
    """Calculate changes for migrations from models2 to models1."""
    models1 = pw.sort_models(models1)
    models2 = pw.sort_models(models2)

    if reverse:
        models1 = reversed(models1)
        models2 = reversed(models2)

    models1 = OrderedDict([(m._meta.name, m) for m in models1])
    models2 = OrderedDict([(m._meta.name, m) for m in models2])

    changes = []

    for name, model1 in models1.items():
        if name not in models2:
            continue
        changes += diff_one(model1, models2[name], migrator=migrator)

    # Add models
    for name in [m for m in models1 if m not in models2]:
        changes.append(create_model(models1[name], migrator=migrator))

    # Remove models
    for name in [m for m in models2 if m not in models1]:
        changes.append(remove_model(models2[name]))

    return changes
コード例 #3
0
    def test_sort_models(self):
        class A(Model):
            pass
        class B(Model):
            a = ForeignKeyField(A)
        class C(Model):
            b = ForeignKeyField(B)
        class D(Model):
            c = ForeignKeyField(C)
        class E(Model):
            pass

        models = [A, B, C, D, E]
        for list_of_models in permutations(models):
            sorted_models = sort_models(list_of_models)
            self.assertEqual(sorted_models, models)
コード例 #4
0
    def create(self, modelstr):
        """
        Create a new migration file for an existing model.
        Model could actually also be a module, in which case all Peewee models are extracted
        from the model and created.

        :param modelstr: Python class, module, or string pointing to a class or module.
        :return: True if migration file was created, otherwise False.
        :type: bool
        """
        model = modelstr
        if isinstance(modelstr, str):
            model = pydoc.locate(modelstr)
            if not model:
                LOGGER.info('could not import: {}'.format(modelstr))
                return False

        # If it's a module, we need to loop through all the models in it.
        if inspect.ismodule(model):
            model_list = []
            for item in model.__dict__.values():
                if inspect.isclass(item) and issubclass(item, peewee.Model):
                    # Don't create migration file for imported models.
                    if model.__name__ != item.__module__:
                        continue
                    model_list.append(item)
            for model in peewee.sort_models(model_list):
                self.create(model)
            return True

        try:
            name = 'create table {}'.format(model._meta.table_name.lower())
            migration = self.next_migration(name)
            up_ops = build_upgrade_from_model(model)
            down_ops = build_downgrade_from_model(model)
            self.write_migration(migration,
                                 name=name,
                                 upgrade=up_ops,
                                 downgrade=down_ops)
        except Exception as exc:
            LOGGER.error(exc)
            return False

        LOGGER.info('created: {}'.format(migration))
        return True
コード例 #5
0
ファイル: peewee_moves.py プロジェクト: timster/peewee-moves
    def create(self, modelstr):
        """
        Create a new migration file for an existing model.
        Model could actually also be a module, in which case all Peewee models are extracted
        from the model and created.

        :param modelstr: Python class, module, or string pointing to a class or module.
        :return: True if migration file was created, otherwise False.
        :type: bool
        """
        model = modelstr
        if isinstance(modelstr, str):
            model = pydoc.locate(modelstr)
            if not model:
                LOGGER.info('could not import: {}'.format(modelstr))
                return False

        # If it's a module, we need to loop through all the models in it.
        if inspect.ismodule(model):
            model_list = []
            for item in model.__dict__.values():
                if inspect.isclass(item) and issubclass(item, peewee.Model):
                    # Don't create migration file for imported models.
                    if model.__name__ != item.__module__:
                        continue
                    model_list.append(item)
            for model in peewee.sort_models(model_list):
                self.create(model)
            return True

        try:
            name = 'create table {}'.format(model._meta.table_name.lower())
            migration = self.next_migration(name)
            up_ops = build_upgrade_from_model(model)
            down_ops = build_downgrade_from_model(model)
            self.write_migration(migration, name=name, upgrade=up_ops, downgrade=down_ops)
        except Exception as exc:
            LOGGER.error(exc)
            return False

        LOGGER.info('created: {}'.format(migration))
        return True
コード例 #6
0
ファイル: mysql.py プロジェクト: laiqiqi/torpeewee
 async def drop_tables(self, models, **kwargs):
     for model in reversed(sort_models(models)):
         await model.drop_table(**kwargs)
コード例 #7
0
ファイル: mysql.py プロジェクト: laiqiqi/torpeewee
 async def create_tables(self, models, **options):
     for model in sort_models(models):
         await model.create_table(**options)
コード例 #8
0
ファイル: mysql.py プロジェクト: snower/torpeewee
 async def drop_tables(self, models, **kwargs):
     for model in reversed(sort_models(models)):
         await model.drop_table(**kwargs)
コード例 #9
0
ファイル: mysql.py プロジェクト: snower/torpeewee
 async def create_tables(self, models, **options):
     for model in sort_models(models):
         await model.create_table(**options)
コード例 #10
0
def clear_tables(create_tables: None):
    for model in reversed(sort_models(list_models())):
        db.execute_sql(f'DELETE FROM "{model._meta.table_name}"', )