Grupo Linuxero del Bajío

Mi primer acercamiento al lenguaje Python

Víctor Manuel Jáquez Leal

Desde que comencé a programar en Linux, me tuve que decidir por un lenguaje de guiones (script) que me facilitara la vida de administrador. Desde un principio opté por Perl. Sin embargo es insoslayable el crecimiento en el uso de Python, sobre todo en desarrollos gráficos y web. Por lo tanto, cada día aumentaba mi curiosidad por Python.

Actualmente estoy trabajando en un proyecto muy interesante: SuCorreo2, en el cual he tenido que hacer varios guiones de migración. De manera automática hice casi todos esos guiones en Perl. Pero ayer por la noche, en la que me encontraba harto de mi rutina, me aventuré con Python.

El guión que necesitaba era muy simple: hacer una búsqueda en una rama de mi LDAP; de cada nodo encontrado leer un atributo y aplicarle una expresión regular para extraer un valor. Luego este valor se insertaría en una tabla en PostgreSQL.

Lo primero que hice fue buscar un módulo de Python que me permitiera interactuar con PostgreSQL. Instalé el RPM postgresql-python. Pero resulta que yo tengo dos versiones de Python instaladas: la 1.5 y la 2.2. Obviamente yo quería trabajar con la 2.2, sin embargo el RPM estaba instalado únicamente para la 1.5. En ese momento cómo extrañé la existencia de un CPAN para Python. Estar buscando módulos entre Google y el sitio de Python me resultó realmente abrumador.

Finalmente bajé el PyGreSQL, que resultó ser el mismo que el RPM de postgresql-python. Por cierto, había que olvidar la existencia de un Makefile o algo así, se tenía que compilar a patín y copiar en el site_python debido.

El módulo para LDAP fue simple, solo hay uno: python-ldap y fue bueno encontrar un RPM ya listo para él.

Una ves teniendo ambos instalados, me puse ojear la documentación proveída. Se veía simple. Hice un par de pruebas tontas y todo se veía bien (a excepción de que el PyGreSQL no podía conectarse con el PostgreSQL a través del socket unix, así que tuve que levantarlo con inet socket y dar los permisos necesarios en el pg_hba.conf).

Hoy por la mañana, en un aliento de inspiración, me senté a escribir el programa que a la primer corrida jaló como esperaba. He aquí el código para que vean lo fácil y elegante que es el código en Python, mi primer guión en Python:

import _pg
import ldap
import re

db = _pg.connect('sucorreo', 'localhost', -1, '', '', 'sucorreo')
l = ldap.open('localhost')
l.simple_bind_s('cn=Manager,dc=sucorreo,dc=com', 'xxxx')
result = l.search_s('ou=mailservice,dc=sucorreo,dc=com', ldap.SCOPE_ONELEVEL, '(objectclass=organizationalUnit)')
for entry in result:
    domain = entry[1]['ou'][0]
    desc = entry[1]['description'][0]
    size = re.search('((d+))$', desc)
    sql = 'INSERT INTO domains VALUES ('' + domain + '', ' + size.group(1) + ')'
    db.query(sql)

print db.query("SELECT * FROM domains")

l.unbind_s
db.close

Espero con esto alentarles a programar un poco en Python. Por lo pronto seguiré leyendo los bindings para Gnome2 y Bonobo que se ven harto interesantes.