Beispiel #1
0
def list_migrations(apps, database=DEFAULT_DB_ALIAS, **options):
    """
    Prints a list of all available migrations, and which ones are currently applied.
    Accepts a list of Migrations instances.
    """
    from south.models import MigrationHistory
    applied_migrations = MigrationHistory.objects.filter(
        app_name__in=[app.app_label() for app in apps])
    if database != DEFAULT_DB_ALIAS:
        applied_migrations = applied_migrations.using(database)
    applied_migration_names = [
        '%s.%s' % (mi.app_name, mi.migration) for mi in applied_migrations
    ]

    print()
    for app in apps:
        print(" " + app.app_label())
        # Get the migrations object
        for migration in app:
            if migration.app_label() + "." + migration.name(
            ) in applied_migration_names:
                applied_migration = applied_migrations.get(
                    app_name=migration.app_label(), migration=migration.name())
                print(
                    format_migration_list_item(
                        migration.name(),
                        applied=applied_migration.applied,
                        **options))
            else:
                print(
                    format_migration_list_item(migration.name(),
                                               applied=False,
                                               **options))
        print()
Beispiel #2
0
def list_migrations(apps, database=DEFAULT_DB_ALIAS, **options):
    """
    Prints a list of all available migrations, and which ones are currently applied.
    Accepts a list of Migrations instances.
    """
    from south.models import MigrationHistory
    applied_migrations = MigrationHistory.objects.filter(
        app_name__in=[app.app_label() for app in apps])
    if database != DEFAULT_DB_ALIAS:
        applied_migrations = applied_migrations.using(database)
    applied_migrations_lookup = dict(('%s.%s' % (mi.app_name, mi.migration), mi)
                                     for mi in applied_migrations)

    print()
    for app in apps:
        print(" " + app.app_label())
        # Get the migrations object
        for migration in app:
            full_name = migration.app_label() + "." + migration.name()
            if full_name in applied_migrations_lookup:
                applied_migration = applied_migrations_lookup[full_name]
                print(
                    format_migration_list_item(
                        migration.name(),
                        applied=applied_migration.applied,
                        **options))
            else:
                print(format_migration_list_item(migration.name(), applied=False, **options))
        print()
    def fake_if_needed(self, verbosity=1):
        # detect installed models
        # (code borrowed from django syncdb command)
        tables = connection.introspection.table_names()
        def model_in_database(model):
            opts = model._meta
            converter = connection.introspection.table_name_converter
            return (converter(opts.db_table) in tables) or \
                (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables)

        # list all applications with south migration
        # (code borrowed from south migrate command)
        from south import migration
        apps = list(migration.all_migrations())
        applied_migrations = MigrationHistory.objects.filter(app_name__in=[app.app_label() for app in apps])
        applied_migrations_lookup = dict(('%s.%s' % (mi.app_name, mi.migration), mi) for mi in applied_migrations)

        if verbosity > 0:
            print 'Status after syncdb:'
        for app in apps:
            # for each app with migrations, list already applied migrations
            applied_migrations = []
            for migration in app:
                full_name = migration.app_label() + "." + migration.name()
                if full_name in applied_migrations_lookup:
                    applied_migration = applied_migrations_lookup[full_name]
                    if applied_migration.applied:
                        applied_migrations.append(migration.name())
            # try all models in database, if there none, the application is new
            # (because south syncdb does not create any tables)
            new = True
            for m in models.get_models(app.get_application().models):
                if model_in_database(m):
                    new = False
                    break
            if new:
                status = 'application-is-new'
            elif not applied_migrations:
                status = 'migration-is-new'
            else:
                status = 'normal'

            if verbosity > 0:
                print ' - %s: %s' % (app.app_label(), status)
            if status == 'migration-is-new':
                if verbosity > 0:
                    print '   need fake migration to 0001_initial'
                # migrate --fake gdc 0001
                SouthMigrateCommand().execute(app=app.app_label(), target='0001', fake=True, verbosity=verbosity)
Beispiel #4
0
def list_migrations(apps, database = DEFAULT_DB_ALIAS):
    """
    Prints a list of all available migrations, and which ones are currently applied.
    Accepts a list of Migrations instances.
    """
    from south.models import MigrationHistory
    applied_migrations = MigrationHistory.objects.filter(app_name__in=[app.app_label() for app in apps])
    if database != DEFAULT_DB_ALIAS:
        applied_migrations = applied_migrations.using(database)
    applied_migrations = ['%s.%s' % (mi.app_name,mi.migration) for mi in applied_migrations]

    print
    for app in apps:
        print " " + app.app_label()
        # Get the migrations object
        for migration in app:
            if migration.app_label() + "." + migration.name() in applied_migrations:
                print format_migration_list_item(migration.name())
            else:
                print format_migration_list_item(migration.name(), applied=False)
        print
from django.conf import settings
from south import migration
from south.models import MigrationHistory
import sys

apps = list(migration.all_migrations())

applied_migrations = MigrationHistory.objects.filter(
    app_name__in=[app.app_label() for app in apps])
applied_migrations = [
    '%s.%s' % (mi.app_name, mi.migration) for mi in applied_migrations
]
unapplied_migrations = []

num_new_migrations = 0
for app in apps:
    for migration in app:
        if migration.app_label() + "." + migration.name(
        ) not in applied_migrations:
            num_new_migrations = num_new_migrations + 1
            unapplied_migrations.append(
                '%s.%s' % (migration.app_label(), migration.name()))

if num_new_migrations > 0:
    import pprint
    sys.exit("%d new migrations to apply:\n%s" %
             (num_new_migrations, pprint.pformat(unapplied_migrations)))
print "No migrations to run."