wiki:Version2/Desarrollo/WebConsole

Version 4 (modified by trac, 7 years ago) (diff)

--

Tecnologías

EL lenguaje usado para programarlo es Python. Mantener y depurar un código en Python es más sencillo que en PHP. Tiene otras ventajas como que hay mucho trabajo hecho, está lo suficientemente extendido, no siempre hace falta Apache (o similares), se desarrolla muy rápido y se aprende aun más rápido.

Como framework principal usamos webpy. En su web encontramos la documentación necesaria para entender el proyecto. Webpy es liviano pero muy extensible. Para entender el proyecto hay que entender partes muy importantes de webpy como son:

  • Los templates.
  • Los manejos de URL.
  • Sesiones.

Para guardar la información usamos sqlalchemy. Es una librería de python que abstrae el acceso a la base de datos. Es algo compleja, pero a su favor tenemos que nos aseguramos de que no se va a quedar pequeña y compatibilidad con diferentes bases de datos como SQLite, MySQL, PostgreSQL e incluso Oracle.

Otra tecnología que nos gustaría usar pero de la que todavía no hemos explotado todo su potencial es formalchemy.

Para que la interfaz sea traducible usamos gettext, es decir, los archivos *.po y *.mo de toda la vida.

En profundidad

web.ctx

En la variable de entorno web.ctx podemos encontrar:

  • pluginmanager: es un objeto que tiene una lista de todos los plugins. Se usa, además de instalar, activar, etc. para acceder a los plugins desde cualquier parte del código.
  • orm: es un objeto con la sesión a la base de datos. Con él podemos realizar consultas o modificar la base de datos.
  • session: los datos de sesión del usuario.
  • render: las plantillas para renderizar las páginas.
  • gettext y plugin_gettext: necesarios para realizar las traducciones.

Internacionalización

Es muy simple, si necesitas añadir alguna cadena para que sea traducida en el WebConsole:

from decoratos import i18n
...

@i18n
def funcion():
   ...
   cadena = _("Texto que nos gustaría traducir")
   ...

Código

En source:branches/version2/web encuentramos el código de la consola web. #238

Ficheros

  • setup.sh: Se ejecuta para instalar la consola web. Borra todos los datos de la anterior instalación y llama a los siguientes scripts para generar una instalación limpia:
    • db.py: Crea la base de datos principal.
    • i18n_make.sh: Genera las traducciones.
    • i18n_make_plugins.sh: Lo mismo que antes pero para los plugins.
    • fill_data.sh: Rellana algunos datos para poder probar el código.
  • admin.py: Se ejecuta para ejecutar la consola web. Se le puede pasar el puerto por el que se quiere ejecutar. Por defecto es el 8080.
  • config.py: Aquí podemos configurar muchos aspectos de la consola web.
  • i18n_extract.sh y i18n_extract_plugin.sh: Sirve para extraer los mensajes para traducir.
  • decorators.py: Están los decoradores para las funciones donde hay mensajes para traducir.
  • log.py: Este fichero se configura como se guarda el log.
  • runtests.sh: Para correr los tests.
  • utils.py: Funciones que se usan en todo el código y no sabíamos donde colocar.
  • daemon.py: El demonio que debe ser ejecutar para recibir las respuestas de los clientes.

Directorios

  • clientjob: Todo lo referente a envío de trabajos a los clientes y también a los repositorios.
  • dbadmin: Es el formalchemy, que crea a partir de base de datos formularios para poder modificarlos. Todavía no está desarrollado todo lo que debería.
  • i18n: Generado para las traducciones.
  • log : Generado para el log.
  • login: ¿No hay nada?
  • main: La base de datos principal de ordenadores, grupos, repositorios, etc.
  • navigator: Todo lo referente a la pestaña navigator de la consola web.
  • panel: Todo lo refrente a la pestaña panel.
  • pluginmanager: Todo lo referente a la pestaña pluginmanager. Instala, activa, desactiva y elimina plugins. También puede configurar sus opciones.
  • plugins: Aquí está el esqueleto de los plugins. pluginbase.py es el fichero principal y ahí se encuentra mucho código usado por los plugins que heredan de esa clase. En este directorio existen más directorios que son los plugins propiamente dichos que se pueden activar desde pluginmanager. Por ahora ahí:
    • disk_image: Todo lo referente a los discos de los clientes.
    • hardware_inventory: Crea un inventario hardware a los clientes.
  • sessions: Creado para guardar la sesión.
  • ssl: Certificados para conexiones seguras.
  • static: El javascript, css, imagenes, etc. También se enlaza con el material estático con enlaces simbólicos de los plugins cuando se instalan.
  • templates: Todo el sistema de plantillas que se usa en la consola web. Se organiza por carpetas y también se enlaza templates de plugins cuando se instalan.
  • tests: Para crear tests. No está muy desarrollado.
  • user: Aquí vemos todo el código relacionado con los usuarios del sistema.
  • web: El webpy que usa la consola web.