TurboGears: extensiones de escritura

Las extensiones de TurboGears se identifican mediante tgext.* package. Un kit de herramientas de Gearbox proporciona un comando tgext para crear una extensión de muestra. Por ejemplo

gearbox tgext -n myextension

Otros parámetros opcionales para este comando son:

  • --author - nombre del autor del paquete.

  • --email - correo electrónico del autor del paquete.

  • --licence- licencia utilizada para el paquete. El valor predeterminado es MIT.

  • --description - Descripción del paquete.

  • --keywords - Palabras clave del paquete (predeterminado: turbogears2.extension).

Esto creará un directorio tgext.myextension, que tiene una extensión de muestra simple en su interior.

Run the setup.py dentro del directorio -

Python setup.py install

los _init_.py archivo dentro tgext/myextension carpeta contiene -

  • Plugme function - Este es el punto de entrada de la extensión.

  • SetupExtension class - La inicialización de la extensión tiene lugar aquí.

  • On_startup function - dentro de la clase hay un gancho registrado en la función __call__ dentro de la clase.

Breve versión del tgext\myextension\__init__.py.

from tg import config
from tg import hooks
from tg.configuration import milestones

import logging
log = logging.getLogger('tgext.myextension')

def plugme(configurator, options = None):
   if options is None:
      options = {}
   log.info('Setting up tgext.myextension extension...')
   milestones.config_ready.register(SetupExtension(configurator))
   
   return dict(appid='tgext.myextension')
	
class SetupExtension(object):
   def __init__(self, configurator):
      self.configurator = configurator
      
   def __call__(self):
      log.info('>>> Public files path is %s' % config['paths']['static_files'])
      hooks.register('startup', self.on_startup)
      
   def echo_wrapper_factory(handler, config):
      def echo_wrapper(controller, environ, context):
         log.info('Serving: %s' % context.request.path)
         return handler(controller, environ, context)
      return echo_wrapper
      
   self.configurator.register_wrapper(echo_wrapper_factory)
   
   def on_startup(self):
      log.info('+ Application Running!')

Una vez instalada la extensión, actívela haciendo las siguientes adiciones en la aplicación app_cfg.py archivo de configuración.

from tgext.myextension import plugme

plugme(base_config)

Si iniciamos el servidor usando un comando del servidor de caja de cambios, la notificación de una extensión recién registrada se puede ver en la consola de la siguiente manera:

14:29:13,250 INFO [tgext.myextension] Setting up tgext.myextension extension...
14:29:13,453 INFO [tgext.myextension] >>> Public files path is c:\tghello\hello\hello\public
14:29:13,453 INFO [tgext.myextension] + Application Running!

Starting Standard HTTP server on http://127.0.0.1:8080