Install script for MediaWiki-1.8.2

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

"""
MediaWiki 1.8.2

Requirements:
- 1 MySQL database.

Notes:
- The database will be named after your application.
- The default username and password are "WikiSysop" and "Password".

"autostart": not applicable
"extra info": enter the name of the wiki followed by the URL path of the wiki. For instance: 
MyWiki /wiki
or:
'My wiki' /
"""

import re
import random
import string
import sys
import xmlrpclib

def arg_split(arg):
    new_args = []
    while True:
        arg = arg.strip()
        if arg == '':
            break
        if (arg[0] != '"') and (arg[0] != "'"):
            new_arg = re.split(' ', arg)[0]
            arg = re.sub('^%s' % new_arg, '', arg)
        else:
            separator = arg[0]
            arg = arg[1:]
            new_arg = re.split(separator, arg)[0]
            arg = re.sub('^%s%s' % (new_arg, separator), '', arg)
        new_args.append(new_arg)
        continue
    return new_args

def create(account, app_name, autostart, extra_info, password, server, session_id, username):
    # Parse and validate arguments.
    db_name = db_user = '%s_%s' % (username, app_name)
    try:
        name, path = arg_split(extra_info)
    except ValueError:
        print 'Extra info is invalid.'
        return
    name, path = name.strip(), path.strip()
    if path == '/':
        path = ''
    name = re.sub('"', r'\"', name)
    # Create application and database.
    app = server.create_app(session_id, app_name, 'static', False, '')
    server.create_db(session_id, db_name, 'mysql', password)
    # Download files.
    cmd = ''
    cmd += 'rm index.html;'
    cmd += 'wget http://wiki.webfaction.com/attachment/wiki/MediaWikiFiles/mediawiki-1.8.2.zip?format=raw > /dev/null 2>&1;'
    cmd += 'unzip mediawiki-1.8.2.zip?format=raw > /dev/null 2>&1;'
    cmd += 'rm mediawiki-1.8.2.zip?format=raw;'
    server.system(session_id, cmd)
    # Edit configuration.
    characters = string.lowercase + string.digits
    proxy_key = ''
    for i in range(1, 65):
        proxy_key += random.choice(characters)
    server.replace_in_file(session_id, 'LocalSettings.php',
        ('$wgDBname           = "";', '$wgDBname           = "%s";' % db_name),
        ('$wgDBpassword       = "";', '$wgDBpassword       = "%s";' % password),
        ('$wgDBuser           = "";', '$wgDBuser           = "%s";' % db_user),
        ('$wgProxyKey = "";',         '$wgProxyKey = "%s";'         % proxy_key),
        ('$wgScriptPath       = "";', '$wgScriptPath       = "%s";' % path),
        ('$wgSitename         = "";', '$wgSitename         = "%s";' % name)
    )
    # Populate database.
    cmd = ''
    cmd += 'mysql --password=%s --user=%s %s < schema.sql;' % (password, db_user, db_name)
    cmd += 'rm schema.sql;'
    server.system(session_id, cmd)
    print app['id']

def delete(account, app_name, autostart, extra_info, password, server, session_id, username):
    # Delete application and database.
    server.delete_app(session_id, app_name)
    server.delete_db(session_id, '%s_%s' % (username, app_name), 'mysql')

if __name__ == '__main__':
    action, username, password, machine, app_name, autostart, extra_info = sys.argv[1:]
    server = xmlrpclib.ServerProxy('https://api.webfaction.com/')
    session_id, account = server.login(username, password, machine)
    func = locals()[action]
    func(account, app_name, autostart, extra_info, password, server, session_id, username)
-----END WEBFACTION INSTALL SCRIPT-----