def compile_migrations(migrator, models, reverse=False): """Compile migrations for given models.""" source = migrator.orm.values() if reverse: source, models = models, source migrations = diff_many(models, source, migrator, reverse=reverse) if not migrations: return False migrations = NEWLINE + NEWLINE.join('\n\n'.join(migrations).split('\n')) return CLEAN_RE.sub('\n', migrations)
def create(self, name='auto', auto=False): """Create a migration.""" migrate = rollback = '' if auto: if isinstance(auto, str): try: auto = import_module(auto) except ImportError: return self.logger.error('Invalid models module: %s', auto) if isinstance(auto, ModuleType): auto = list( filter(lambda m: isinstance(m, type) and issubclass( m, pw.Model)), (getattr(auto, model) for model in dir(auto))) # noqa for migration in self.diff: self.run_one(migration, self.migrator) models1 = auto models2 = list(self.migrator.orm.values()) migrate = diff_many(models1, models2) if not migrate: return self.logger.warn('No changes has found.') migrate = NEWLINE + NEWLINE.join('\n\n'.join(migrate).split('\n')) migrate = CLEAN_RE.sub('\n', migrate) rollback = diff_many(models2, models1) rollback = NEWLINE + NEWLINE.join( '\n\n'.join(rollback).split('\n')) rollback = CLEAN_RE.sub('\n', rollback) self.logger.info('Create a migration "%s"', name) path = self._create(name, migrate, rollback) self.logger.info('Migration has created %s', path) return path
def create(self, name='auto', auto=False): """Create a migration.""" migrate = rollback = '' if auto: if isinstance(auto, str): try: auto = import_module(auto) except ImportError: return self.logger.error('Invalid models module: %s', auto) if isinstance(auto, ModuleType): auto = list(filter( lambda m: isinstance(m, type) and issubclass(m, pw.Model)), (getattr(auto, model) for model in dir(auto))) # noqa for migration in self.diff: self.run_one(migration, self.migrator) models1 = auto models2 = list(self.migrator.orm.values()) migrate = diff_many(models1, models2) if not migrate: return self.logger.warn('No changes has found.') migrate = NEWLINE + NEWLINE.join('\n\n'.join(migrate).split('\n')) migrate = CLEAN_RE.sub('\n', migrate) rollback = diff_many(models2, models1) rollback = NEWLINE + NEWLINE.join('\n\n'.join(rollback).split('\n')) rollback = CLEAN_RE.sub('\n', rollback) self.logger.info('Create a migration "%s"', name) path = self._create(name, migrate, rollback) self.logger.info('Migration has created %s', path) return path