-----BEGIN WEBFACTION INSTALL SCRIPT-----
#!/bin/env python2.4

"""
repoze.bfg 1.2 / ZODB 3.9 / Python 2.6

"autostart": not applicable
"extra info": leave empty
"""

import random
import sys

from webfaction.api import API

def create(api, app_dir, app_name, cronjob_cmd):
    app = api.create_app(app_name, 'custom_app_with_port')
    app_port = app['port']
    log_file = '/tmp/%s-%s.log' % (api.account['username'], app_name)
    # Create virtualenv
    cmd = """\
cd 
echo Installing virtualenv in %(app_dir)s > %(log_file)s
wget -nv \
http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.4.5.tar.gz \
>> %(log_file)s 2>&1
tar xzf virtualenv-1.4.5.tar.gz \
    >> %(log_file)s 2>&1
python2.6 virtualenv-1.4.5/virtualenv.py \
    --no-site-packages --unzip-setuptools %(app_dir)s \
    >> %(log_file)s 2>&1
""" % locals()

    # Install repoze.bfg
    cmd += """\
for dist in "repoze.bfg==1.2" "ZODB3<=3.9.99"; do
    echo Installing $dist >> %(log_file)s
    %(app_dir)s/bin/easy_install $dist >> %(log_file)s 2>&1
done
""" % locals()

    # Create repoze.bfg App
    cmd += """\
cd %(app_dir)s
echo Creating instance in `pwd` >> %(log_file)s
%(app_dir)s/bin/paster create \
    --template=bfg_zodb --no-interactive %(app_name)s >> %(log_file)s 2>&1
""" % locals()

    # Register repoze.bfg App as development egg
    cmd += """\
echo Registering %(app_name)s development egg >> %(log_file)s
cd %(app_dir)s/%(app_name)s
%(app_dir)s/bin/python setup.py develop
""" % locals()

    # Configure repoze.bfg
    cmd += """\
cd %(app_dir)s/%(app_name)s
sed -i 's/^port = 6543$/port = %(app_port)s/' %(app_name)s.ini
""" % locals()

    # Start Paste
    cmd += """\
%(cronjob_cmd)s
""" % locals()

    open('/tmp/%s-create-%s.sh' % (api.account['username'], app_name), 'w'
        ).write(cmd)
    api.system(cmd)

    # Create cronjob.
    cronjob = '%i * * * * %s' % (random.choice(range(0, 60)), cronjob_cmd)

    api.create_cronjob(cronjob)

    print app['id']

def delete(api, app_dir, app_name, cronjob_cmd):
    # Stop Paste
    cmd = cronjob_cmd.replace('--daemon', '--stop-daemon')
    api.system(cmd)

    api.delete_app(app_name)
    api.delete_cronjob(cronjob_cmd)

if __name__ == '__main__':
    action, username, password, server, app_name, autostart, extra_info = \
        sys.argv[1:]
    api = API(username, password, server)
    app_dir = '%s/webapps/%s' % (api.account['home_dir'], app_name)

    cronjob_cmd = "%s/bin/paster serve --daemon %s.ini"
    cronjob_cmd %= (app_dir, app_name)

    # Validate app name.
    if app_name == 'repoze.bfg':
        sys.exit('Invalid app name: repoze.bfg')

    locals()[action](api, app_dir, app_name, cronjob_cmd)
-----END WEBFACTION INSTALL SCRIPT-----
