Metaprogramación en Python

Python está bárbaro, es sencillo y todo… siempre leí que era muy fácil hacer metaprogramming con él, pero el problema es que uno haga metaprogramming de una forma fácil en su mente. :-P Veamos, la función getattr(), disponible en el módulo __builtins__ (o sea, disponible en todo momento), me permite cambiar esto: def get_transportistas_custodia(id_custodia): """ Devuelvo todos los transportistas que están relacionados con una custodia """ c = Custodia.objects.get(id=1) # Necesito el conjunto de transportistas de la custodia return c.transportistacustodia_set.all() def get_asegurados_custodia(id_custodia): """ Devuelvo todos los asegurados que están relacionados con una custodia """ ... (lo malo es que tengo que hacer una función por cada tipo de empresa relacionada con custodia). ...

August 4, 2007 · 3 min · Marcelo

Chusmeando SQLObject - Parte II

Continuando el post de ayer, otra desventaja del sistema de persistencia de Django es que no soporta atributos en relaciones “Muchos a Muchos”. Un caso podría ser Usuario <–> Rol, donde un Usuario puede tener varios Roles y a su vez un Rol ser referenciado por varios usuarios; además, necesito almacenar si alguna combinación usuario<->rol está activa o no. El atributo booleano “activo” sería una propiedad por cada Usuario<->Rol en particular, y esto es lo que no soporta Django con su ManyToManyField. ...

July 11, 2007 · 2 min · Marcelo

Chusmeando SQLObject - Parte I

Aprovechando que el ORM en Python es noticia (ya que Canonical liberó Storm)… comento un par de desventajas del framework para acceder a BDs desde Django y cómo las soluciona SQLObject (específicamente no lo usé, pero estuve leyendo algo…) Al momento de laburar con Django y la forma en que maneja la BD (definición de los modelos) nos encontramos dos limitaciones graves: No soporte de herencia entre tablas. Es decir, si yo desde mi “mundo real” tengo que representar: class Transporte(): modelo = '' largo = '' ancho = '' patente = '' class Auto(Vehiculo): tiene_baul = '' class Camion(Vehiculo): tiene_semi = '' No puedo representar esto en Django, ya que no soporta herencia. Por lo tanto, se puede “simular” la herencia usando relaciones “uno a uno” o copiando y pegando. Con la primera opción caímos en varios problemas, así que tuvimos que “copiar y pegar” las propiedades que deberían haber sido heredadas. ...

July 10, 2007 · 3 min · Marcelo

Artículos de Python + Glade en Español

Para aquell@s gentes que están incursionando en el mundo de la programación, el lenguaje Python es ideal para aprender. Y es normal que las primeras cosas que se quieran hacer sean ventanas con botones, menúes y demás. GTK es una librería que permite hacer eso para varias plataformas, como Windows, Linux, Solaris y Mac OSX (con problemas de integración, pero funciona). Por último, Glade es un programa que sirve para crear las ventanas+botones+menúes+etc. de forma gráfica, “dibujando”, arrastrando y pegando componentes en una suerte de “vista de diseño” (al mejor estilo Visual Basic o Delphi). ...

April 9, 2007 · 1 min · Marcelo

Complejidad Ciclomática de Código Python

Leyendo un blog por la web, me entero de qué es la Complejidad Ciclomática de un código fuente (uno de los taantas métricas que hay para analizar la calidad y complejidad del código), y que este muchacho posteó un script para poder analizar la complejidad ciclomática de un paquete de fuentes python. Marcelo

March 31, 2007 · 1 min · Marcelo

Python como lenguaje &quot;Enterprise-Ready&quot;

Hace unos días ví esta noticia sobre el uso de Python en la industria de la aviación. Resulta que ITA Software vende soluciones software para aerolíneas, como Air Canada. El entrevistado (Dan Kelley) comenta que si bien tienen una mezcla de lenguajes y tecnologías, destaca que Python + Twisted les permitió hacer un framework de monitorización de alta performance para coordinar la venta de asientos de vuelo desde múltiples orígenes de datos (en tiempo real, claro). ...

March 21, 2007 · 2 min · Marcelo

Servidor de Logs Remotos - Syslog-ng

Syslog-ng es un demonio de syslog infinitamente más flexible que el syslog “común” (tomado de BSD). Permite aplicar filtros, clasificar de acuerdo a distintos orígenes y enviar a diferentes destinos los logs. Para gestionar un servidor de logs, es muy fácil. Sólo fue cuestión de leer esta guia y darle “apt-get install syslog-ng” y listo. Esto reemplaza al syslog anterior, pero la configuración del syslog-ng es la misma (en cuanto a funcionalidad, no en cuanto a sintaxis) que la de un debian recién instalado. ...

October 11, 2006 · 2 min · Marcelo