TurboGears - Estensioni di scrittura

Le estensioni TurboGears sono identificate da tgext.* package. Un toolkit Gearbox fornisce il comando tgext per creare un'estensione di esempio. Ad esempio:

gearbox tgext -n myextension

Altri parametri opzionali per questo comando sono:

  • --author - nome dell'autore del pacchetto.

  • --email - email dell'autore del pacchetto.

  • --licence- licenza utilizzata per il pacchetto. L'impostazione predefinita è MIT.

  • --description - Descrizione del pacchetto.

  • --keywords - Parole chiave del pacchetto (predefinito: turbogears2.extension).

Questo creerà una directory tgext.myextension, che ha una semplice estensione di esempio all'interno.

Run the setup.py all'interno della directory -

Python setup.py install

Il _init_.py file all'interno tgext/myextension la cartella contiene -

  • Plugme function - Questo è il punto di ingresso dell'estensione.

  • SetupExtension class - qui avviene l'inizializzazione dell'estensione.

  • On_startup function - all'interno della classe c'è un hook registrato sulla funzione __call__ all'interno della classe.

Breve versione 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 volta installata l'estensione, attivala apportando le seguenti aggiunte nel file dell'applicazione app_cfg.py file di configurazione.

from tgext.myextension import plugme

plugme(base_config)

Se avviamo il server utilizzando un comando del server gearbox, la notifica di una nuova estensione registrata può essere visualizzata sulla console nel modo seguente:

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