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))
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))
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)
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)