[Python-es] Dudas para la publicación (GPL) de una herramienta python de reporting

Francesc Alted faltet en pytables.org
Jue Dic 16 13:26:50 CET 2010


A Thursday 16 December 2010 12:26:48 Alberto Curro escrigué:
> Hola a todos,
> 
>   Antes de todo, disculpad por el tocho, pero creo que esto puede ser
> de interés...
> 
>   Allá por el 2005 tenía una pequeña consultora freelance con un
> compañero, y por necesidades de algunos clientes decidimos diseñar
> una herramienta de generación e impresión de informes. Fue nuestro
> primer desarrollo en este lenguaje (de hecho aprendimos python con
> ella :)), para python 2.3, creo recordar, y dadas esas
> circunstancias, como comprendereis, la calidad y limpieza del código
> ni su diseño no eran ninguna maravilla :)

Vaya, que casualidad.  Justamente otro compañero y yo hicimos 
básicamente lo mismo, pero en el 2008 :)

>   La estuve manteniendo, depurando cosillas y mejoras hasta
> aproximadamente principios del 2007, que se abandonó porque estos
> clientes implementaron otro software que ya traía su propio gestor
> de informes; por simple tema de falta de tiempo, y pese a que la
> solución tenía muchísimas posibilidades, la abandoné y ha quedado
> almacenada en mi SVN todo este tiempo, hasta hace un par de semanas
> que, haciendo limpieza de mis servidores personales, me encontré el
> código, y como creo que tiene muchas posibilidades con un poco de
> trabajo en ella, he hablado con mi antiguo compañero para publicarlo
> como GPL, con él como coautor, claro, y no ha puesto mayor problema
> al respecto.
> 
>   Me surgen entonces las siguientes dudas:
> 
>   - Licencia: ¿qué problemas pueden surgir? Estoy desconectado desde
> hace un tiempo del mundillo del software libre, y ya no me acuerdo
> si alguno de los módulos usados (4Suite, Reportlab) podría afectar
> en la publicación de la solución en GPL.

Nosotros elegimos GPL ya que dependiamos de una libreria GPL (creo que 
era pyinotify).  Mi consejo es que, debido a la naturaleza viral de GPL 
la evites si puedes (BSD o MIT van muy bien: sencillas y no pretenden 
imponer la libertad).  Sin embargo, hay que decir que mucha gente se 
siente a gusto con la GPL y la elige a propósito (no es mi caso).

>   - Tecnología: ¿hay soluciones mejores, o más eficientes, para el
> procesamiento de los XML, XSLT, o mejores que reportlab?

Hombre, hay infinitas :-)  Nosotros por ejemplo no usamos XML para nada.  
Nos inventamos nuestro propio sistema de plantillas para generar los 
PDFs a partir de ficheros texto y un fichero de control (o formato) 
parecido a:

    [task]
    doctype = Factura amb copia
    input_encoding = cp850
    output_name = Factura #123
    ncopies = 2
    host = dept-comptabilitat
    barcode = 123a20080619

    [copy]
    dir = /el/meu/directori

    [email]
    from = pdflistings en exemple.com
    to = paco en ferrer.es
    subject = Factura #123
    bcc = factures en exemple.com

Por supuesto, se podian definir plantillas en PDF que se superinponian 
al listado definitivo.  Como ves, no hay XML, así que va como un tiro.

>   - Repositorio: ¿qué forja debería usar para publicarlo?

No infinitas, pero muchas, así que tendrás que elegir una.  Yo 
últimamente me he decantado por github.com (aunque eso te obliga a usar 
git como controlador de versiones).

>   A nivel técnico, el programa habría que revisarlo, dándole
> posibilidades en cuanto a parámetros de entrada, posibles salidas,
> una buena refactorización y puesta al día del código (os recuerdo
> que fue nuestro primer software python, aprendimos python con él...)
> etc., dado que ahora mismo lo que hace es un proceso de 1 única vía:
> coge xml -> transforma XSL -> genera RML -> convierte con reportlab
> -> almacena / imprime.

Aparte de esto, el nuestro también envia por e-mail y fax (aparte de 
otros posibles métodos definidos por el usuario).

>   La solución en sí es muy sencilla: coge un fichero XML con datos,
> lo procesa mediante XSLT, genera un documento RML y lo procesa con
> Reportlab para generar el PDF final (y enviarlo a impresora o
> guardarlo). Aparte de reportlab, se usaba 4Suite para el procesado
> de XML, el motor XSLT y, por supuesto, Reportlab.
> 
>   Sin embargo, a nivel características era muy potente gracias a
> Reportlab: se podían generar auténticas "virguerías" a nivel de
> informes, con la complejidad que se requiriese; sólo deciros que
> fuimos capaces de conseguir generar, punto por punto, línea por
> línea, imagen por imagen, todos los tipos de informes usados por 3
> empresas de distintos tamaños (hablamos de facturas, informes
> internos, albaranes, etiquetado para logística, etc.) eliminando el
> uso de los formularios pre-impresos que venían usando, sin que se
> notase el cambio.

Ahi el nuestro no es tan flexible.  Simplemente se pasa texto a PDF 
diciéndole el tamaño del papel y el número de filas y columnas que iban 
a caber.  Simple, pero efectivo.

>   Eso sí, el mayor problema (y donde se consumía el tiempo) era en la
> parte del diseño de las plantillas XSL y RML, que no habíamos
> escrito un software de diseño de las plantillas, y se hacía a mano
> :)  Por otro lado, no era una maravilla en velocidad: un informe
> normal tardaba alrededor de 1-1.5 segundos en estar en pantalla, un
> informe muy largo (más de 20 páginas) o muy complejo... pues
> imaginaos. La parte más lenta era la de transformación XML/XSLT
> (incluido el parseo y validación del XML); después de esto iba
> bastante bien, aunque reportlab en aquel momento no eran tampoco la
> panacea en velocidad.

Más lento parseando XML que el propio reportlab renderizando?  Creo que 
se me han ido las ganas de trabajar con XML de por vida :-)  Recuerdo 
claramente que nuestro cuello de botella era el reportlab, y se podian 
alcanzar velocidades de varios informes (de entre 1 y 10 pags) por 
segundo.

>    Bueno, creo que ya me he explayado bastante por ahora, para lo que
> eran unas simples preguntas; cualquier recomendación, consejo,
> interés en el proyecto, o preguntas, aquí me tenéis. No os cortéis
> :)

Ya ves que compartimos sinergias :-)  Nuestro paquete es libre, pero no 
está disponible en la red básicamente por el coste de crear el 
repositorio y hacer una página medio decente explicando el asunto 
(cuesta bastante tiempo, y si nadie te lo subvenciona pues...).  De 
todas maneras, si quieres echarle un vistazo, puedes descargar el 
paquete de:

http://www.pytables.org/temporal/pdflistings-0.6.1.dev.tar.gz

Saludos,

-- 
Francesc Alted


Más información sobre la lista de distribución Python-es