TurboGears - Écriture d'extensions

Les extensions TurboGears sont identifiées par tgext.* package. Une boîte à outils Gearbox fournit une commande tgext pour créer un exemple d'extension. Par exemple -

gearbox tgext -n myextension

Les autres paramètres facultatifs de cette commande sont -

  • --author - nom de l'auteur du package.

  • --email - email de l'auteur du package.

  • --licence- licence utilisée pour le package. La valeur par défaut est MIT.

  • --description - Description du package.

  • --keywords - Mots clés du package (par défaut: turbogears2.extension).

Cela créera un répertoire tgext.myextension, qui contient une simple extension d'exemple.

Run the setup.py à l'intérieur du répertoire -

Python setup.py install

le _init_.py fichier à l'intérieur tgext/myextension le dossier contient -

  • Plugme function - C'est le point d'entrée de l'extension.

  • SetupExtension class - l'initialisation de l'extension a lieu ici.

  • On_startup function - à l'intérieur de la classe se trouve un hook enregistré sur la fonction __call__ à l'intérieur de la classe.

Version abrégée du 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!')

Une fois l'extension installée, activez-la en effectuant les ajouts suivants dans l'application app_cfg.py fichier de configuration.

from tgext.myextension import plugme

plugme(base_config)

Si nous lançons le serveur à l'aide d'une commande de serveur de boîte de vitesses, la notification d'une extension nouvellement enregistrée peut être visualisée sur la console de la manière suivante -

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