Ticket #1490: 1490.diff

File 1490.diff, 1.7 KB (added by therve, 7 years ago)
  • twisted/plugins/twisted_run.py

     
     1# Copyright (c) 2007 Twisted Matrix Laboratories. 
     2# See LICENSE for details. 
     3 
     4from zope.interface import implements 
     5 
     6from twisted.plugin import IPlugin 
     7from twisted.python.reflect import namedAny 
     8from twisted.application.service import IServiceMaker 
     9from twisted.python.usage import Options 
     10 
     11 
     12class RunOptions(Options): 
     13    """ 
     14    Options for runner. 
     15    """ 
     16    synopsis = "package [package options]" 
     17 
     18    def parseArgs(self, runner, *opts): 
     19        """ 
     20        Parse command arguments: the service, and its options. 
     21        """ 
     22        self['runner'] = runner 
     23        self['runner_options'] = opts 
     24 
     25 
     26class RunPlugin(object): 
     27    """ 
     28    A plugin for running other services. 
     29    """ 
     30    implements(IPlugin, IServiceMaker) 
     31 
     32    name = "Twisted Run Plugin" 
     33    description = "A plugin to run services" 
     34    tapname = "run" 
     35 
     36    def options(self): 
     37        """ 
     38        Return current options for runner. 
     39        """ 
     40        return RunOptions() 
     41 
     42    def makeService(self, options): 
     43        """ 
     44        If runner is defined, try to launch it. 
     45        """ 
     46        if options['runner']: 
     47            runner = namedAny(options['runner']) 
     48            if hasattr(runner, 'options'): 
     49                subOptions = runner.options() 
     50            else: 
     51                # Compatibility with tap module 
     52                subOptions = runner.Options() 
     53            subOptions.parseOptions(options['runner_options']) 
     54            return namedAny(options['runner']).makeService(subOptions) 
     55 
     56 
     57run = RunPlugin() 
     58