Implementamos tecnologia y es asi como lo hacemos

Mostrar numero de version en django

Escrito el Noviembre 3, 2009 a las 8:31 AM por Camilo Nova

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:

1
2
{% load version_tag %}
<p>Version: {% get_version %}</p>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /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?

Bookmark and Share

2 Responses to “Mostrar numero de version en django”

  1. panchicore Says:
    Noviembre 4th, 2009 at 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 Says:
    Noviembre 4th, 2009 at 9:56 PM

    jeje si :D ya hize la correcion. Gracias

Deja un comentario

AxiaCore Blog

Publicidad

Etiquetas

Nosotros Leemos

Comentarios Recientes:

  • NMarthacecilia: Hola .yo tambien lo conoci en un momento pequeño ,en la fundación molano, es de mi interes volver a...
  • Jorge Chávez: Algo que me ha interesado en los últimos días es intentar agregar nuevos widgets en el filtro, que...
  • Jorge Chávez: Excelente post! Sin duda los filtros son un problema con la falta de documentación oficial, pero en lo...
  • CBTIS_102: pzz la vdd python es un programa muy completo y facil, pero a veces los que enseñan python son pesimos,...
  • katerine: CORIDAL SALUDO, ES HERMOSA ESTA LABOR. ME ENCANTARIA SABER LOS DATOS DE LA FUNDACION PARA ACERCARME A...

Enlaces Recientes:

Archivo

Admin