Source code for fab_deploy.django_commands

#coding: utf-8
from __future__ import with_statement
from fabric.api import *

from fab_deploy import mysql
from fab_deploy import utils


__all__ = ['migrate', 'manage', 'syncdb', 'compress', 'collectstatic', 'test',
           'command_is_available']


@utils.inside_project
def command_is_available(command):
    with settings(hide('warnings', 'running', 'stdout', 'stderr'), warn_only=True):
        output = run('python manage.py help ' + command)

    if output.succeeded:
        return True

    # that's ugly
    unknown_command_msg = "Unknown command: '%s'" % command
    if unknown_command_msg in output:
        return False

    # re-raise the original exception
    run('python manage.py help ' + command)

@utils.inside_project
[docs]def manage(command): """ Runs django management command. Example:: fab manage:createsuperuser """ command_name = command.split()[0] if not command_is_available(command_name): warn('Management command "%s" is not available' % command_name) else: run('python manage.py ' + command)
[docs]def migrate(params='', do_backup=True): """ Runs migrate management command. Database backup is performed before migrations if ``do_backup=False`` is not passed. """ if do_backup: backup_dir = env.conf['ENV_DIR'] + '/var/backups/before-migrate' run('mkdir -p ' + backup_dir) with settings(warn_only=True): mysql.mysqldump(backup_dir) manage('migrate --noinput %s' % params)
[docs]def syncdb(params=''): """ Runs syncdb management command. """ manage('syncdb --noinput %s' % params)
def compress(params=''): with settings(warn_only=True): manage('synccompress %s' % params) def collectstatic(params=''): manage('collectstatic --noinput %s' % params) @utils.inside_project
[docs]def test(what=''): """ Runs 'runtests.sh' script from project root. Example runtests.sh content:: #!/bin/sh default_tests='accounts forum firms blog' if [ $# -eq 0 ] then ./manage.py test $default_tests --settings=test_settings else ./manage.py test $* --settings=test_settings fi """ with settings(warn_only=True): run('./runtests.sh ' + what) #def coverage(): # pass # with cd(env.conf['SRC_DIR']): # run('source %s/bin/activate; ./bin/runcoverage.sh' % env.conf['ENV_DIR'])