Django: Desactivar migraciones en tests

A veces cuando ejecutamos tests en Django, automáticamente estos ejecutan las migraciones necesarias para construir una base de datos completa, pero estas migraciones bien sea por su número o variaciones pueden tardar mucho más de lo deseado en especial cuando los tests no necesitan migrar data porque se construyen en una base de datos ficticia. Para ello, añadimos una clase llamada DisableMigrations, que puede estar o bien en el settings o (recomendablemente) en un test.py para que no “embasuremos” settings con clases. La clase sería:

class DisableMigrations(object):
def __contains__(self, item):
return True
def __getitem__(self, item):
return "notmigrations"

Mientras que en el settings.py añadimos una condicional para que sólo desactive las migraciones cuando se ejecuten los tests:

# Si tenemos la clase en app/test.py, la importamos
from app.test import DisableMigrations
if 'test' in sys.argv[1:]:
MIGRATION_MODULES = DisableMigrations()

De esta forma tenemos lista la desactivación de las migraciones cuando se ejecutan tests!

DIFFPDF

La aplicación diffpdf es una aplicación libre y gráfica que te permite importar 2 archivos PDF por separado y luego hacer una comparación bien sea entre palabras, caracteres o apariencias.

Si la abrimos por menú, veremos algo como la siguiente imagen:

Diffpdf

También puede invocarse la comparación a través de la terminal para los amantes de la consola como:

diffpdf archivo1.pdf archivo2.pdf

Instalación

Se puede instalar por consola a través del siguiente comando:

aptitude install diffpdf

O también por el synaptic o centro de software bajo su nombre: diffpdf.

Espero sea de utilidad para todos.

Cómo hacer que los management command de Django envíe un correo a los admins con reporte de error

Yo suelo usar los management command personalizados de Django para hacer diferentes tareas en la aplicación web, la mayoría de las veces con un crontab ejecuta esos comandos. El problema es que cuando usted está utilizando una tarea de cron, usted no conseguirá la hermosa email error django cuando algo va mal.

django-error-email

Por supuesto, puede registrar todos los comandos se ejecutan y los trabajos de cron que tiene en los archivos, pero el problema es que a veces hay que ser notificado al instante a través de su correo electrónico, así que aquí está cómo hacer que los comandos de administración de Django te envían el correo electrónico de errores.

Entendiendo cómo funciona el envío de correos de errores de Django

Si revisa la documentación de logging de Django se encuentra que se ha incorporado un controlador denominado AdminEmailHandler este controlador envía un correo electrónico a los administradores del sitio para cada mensaje de registro que recibe.

Así que, básicamente todo lo que tiene que hacer es decirle a sus comandos de django para registrar los errores mediante un registrador con ese controlador, y recibirá los correos electrónicos.

Para ello define un registrador en su settings.py:


LOGGING = {
#OTHER OPTIONS
'filters': {
#OTHER FILTERS
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
#OTHER HANDLERS
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True
}
},
'loggers': {
#OTHER LOGGERS
'management_commands': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}

Y después de eso en sus comandos personalizados los log de errores que se enfrenta con el registrador ha definido:

from django.utils.log import getLogger
from django.core.management.base import BaseCommand
import sys

logger = getLogger(‘management_commands’)

class Command(BaseCommand):
def handle(self, *args, **options):
try:
#DO YOUR STUFF HERE
except Exception as e:
logger.error(‘Admin Command Error: %s’, ‘ ‘.join(sys.argv), exc_info=sys.exc_info())
#Raise the exception again so it gets logged in standard error also.
raise e

Actuvando el logger para todos los comandos en una configuración

También puedes hacer que todos los comandos (personalizados o no), envíen correos con reporte de error editando el archivo manage.py casi de la misma forma en la que editamos el comando. Más o menos de la siguiente manera:


from django.utils.log import getLogger
import sys

logger = getLogger(‘management_commands’)

#Wrap this line with a try-catch execute_from_command_line(sys.argv)
try:
execute_from_command_line(sys.argv)
except Exception as e:
logger.error(‘Admin Command Error: %s’, ‘ ‘.join(sys.argv), exc_info=sys.exc_info())
raise e

De esta forma podrás recibir los reportes de error para los management command desde Django.

Publicación original: http://mpcabd.igeex.biz/make-django-management-commands-send-errors-email-admins/

Cambiando fechas de los commits

A veces por mala configuración de nuestra pc, hacemos un commit y lo subimos al servidor con una fecha no acorde con la habitual. Pues, me sucedió en estos días, y he tenido que dar un par de vueltas para encontrar con la solución. Al final con un par de comandos se puede hacer de forma sencilla.

Encontremos la huella del commit

La huella del commit es un serial hexadecimal que identifica cada cambio de código que son fijados por los desarrolladores. Para ver el histórico de hash con los títulos en cada uno debemos ejecutar:

git log

Con esto podremos revisar los títulos de los commits y revisar cuál es el hash que identifica nuestro commit.

Escribamos un script

Se puede hacer directamente en la terminal, pero para observar mejor lo que hacemos, escribamos un archivo script.sh con el siguiente contenido:


git filter-branch --env-filter \
'if [ $GIT_COMMIT = ]
then
export GIT_AUTHOR_DATE=" :: "
export GIT_COMMITTER_DATE=" ::
"
fi'

Los datos como el día, mes y demás abreviaturas son en inglés, y en mi caso por ser de Venezuela, mi zona horaria será VET, por lo que mi script quedó de la siguiente forma:


git filter-branch --env-filter \
'if [ $GIT_COMMIT = f84dde02451cde1a72b4b401d2967f53df232ced ]
then
export GIT_AUTHOR_DATE="Tue Sep 2 01:01:01 2015 VET"
export GIT_COMMITTER_DATE="Tue Sep 2 01:01:01 2015 -VET"
fi'

Guardamos el archivo script.sh y salimos.

Ejecutando el script

El script se puede ejecutar de distintas maneras y todas deben ser sin permisos root. Para ello se pueden ejecutar de las siguientes formas:
sh script.sh
chmod +x script.sh; ./script.sh
chmod +x script.sh; . script.sh
chmod +x script.sh; source script.sh

Todas son válidas, pero la más sencilla es la primera.

¿Todo listo?

Sólo resta subir los commits, y eliminar el archivo, por lo que se puede ejecutar los siguientes comandos:
git pull # Actualizaremos nuestro repositorio
git push # Subiremos los cambios fijados
rm script.sh # Eliminaremos el script que acabamos de crear

Listo, ya deberíamos tener en nuestro servidor el commit con la hora/fecha corregida.

Usando el calendario de Google Calendar en icedove/thunderbid

En este artículo se describe cómo puedes utilizar los calendarios de Google junto con el complemento Lightning de Thunderbird. Puedes utilizar los calendarios de Google de dos formas: puedes tener acceso de solo lectura a los calendarios públicos o puedes utilizar un calendario bidireccional que te permita realizar tanto operaciones de lectura como de escritura.

Acceso de lectura

Si sólo necesitas acceso de lectura a un calendario de Google, puedes utilizar el enlace del archivo ICS público proporcionado por Google, tal y como se indica en este artículo de ayuda de Google: Ver calendarios desde otras aplicaciones

Acceso de lectura y escritura

Descargar el proveedor de Google Calendar

Si necesitas tener acceso de lectura y de escritura, necesitarás instalar el Proveedor para Google Calendar desde addons.mozilla.org.

Abre la página web del complemento Provider for Google Calendar.
Descarga el archivo haciendo clic con el botón derecho del ratón sobre el enlace Descargar ahora y selecciona Guardar como.

Instalar y configurar el complemento

Para instalar el complemento, selecciona el menú Herramientas desde la barra de menú de Thunderbird y haz clic en el elemento de menú Complementos.
En la ventana de “Complementos”, haz clic en el botón Instalar… y selecciona el archivo que has descargado. Haz clic en el botón Abrir para instalar el complemento.

Obtener el enlace XML a tu calendario

Para acceder a los datos de tu calendario, necesitas traer el archivo privado XML desde la interfaz de Google Calendar. Sigue los siguientes pasos:

  • Abre la web Google Calendar dirigiéndote al sitio web de Google Calendar.
  • Selecciona Opciones en la parte superior y escoge Configuración de Calendar.
  • Selecciona el enlace Calendarios, situado en la parte superior de la pantalla de configuración de Google Calendar. Google Calendar mostrará todos los calendarios disponibles.
  • Haz clic en el calendario que quieres utilizar con Lightning.
  • En la pestaña Detalles del calendario de tu página de calendarios, desplázate hasta que llegues a la sección Dirección del calendario y Dirección privada:.
  • Haz clic con el botón derecho del ratón sobre XML de una de las dos opciones y selecciona Copiar la ruta del enlace.

Observa que tu proveedor no utiliza directamente tu dirección privada. El calendario seguirá siendo accesible cuando restablezcas tu URL privada. Ahora puedes utilizar esta URL en el asistente de calendario.

El enlace privado será algo parecido a lo que se muestra a continuación: http://www.google.com/calendar/feeds/username%40gmail.com/private-1ba218e6a25bfc32b25a4eb3f9ee6d96/basic. Asegúrate de no utilizar el enlace ICS y usar el enlace XML.

Importar el calendario en Lightning

Para importar el calendario en Lightning, por favor, sigue los siguientes pasos:

Dirígete al menú Archivo situado en la parte superior de la ventana de Thunderbird y selecciona el menú Nuevo. Desde el submenú selecciona Calendario.
Cuando se abra el asistente, selecciona En la red de todas las opciones disponibles y haz clic en el botón Siguiente.
Selecciona Google Calendar de los tipos de calendarios y pega o escribe la URL de tu calendario. Haz clic en el botón Siguiente.
En este panel, puedes seleccionar un nombre y un color para el calendario de Google Calendar. Haz clic en el botón Siguiente para continuar.
Ahora, aparecerá una ventana emergente en la cual tienes que introducir tu nombre de usuario de GMail (con o sin la parte de @gmail.com), la contraseña y seleccionar si quieres o no que Lightning guarde tu contraseña. Una vez hagas clic en el botón Siguiente, Lightning creará el calendario y proporcionará acceso tanto de lectura como de escritura al calendario de Google.

Todavía hay algunas limitaciones al utilizar Google Calendar, así que para más información puedes ver la página GData provider en el wiki.mozilla.org.

Publicación extraída de: https://support.mozilla.org/es/kb/utilizar-lightning-con-google-calendar

Aponwao, una aplicación para firmar documentos PDF en Debian y Canaima

aplicationLogo

Aponwao es una aplicación que sirve para firmar PDF con certificados electrónicos, bien sea con certificados de software como con tarjetas criptográficas que lamentablemente (y por ahora), sólo trabaja en equipos con sistemas operativos 32 bits.

Principalmente, aponwao es un fork de Sinadura, salvo algunas modificaciones que a continuación se describen.

– Ingreso de los certificados de confianza para validar las firmas, de la autoridad raíz y sus proveedores, es decir, la CA de SUSCERTE, FII y Procert.
– Permitir que todos los documentos que se encuentren en la carpeta Sin_Firmar se carguen automáticamente en el panel para firmar.
– Firmar duplicados.
– Presencia de perfiles de firma, de manera que el usuario pueda tener varias posiciones donde ubicar la imagen de la firma.
– Posibilidad de especificar la posición de la imagen de la firma en un documento.
– Implementación mecanismos para el uso de proxy
– Implementación configuración del servidor smtp para el envío de correo.
– Implementación de salida del PDF firmado en un medio extraíble.

Descarga

El código de aponwao se encuentra en github en la rama java/master.

Para el momento de este tutorial, está disponible la versión 1.4.4 el cual puede ser descargado en formato .deb.

Instalación

Aponwao depende directamente de java 7, por lo que instalamos openjdk-7-jdk

aptitude install openjdk-7-jdk

Y ahora, instalamos el .deb:

dpkg -i aponwao_1.4.4_i386.deb

Ahora, en el caso de tener tarjetas criptográficas, instalamos los drivers de las lectoras Gmalto, que son una de las más comunes:

aptitude install libusb-dev libusb++-0.1-4c2 libccid pcscd libpcsclite1 libpcsclite-dev libpcsc-perl pcsc-tools

A continuación, debemos instalar ClassicClient para las tarjetas inteligensa, pero para versiones wheezy/jessie de Debian aún no hay una versión estable en sus repositorios. Gracias a una empresa de certificación electrónica (LuxTrust), hicieron la adaptación de la paquetería y la empaquetaron en un Middleware, descargamos el archivo y ejecutamos:

dpkg -i LuxTrust_Middleware_Debian_32bit_7.0.0-b08.deb

Una vez instalados los drivers, dependencias y paquetes, podemos abrir la aplicación buscando aponwao en el menú: Aplicaciones > Oficina > Aponwao, o bien ejecutando:

aponwao

Para más detalles sobre cómo usarlo, podemos ver el siguiente video: Cómo cambiar PIN y cómo firmar con Aponwao o pueden revisar el Manual de Usuario de Aponwao

Captura de pantalla de 2015-07-15 10:50:38

Creación de un repositorio de paquetes

El repositorio de SUSCERTE tiene algunos paquetes cuya utilidad es la no descarga de un archivo con extensión .deb sino agregar el repositorio de SUSCERTE en el sources.list y aprovechar las ventajas de Linux para hacer una instalación sencilla.

La principal ventaja es darle mantenibilidad y acceso a actualizaciones automáticas a aquellas personas que tengan la aplicación instalada en sus equipos.

CREANDO AMBIENTE DE REPOSITORIO

Para generar los paquetes debemos ir hasta la ubicación donde queramos tener nuestro repositorio, por ejemplo, en apache:

cd /var/www/

Creamos un directorio donde almacenaremos nuestros paquetes:

mkdir suscerte

Y a continuación, haremos la descarga de los paquetes que querramos incluir, por ejemplo:

aptitude download pcscd libusb-dev libusb++-0.1-4c2 libccid libpcsclite1 libpcsclite-dev libpcsc-perl pcsc-tools openssl

Esto nos descargará los paquetes que consideremos de forma local, también podemos hacer un simple copiar/pegar para almacenar allí los paquetes.

GENERANDO REPOSITORIO

Para generar el comportamiento del repositorio, ejecutamos el siguiente comando:

dpkg-scanpackages <distribución de paquetes> /dev/null | gzip -9c > <carpeta creada en apache>/Packages.gz

En el ejemplo con la estructura anterior, debería ser:

dpkg-scanpackages debian /dev/null | gzip -9c > debian/Packages.gz

Esto lo que hará es escanear los paquetes y generar un paquete comprimido con el resumen de paquetes que contendrá el repositorio.

AÑADIENDO REPOSITORIO EN SOURCES.LIST

Para añadir la línea, ejecutamos (como Root):

echo "deb http://<IP>/<carpeta creada anteriormente> <distribución de paquetes>/" >> /etc/apt/sources.list

En el caso con la estructura antes descrita, debe ser:

echo "deb http://192.168.1.2/suscerte debian/" >> /etc/apt/sources.list

Ya sólo quedará actualizar el repositorio (como Root):

aptitude update

E instalar alguna aplicación, por ejemplo, aponwao (como Root):

aptitude install aponwao