from fabric.api import task, sudo, runs_once, prefix, hide, abort from fabric.contrib import console from fabric.colors import white, green from .safety import noopable @task() @runs_once def migrate_check(auto_migrate=False): """ Checks to see whether migrations need to be run, if they do it will prompt to run them before continuing. looks for " - Migrating" in the output of the dry run """ migration_cmd = "/opt/edx/bin/django-admin.py migrate --noinput " \ "--settings=lms.envs.aws --pythonpath=/opt/wwc/edx-platform" with prefix("export SERVICE_VARIANT=lms"): with hide('running', 'stdout', 'stderr', 'warnings'): dryrun_out = sudo(migration_cmd + " --db-dry-run", user="www-data") migrate = False for chunk in dryrun_out.split('Running migrations for '): if 'Migrating' in chunk: print "!!! Found Migration !!!\n" + chunk migrate = True if migrate: if auto_migrate or console.confirm( green(migration_cmd) + white('\n') + white('Run migrations? ', bold=True), default=True): noopable(sudo)(migration_cmd, user='www-data')