Mi primer acercamiento al lenguaje Python
Víctor Manuel Jáquez LealDesde 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.