示例#1
0
    def test_when_doing_something_then_loggged(self):
        db = MigrationDb(directory=self.mock_migrations_dir)
        db.warn = WarningsMocker()
        si = MigrationState(migration_db=db, dev=True)
        si.init()

        si.apply('001_foo')
        si.mark_as_unapplied('001_foo')
        si.apply('001_foo')
        si.mark_as_applied('005_omg')
        si.unapply('001_foo')

        self.assert_equal([
            ("apply", "001_foo", "success"),
            ("mark_as_unapplied", "001_foo", "success"),
            ("apply", "001_foo", "success"),
            ("mark_as_applied", "005_omg", "success"),
            ("unapply", "001_foo", "success"),
        ], [row[:3] for row in get_log()])
        self.assert_equal(True, isinstance(get_log()[0][3], datetime))
示例#2
0
    def test_when_doing_something_then_loggged(self):
        db = MigrationDb(directory=self.mock_migrations_dir)
        db.warn = WarningsMocker()
        si = MigrationState(migration_db=db, dev=True)
        si.init()

        si.apply("001_foo")
        si.mark_as_unapplied("001_foo")
        si.apply("001_foo")
        si.mark_as_applied("005_omg")
        si.unapply("001_foo")

        self.assert_equal(
            [
                ("apply", "001_foo", "success"),
                ("mark_as_unapplied", "001_foo", "success"),
                ("apply", "001_foo", "success"),
                ("mark_as_applied", "005_omg", "success"),
                ("unapply", "001_foo", "success"),
            ],
            [row[:3] for row in get_log()],
        )
        self.assert_equal(True, isinstance(get_log()[0][3], datetime))
示例#3
0
    def handle(self, *args, **options):
        try:
            migrations_dir = settings.DMIGRATIONS_DIR
        except AttributeError:
            print "You need to add DMIGRATIONS_DIR to your settings"
            return
        migration_db = MigrationDb(directory = migrations_dir)
        migration_state = MigrationState(
            migration_db = migration_db, dev = options.get('dev')
        )
        verbosity = int(options.get('verbosity', 1))

        if not args or args[0] == 'help':
            # TODO: Do this without calling os.system
            os.system('python manage.py help dmigrate')
            return

        elif args[0] in 'all up down upto downto to apply unapply'.split():
            migration_state.init()
            for (migration_name, action) in migration_state.plan(*args):
                migration = migration_db.load_migration_object(migration_name)
                if action == 'up':
                    if verbosity >= 1:
                        print "Applying migration %s" % migration.name
                    if not options.get('print_plan'):
                        migration_state.apply(migration_name)
                else:
                    if verbosity >= 1:
                        print "Unapplying migration %s" % migration.name
                    if not options.get('print_plan'):
                        migration_state.unapply(migration_name)

        elif args[0] == 'mark_as_applied':
            migration_state.init()
            for name in args[1:]:
                resolved_name = migration_state.resolve_name(name)
                if resolved_name == None:
                    raise NoSuchMigrationError(name)
                migration_state.mark_as_applied(resolved_name)

        elif args[0] == 'mark_as_unapplied':
            migration_state.init()
            for name in args[1:]:
                resolved_name = migration_state.resolve_name(name)
                if resolved_name == None:
                    raise NoSuchMigrationError(name)
                migration_state.mark_as_unapplied(resolved_name)

        elif args[0] == 'list':
            migration_state.init()
            for migration_name in migration_db.list():
                if migration_state.is_applied(migration_name):
                   print "* [+] %s" % migration_name
                else:
                   print "* [ ] %s" % migration_name
            migrations_not_in_db = migration_state.applied_but_not_in_db()
            if migrations_not_in_db:
                print "These migrations are marked as applied but cannot " \
                    "be found:"
                for migration_name in migrations_not_in_db:
                    print "* [?] %s" % migration_name
            return

        elif args[0] == 'init':
            migration_state.init()

        elif args[0] == 'cat':
            for name in args[1:]:
                print open(
                    migration_db.resolve_migration_path(name), 'r'
                ).read()
            return

        else:
            raise CommandError(
                'Argument should be one of: list, help, up, down, all, init, '
                'apply, unapply, to, downto, upto, mark_as_applied, '
                'mark_as_unapplied'
            )

        # Ensure Django permissions and content_types have been created
        # NOTE: Don't run if django_content_type doesn't exist yet.
        if table_present('django_content_type'):
            from django.contrib.auth.management import create_permissions
            from django.db import models
            for app in models.get_apps():
                if verbosity >= 1:
                    create_permissions(app, set(), 2)
                else:
                    create_permissions(app, set(), 1)
示例#4
0
 def handle(self, *args, **options):
     try:
         migrations_dir = settings.DMIGRATIONS_DIR
     except AttributeError:
         print "You need to add DMIGRATIONS_DIR to your settings"
         return
     migration_db = MigrationDb(directory = migrations_dir)
     migration_state = MigrationState(
         migration_db = migration_db, dev = options.get('dev')
     )
     verbosity = int(options.get('verbosity', 1))
     
     if not args or args[0] == 'help':
         self.print_help(sys.argv[0], 'dmigrate')
         return
     
     elif args[0] in 'all all_hard up down upto downto to apply unapply'.split():
         migration_state.init()
         for (migration_name, action) in migration_state.plan(*args):
             migration = migration_db.load_migration_object(migration_name)
             start_time = time.time()
             if action == 'up':
                 if verbosity >= 1:
                     print "Applying migration %s" % migration.name
                 if not options.get('print_plan'):
                     migration_state.apply(migration_name)
             else:
                 if verbosity >= 1:
                     print "Unapplying migration %s" % migration.name
                 if not options.get('print_plan'):
                     migration_state.unapply(migration_name)
             if options.get('print_time'):
                 print "Migration %s ran %.1f seconds" % (migration.name, time.time() - start_time)
     
     elif args[0] == 'mark_as_applied':
         migration_state.init()
         for name in args[1:]:
             resolved_name = migration_state.resolve_name(name)
             if resolved_name == None:
                 raise NoSuchMigrationError(name)
             migration_state.mark_as_applied(resolved_name)
     
     elif args[0] == 'mark_as_unapplied':
         migration_state.init()
         for name in args[1:]:
             resolved_name = migration_state.resolve_name(name)
             if resolved_name == None:
                 raise NoSuchMigrationError(name)
             migration_state.mark_as_unapplied(resolved_name)
     
     elif args[0] == 'list':
         migration_state.init()
         for migration_name in migration_db.list():
             if migration_state.is_applied(migration_name, use_cache=True):
                print "* [+] %s" % migration_name
             else:
                print "* [ ] %s" % migration_name
         migrations_not_in_db = migration_state.applied_but_not_in_db()
         if migrations_not_in_db:
             print "These migrations are marked as applied but cannot " \
                 "be found:"
             for migration_name in migrations_not_in_db:
                 print "* [?] %s" % migration_name
         return
     
     elif args[0] == 'init':
         migration_state.init()
     
     elif args[0] == 'cat':
         for name in args[1:]:
             print open(
                 migration_db.resolve_migration_path(name), 'r'
             ).read()
         return
     
     else:
         raise CommandError(
             'Argument should be one of: list, help, up, down, all, all_hard, init, '
             'apply, unapply, to, downto, upto, mark_as_applied, '
             'mark_as_unapplied'
         )
     
     # Ensure Django permissions and content_types have been created
     # NOTE: Don't run if django_content_type doesn't exist yet.
     if table_present('django_content_type'):
         from django.contrib.auth.management import create_permissions
         from django.db import models
         for app in models.get_apps():
             if verbosity >= 1:
                 create_permissions(app, set(), 2)
             else:
                 create_permissions(app, set(), 1)