Mostrar numero de version en django

CN Camilo Nova Camilo Nova

Camilo Nova

CEO
1 min read.

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?


Written by Camilo Nova

CN Camilo Nova Camilo Nova

As the Axiacore CEO, Camilo writes about the intersection of technology, design, and business. With a strategic mindset and a deep understanding of the industry, he is dedicated to helping companies grow.

Newsletter

Subscribe to our newsletter:

Read more

Django Templates Scribes

Plantillas para Django en el editor Scribes Python: django.xml Plantillas: django_template.xmlEspero les sean utiles. Saludos

1 min read.

Build Once. Own Forever.