Febrero 05, 2008

Más Python: ConfigParser

Poco a poco voy aprendiendo más cositas de Python. La verdad es que sigo impresionado por la facilidad y rapidez de desarrollo en este lenguaje. Me gusta mucho la cantidad de clases y paquetes ya existentes que facilitan las tareas tediosas. Aquí tenéis la documentación oficial de las librerías de clases existentes en Python.

Como pretendo seguir avanzando poco a poco en mi herramienta de gestión de blogs en modo texto, hoy he decidido que, para no tener que escribir el usuario, la contraseña y la dirección de nuestro wordpress cada vez, ésta podría estar guardada en un fichero de configuración simple en $HOME/.wp.py.conf (por ejemplo). De esta forma podríamos tener bloques como este en la configuración:
[BlogName]

User=foo

Pass=bar

Server=http://whatever.com

[BlogName2]

User=foo2
Pass=bar2
Server2=http://otherwordpress.org

...
Y para postear será tan fácil como hacer algo así:
./wp.py --blog=”BlogName” –title=”lo que quieras” --post=”fooo... bar...”
Para esto he encontrado la clase ConfigParser. Nos permite parsear este tipo de ficheros de una manera muy simple. He escrito este pequeño programita que muestra un ejemplo:

#!/usr/bin/python

import os
import sys
import ConfigParser

class configFile:
    """
    Simple Configurator File Parser.
    Developed for use with my WordPress (wp.py) blog manager application
    The config file must be in $HOME/.wp.conf and must have this formar:
    [BlogName]
    User=foo
    Pass=bar
    Server=http://whatever.com
    [BlogName2]
    ...
    And so on
    Available Methods:
        getUSer -> returns the User field of a section
        getPass -> returns the Pass field of a section
        getServer -> returns the Server field of a section
    """

    _confFile = ""
    _section = ""

    def __init__(self, section):
        """
        Class constructor.
        Params :
            section : a string with the section name (blog name) of the conf file
        """
        path = os.path.expanduser("~")
        self._confFile = ConfigParser.ConfigParser();
        try:
            self._confFile.read(path + "/.wp.py.conf")
        except err:
            print "Error: " + err.__str__()
        self._section = section

    def getUser(self):
        """
        returns the User field of a section
        """
        user = ""
        try:
            user = self._confFile.get(self._section, "User")
        except ConfigParser.NoSectionError:
            print "Section " + self._section + " doesn't exists in conf file"
        except err:
            print "Error: " + err.__str__()

        return user

    def getPass(self):
        """
        returns the Pass field of a section
        """
        passwd = ""
        try:
            passwd = self._confFile.get(self._section, "Pass")
        except ConfigParser.NoSectionError:
            print "Section " + self._section + " doesn't exists in conf file"
        except err:
            print "Error: " + err.__str__()

        return passwd 

    def getServer(self):
        """
        returns the Server field of a section
        """
        server = ""
        try:
            server = self._confFile.get(self._section, "Server")
        except ConfigParser.NoSectionError:
            print "Section " + self._section + " doesn't exists in conf file"
        except err:
            print "Error: " + err.__str__()

        return server

def main():
    conf = configFile(sys.argv[1])
    print conf.getUser()
    print conf.getPass()
    print conf.getServer()

if __name__ == "__main__":
    main()

Bastante fácil, ¿verdad? En cuanto integre esto con mi wp.py quedará de miedo. Además he añadido la opción a mi programita de que el cuerpo del post lo lea de la entrada estándar si yo quiero (stdin) así que en breve podré postear salidas de comandos directamente... algo como esto:

ps | ./wp.py –blog=”miblog” --title=”un ps” --post=”stdin”

Moooolaaaaa.... Os dejo aquí el pequeño ejemplo.
Saludos


Escrito por Juanjo Escribano a las Febrero 5, 2008 09:11 PM
Comentarios

Estas on fire eh? Cuando lo tengas completo cuelga el codigo que le echare un vistazo!

Saludos!

Escrito por Sergio a las Febrero 6, 2008 04:16 PM
Escribir un comentario









¿Recordar informacion personal?