Instalar WordPress con Python PARTE 2

En un post anterior explicábamos algunas funciones de un script de instalación de WordPress que hice tiempo atrás, hoy seguiremos explicando las distintas funciones que nos encontraremos en ese script y al final de la tarde lo dejaré publicado también en el GIT. Ahora explicaremos las conexiones a la base de datos y buscar y reemplazar cadenas con Python. En el primer post no dejé los imports que estaba usando para el script, así que los pongo a continuación:

import sys
import os
import fileinput
import getpass
import MySQLdb
from urllib import urlretrieve, urlcleanup
import tarfile
import webbrowser

Comencemos por las conexiones a la base de datos, parte fundamental del script para poder crear la base de datos, el usuario y asignarle los permisos adecuados. Para ello uso las librerías “MySQLdb“, para instalarlas en Linux Debian la mayoría de librerías vienen en los repositorios bajo la nomenclatura “python-nombre_de_librería“, podéis hacer una búsqueda rápida con el comando “apt-cache search nombreabuscar” e instalar con “apt-get install” lo que necesitéis.

Para manejar la base de datos he creado tres funciones: crear la base de datos, crear el usuario y asignar los permisos al usuario creado. Para crear la base de datos creamos el objeto “bd” al que le asignamos el objeto MySQLdb.connect, después de esto inicializamos el cursor y ejecutamos la consulta CREATE DATABASE en la base de datos, aquí abajo os dejo el código fuente de la función:

def createdb(pwsql, nombre):
    try:
        bd = MySQLdb.connect(host="localhost",
                     user="root",
                      passwd=pwsql,
                      db="prueba1")
        cursor = bd.cursor()
        cursor.execute("CREATE DATABASE " + nombre)
        #data2 = cursor.fetchone()
        #print ("====> %s" % data2)
        print ("====> Base de datos OK")
        bd.close()
    except MySQLdb.ProgrammingError, e:
        print ("====> ERROR: Base de datos ya existe")
        print ("====> " + e)

En la función de creación de usuario realizamos el mismo procedimiento que al crear la base de datos, solo que la consulta es distinta, aquí os dejo el source:

def createuser(pwsql, nombreuser):
    try:
        bd = MySQLdb.connect(host="localhost",
                     user="root",
                      passwd=pwsql,
                      db="prueba1")
        cursor = bd.cursor()
        cursor.execute("CREATE USER " + nombreuser)
        #data2 = cursor.fetchone()
        print ("==========================================================")
        print ("====> Creacion de usuario OK")
        #print (data2)
        bd.close()
    except MySQLdb.OperationalError:
        print ("====> ERROR: Usuario existente")
        print ("==========================================================")

Para buscar y reemplazar cadenas en ficheros he usado las librerías de “fileinput” para poder abrir el fichero con Python y luego simplemente busco línea a línea en busca de la cadena que quiero reemplazar, precisamente una de las mayores ventajas de python es poder realizar estas funciones con pocas líneas de código:

def replaceAll(file, searchExp, replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp, replaceExp)
        sys.stdout.write(line)

Por último, ¿Cómo comprobamos si estamos ejecutando el script como root? con Python es muy sencillo, preguntamos al arrancar el script por los permisos con os.geteuid() y si no tenemos permiso de administrador el script se rompe mostrando un mensaje, si no, inicializa el contador y lanza la función main()

if __name__ == "__main__":
    if not os.geteuid() == 0:
        sys.exit('Este programa debe ejecutarse como root')
    else:
        global con
        con = 0
        main()

El script lo iré mejorando más adelante y redactaré otro post cuando tenga suficientes mejoras, mientras tanto lo tenéis publicado en el GIT para que podáis descargarlo, retocarlo o lo que queráis.