Mostrar numero de version en django

En AxiaCore utilizamos subversion para llevar el control de versiones de los proyectos, junto a nuestro esquema de desarrollo ágil manejamos ciclos cortos de lanzamiento de nuevas funcionalidades, por eso para nosotros es necesario conocer el numero de revisión del SVN y publicarlo en un lugar fácilmente accesible para los usuarios, de tal forma que rápidamente nos puedan indicar la versión que están utilizando.

La aproximación inicial es tener un parámetro donde se indique un numero de versión de la aplicación, pero esta fue rápidamente descartada porque no es flexible y se tendría que cambiar la versión manualmente en cada nuevo cambio, así que decidimos manejar el numero de revisión del repositorio como el indicador de la versión. Ahora bien, se necesita una manera automática de obtener dicho numero y publicarlo en una plantilla HTML para verlo en la interfaz de usuario.

Lo resolvimos así:

Partimos de la plantilla donde básicamente django nos permite lo siguiente:

{% load version_tag %}
 
Version: {% get_version %}

Entonces cargamos un ‘custom tag’ que nos retorna la versión actual de la aplicación, el cual es:

#! /usr/bin/env python
# -*- coding: utf8 -*-
import subprocess
from django import template
from django.core.cache import cache
 
register = template.Library()
 
@register.simple_tag
def get_version():
    """
    Retorna el numero de version para la aplicacion y lo almacena en
    cache para evitar ser llamado multiples veces y mejorar el rendimiento
    de la aplicacion.
    """
    if not cache.get('version'):
        comando = 'svn info | grep Rev | head -1'
        try:
            proc = subprocess.Popen(comando, shell=True,
                stdout=subprocess.PIPE, stderr=subprocess.PIPE
            )
            line = proc.communicate()[0]
            version = line[line.find(" ")+1:].rstrip("\n")
        except:
            version = '---'
 
        tiempo = 24 * 60 * 60   #Tiempo en segundos de un dia
        cache.set('version', version, tiempo)
 
    return cache.get('version')

Este archivo (version_tag.py) debe estar dentro de una carpeta llamada ‘templatetags’ de alguna aplicación del proyecto.

Lo interesante de esta solución es:

  1. Obtiene el numero de versión por el comando ‘svn info’
  2. Reduce las llamadas al comando ubicando la información en cache durante un día
  3. Es totalmente desacoplado del proyecto y se puede reutilizar fácilmente
  4. Se puede adaptar para otros sistemas de control de versiones

Que les parece?

Tags: , ,

2 De respuestas a “Mostrar numero de version en django”

  1. panchicore 4 noviembre, 2009 en 8:23 PM #

    Huy, tenia pensado realizarlo, pero ahora solo sera plugearlo :D muchas gracias muy bueno. con respecto al comentario de la linea 13, no seria, aumentar el rendimiento? :)

  2. Camilo Nova 4 noviembre, 2009 en 9:56 PM #

    jeje si :D ya hize la correcion. Gracias

Deja una respuesta