IronPython
3:53 | Author: Unknown

Tecnologías

IronPython /Python / .Net / Regular Expressions

Lo mejor de dos mundos ?2004-9-4_En_el_barco_con_los_amigos_032[1]

No se si estoy en lo correcto, hace un tiempo me puse como meta aprender Python, sólo creo que lo hice por ser fanático de los Monty Python, (acá es donde pongo una lista de gags históricos y se acabó el blog de tecnología).  Pero no, veo que existen muchos fanáticos, y poco a poco me voy dando cuenta porque.

Python Rules

Creo que para empezar tomé una mala decisión. El c# boy pensó ("El que piensa pierde!" Les Luthiers), dado que tenés un conocimiento importante del framework de .Net, porque no usas IronPython y te allanás muchos caminos? Sin embargo la historia no es tan fácil como lo pensaba. Y es acá cuando descubro el IDLE, el editor que viene en la versión de Python. Y aunque viniendo del "glorioso" Visual Studio y el ReSharper, etc. Me encuentro que este IDE recontra simple es lo que más me está ayudando para aprender Python.

Ejemplo

Como siempre que empiezo con algún lenguaje nuevo busqué una necesidad real (no me gusta empezar con vueltas de rosca a cosas hechas por mi mil veces). Y a embarrarse.
El problema es simple, pisar los AssemblyVersion de un producto con múltiples soluciones .Net para que reflejen una única versión.
Esto me obliga a: entender el manejo del file system, manejo de archivos, expresiones regulares y algo de cálculo (la versión es calculada)

  • Calcular versión

Para el cálculo de versión simplemente tomamos la major  y minor  (vienen provistas) y le calculamos la build version que es la cantidad de meses sumados los días del mes. Importando las librerías de .Net es muy sencillo.

 image
En versión Python estándar.
>>> import datetime
>>> dia = datetime.datetime.today()
>>> versionMinor = dia.year * 12 + dia.month * 100 + dia.day

  • Recorrer estructura de carpetas

>>> import os
>>> for root, dirs, files in os.walk('./mydir'):
                      for file in [f for f in files if f == "AssemblyInfo.cs":

Bonito!

  • Modificar versión

Para esto cargamos el archivo, y con una expresión regular cambiamos la versión por la calculada y reescribimos el archivo.

>>> import re
>>> for root, dirs, files in os.walk('d:/temp'):
                      for file in [f for f in files if f == "AssemblyInfo.cs"]:
                                 pattern = '(AssemblyVersion\(\"(\d*|\*)\.(\d*|\*)\.(\d*|\*)\.(\d*|\*)\"\))'
                                 arch = open(file)
                                 bytes = arch.read()
                                 print re.search(pattern, bytes)
                                 # replace
                                arch.close()

Código compacto, bastante legible. Y dado que me metí con las expresiones regulares viene cita.

Some people, when confronted with a problem, think "I know, I'll use regular expressions."
Now they have two problems.

−−Jamie Zawinski, in comp.emacs.xemacs

Lo que sigue

En la próxima termino el ejemplo y por otro lado voy a ver un poco los frameworks que podemos usar como por ejemplo Django.

This entry was posted on 3:53 and is filed under , , , . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.