[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