Desarrollar y depurar con web2py en Visual Studio



Hace un tiempo escribí un artículo sobre cómo configurar Visual Studio para trabajar con proyectos de Python de cualquier tipo. Sin embargo, el desarrollo web, particularmente en Python, tiene algunos requerimientos más específicos. Por defecto, Visual Studio incluye soporte y plantillas para programación web con Django, Flask y Bottle que lo convierten en ideal para trabajar con grandes proyectos.

Como web2py tiene una filosofía bastante diferente al resto de los web frameworks, intentaré darte algunos consejos para que puedas aprovechar al máximo las herramientas que provee el IDE y enfocarte únicamente en el código de tu aplicación.

Crear un proyecto

Para comenzar, como primer caso vamos a crear una aplicación de ejemplo con el administrador de web2py. Si el framework se encuentra instalado en C:\web2py, entonces nuestra nueva aplicación (suponiendo que la hemos nombrado testapp) se habrá creado en C:\web2py\applications\testapp).

Luego, en Visual Studio crearemos un nuevo proyecto dirigiéndonos al menú Archivo > Nuevo > Proyecto… y allí seleccionaremos la plantilla de Python Web Project, tal como se muestra en la imagen.

Nuevo proyecto de Python en Visual Studio

El nombre del proyecto y la ubicación son indistintos.

Una vez creado, en el explorador de soluciones haremos clic derecho en nuestro proyecto y añadiremos la carpeta de nuestra aplicación, C:\web2py\applications\testapp.

Agregar carpeta en Visual Studio

Ahora deberíamos ver en el explorador de soluciones la estructura de una típica aplicación de web2py.

Explorador de soluciones en Visual Studio

Si nos dirigimos al lugar en donde hemos guardado nuestro proyecto, observaremos que Visual Studio hizo una copia allí de nuestra aplicación. Esto es conveniente ya que tanto el proyecto como sus archivos correspondientes se encuentran en un único lugar, pero entra en conflicto en cómo web2py maneja las aplicaciones. Para web2py todas las aplicaciones deben estar dentro de la carpeta applications, lo que para grandes proyectos puede resultar sumamente incómodo.

Para resolver esta situación, vamos a eliminar la carpeta de nuestra aplicación en el directorio de web2py (C:\web2py\applications\testapp) y, en su lugar, crear un acceso directo que apunte a nuestro proyecto de Visual Studio.

Una vez eliminada, abrimos el Símbolo del sistema (cmd.exe) y escribimos:

> cd C:\web2py\applications
> mklink /J testapp "C:\VS Projects\TestApp\TestApp\testapp"

(Reemplazando testapp por el nombre de tu aplicación y C:\VS Projects\TestApp\TestApp\testapp por la ubicación de tu proyecto de Visual Studio).

Esto contentará a web2py haciéndole creer que nuestra aplicación se encuentra allí, pero con la comodidad de tenerla organizada en un proyecto de Visual Studio.

Si has seguido todos los pasos al pie de la letra, ¡felicitaciones, has creado tu proyecto de web2py!

Configurar el entorno

La principal diferencia con otros web frameworks es que web2py ejecuta el código de tu aplicación en lugar de importarlo. Esto le permite al usuario acceder a objetos como request, response, DAL, Auth; objetos que nunca fueron importados y sin embargo allí están.

Esto es un problema para todos los IDE (excepto aquellos con soporte nativo de web2py como PyCharm o WingIDE, aunque en mi rápida incursión en ambos no lo pude observar) ya que no pueden proveer opciones de autocompletado para los objetos de web2py.

Para solucionar -al menos parcialmente- este inconveniente, debemos indicarle a Visual Studio dónde ubicar el archivo gluon.py (que contiene todos los objetos de web2py). Para esto nos dirigimos al explorador de soluciones, hacemos clic derecho sobre Search Paths, seleccionamos Add Folder to Search Paths y buscamos C:\web2py.

También es conveniente añadir el directorio modules de nuestra aplicación, en mi caso, C:\VS Projects\TestApp\TestApp\testapp\modules.

Visual Studio Search Paths

Una vez configurados los directorios IntelliSense será capaz de proveernos sugerencias a medida que escribimos.

IntelliSense para web2py en Visual Studio

Sin embargo persiste el problema de que el editor no tendrá conciencia de todos los objetos que web2py provee durante la ejecución de la aplicación pero que no es necesario importar. Una solución general (bastante desagradable) explicada en la documentación implica incluir el siguiente código al comienzo del archivo.

if False:
    from gluon import *
    request = current.request
    response = current.response
    session = current.session
    cache = current.cache
    T = current.T

Esto forzará a IntelliSense a rastrear todos los objetos del módulo gluon y proveerlos como sugerencias. Por el momento parece ser el mejor resultado que obtendremos en Visual Studio.

Usando el depurador

El depurador es sin duda una de las cosas más interesantes que tiene Visual Studio para ofrecer a los usuarios de Python. Al parecer congenia bastante bien con web2py y los frameworks en general.

Para depurar una aplicación web vamos a dejar que la interfaz de web2py lance el servidor HTTP que integra por defecto. Es decir, en Visual Studio nos limitaremos únicamente a editar el código y, de ser necesario, añadir puntos de interrupción.

Supongamos que queremos añadir un breakpoint justo en el momento en el que se definen las tablas de los usuarios. Para ello nos dirigimos a db.py e insertamos el punto de interrupción en la línea correspondiente.

Breakpoint en web2py con Visual Studio

Si el servidor de web2py ya está corriendo, vamos a ir al menú Depurar y presionar la opción Asociar al proceso. En la lista de procesos de la ventana emergente, vamos a seleccionar el proceso python.exe (aquél con el título “web2py Web Framework”, en caso de tener varias instancias corriendo) y en el campo “Asociar a” vamos a tildar únicamente la opción “Código Python”, como se muestra en la imagen.

Asociar depurador a web2py en Visual Studio

Al presionar “Asociar” comenzará la depuración y al visitar cualquier URL de nuestra aplicación (ya que los modelos se ejecutan en cada petición) se activará la ventana de Visual Studio en el momento en el código ha llegado a la instrucción que hemos marcado.

Depurador en web2py en Visual Studio

Conclusión

En esta pequeña guía intenté mostrarle al lector que Visual Studio es una herramienta perfectamente capaz para el desarrollo en Python y, aun más, también para web2py.

Una buena noticia para aquellas personas que por una razón u otra se han acostumbrado o se sienten a gusto con este poderoso IDE: no es necesario adaptarse a soluciones específicas como PyCharm o WingIDE, pues Visual Studio ya integra todas esas herramientas que necesitas para enfocarte únicamente en tu código.

¿Tienes alguna duda? ¡Házmelo saber en los comentarios o bien crea un nuevo tema en el foro!



Deja un comentario