minecraftcodex/fabfile.py

198 lines
5.7 KiB
Python

##
# This fabric script only add automation to tasks for
# local development, is not intended to be used for
# deploys or stuff.
##
# IMPORTS
from fabric.api import local, env, prefix, execute
from fabric.context_managers import settings, hide
from os.path import exists
from os import environ, stat, getcwd
from fabric.colors import yellow, red, green
from subprocess import PIPE, Popen
import sys
# Fabric env
env.hosts = ['localhost']
env.activate = 'source virtualenv/bin/activate'
env.python = None
# Development data
env.development_ddbb = 'dev.sqlite3'
# Configuration
#python_version = "3.3.1"
python_version = "2.7.5"
# Functions
def echo(string, end='\r\n'):
sys.stdout.write(string)
if end:
sys.stdout.write("\n")
sys.stdout.flush()
def active_virtualenv():
result = 'VIRTUAL_ENV' in environ
if result:
print red("Active virtualenv detected! You must deactivate it first.")
exit(-1)
return result
def python():
if env.python is None:
print(yellow('Looking for python %s ...' % python_version))
# System python
echo(yellow('- System python: '), end='')
active = Popen('python --version',
stdout=PIPE,
stderr=PIPE,
shell=True)
version = active.communicate()[1].split()[1]
if version == python_version:
print(green('found!'))
env.python = 'python'
return(env.python)
else:
print(red(version))
# Alternate install
echo(yellow('- Alternate install: '), end='')
active = Popen('python3 --version',
stdout=PIPE,
stderr=PIPE,
shell=True)
version = active.communicate()[1].split()[1]
if version == python_version:
print(green('found!'))
env.python = 'python3'
return(env.python)
else:
if active.returncode == 0:
print(red(version))
else:
print(red('not found'))
# PythonZ
echo(yellow('- PythonZ: '), end='')
active = Popen('$HOME/.pythonz/pythons/CPython-3.3.1/bin/python3 --version',
stdout=PIPE,
stderr=PIPE,
shell=True)
output = active.communicate()
version = output[1].split()[1]
if version == python_version:
print(green('found!'))
env.python = "~/.pythonz/pythons/CPython-3.3.1/bin/python3"
return(env.python)
else:
if active.returncode == 0:
print(red(version))
else:
print(red('not found'))
# Anything found? D:
print(red('Python %s was not found!' % python_version))
exit(-1)
else:
return env.python
# Virtualenv
def create_virtualenv():
if not exists('./virtualenv'):
print(yellow('Making virtualenv'))
local("virtualenv -q --distribute -p %s ./virtualenv" % python())
else:
print(green('Virtualenv already exists.'))
# Requirements
def install_requirements():
if not active_virtualenv():
with prefix(env.activate):
if stat('./config/development/requirements.pip').st_size > 0:
print(yellow('Installing development requirements'))
local('pip install -q -r ./config/development/requirements.pip')
def install(package):
"Install packages on the environment using fab install:<package name>"
if not active_virtualenv():
with prefix(env.activate):
local('pip install ' + package)
def requirements(environ='global'):
if not active_virtualenv():
with prefix(env.activate):
local('pip freeze')
def syncdb():
if not active_virtualenv():
with prefix(env.activate):
local('python minecraftcodex/manage.py syncdb --noinput')
execute(migrate)
def fixtures():
if not active_virtualenv():
with prefix(env.activate):
local('python minecraftcodex/manage.py loaddata ./config/development/admin.json')
local('python minecraftcodex/manage.py loaddata ./config/production/vanilla.json')
def migrate():
if not active_virtualenv():
with prefix(env.activate):
local('python minecraftcodex/manage.py migrate')
def schemamigration(app, flag='--auto'):
if not active_virtualenv():
with prefix(env.activate):
local('python minecraftcodex/manage.py schemamigration %s %s' % (app, flag))
# Easy-mode
def prepare():
execute(create_virtualenv)
execute(install_requirements)
def p():
execute(prepare)
def run():
if not active_virtualenv():
with prefix(env.activate):
path = getcwd()
with settings(hide('warnings', 'running'),
warn_only=True):
local('rm ./minecraftcodex/herobrine/local_settings.py')
local('ln -s %s/config/development/local_settings.py %s/minecraftcodex/herobrine/local_settings.py' % (path, path))
local('python minecraftcodex/manage.py runserver')
def test():
if not active_virtualenv():
with prefix(env.activate):
local('python minecraftcodex/runtests/runtests.py')
with settings(hide('warnings', 'running', 'stdout', 'stderr'),
warn_only=True):
local('find . -type d -name __pycache__ -exec rm -rf {} \;',
capture=True)
def tox():
local('tox')
with settings(hide('warnings', 'running', 'stdout', 'stderr'),
warn_only=True):
local('find . -type d -name __pycache__ -exec rm -rf {} \;',
capture=True)