Esempio n. 1
0
class ServiceConfig(ConfigSection):
    def __init__(self, *args, **kwargs):
        ConfigSection.__init__(self, *args, **kwargs)
        self.service_name = None
        self.module_name  = None
        self.varname      = None
        self.value        = None
        self.config       = Config(self.global_options.config_dir, False)

    @staticmethod
    def get_description():
        return 'add or configure services'

    @staticmethod
    def get_commands():
        return (('add',   'configure a new service'),
                ('edit',  'configure an existing service'),
                ('set',   'define a service variable'),
                ('unset', 'remove a service variable'))

    def _assert_module_exists(self, parser, module_name):
        try:
            file, module_path, desc = find_module_recursive(module_name)
        except ImportError:
            args = repr(module_name), sys.path
            msg  = 'service %s not found. sys.path is %s' % args
            parser.error(msg)

    def getopt_add(self, parser):
        parser.add_option('--daemon',
                          dest    = 'daemon',
                          metavar = 'STRING',
                          help    = 'the daemon that is used')
        parser.add_option('--queue',
                          dest    = 'queue',
                          metavar = 'STRING',
                          help    = 'the queue that is used')

    def prepare_add(self, parser, service_name, module_name):
        self.service_name = service_name
        self.module_name  = module_name
        self._assert_module_exists(parser, module_name)
        if self.config.has_service(self.service_name):
            parser.error('service already exists')

    def start_add(self):
        self.config.add_service(self.service_name,
                                self.module_name,
                                self.options.daemon,
                                self.options.queue)
        print 'Service added.'

    def getopt_edit(self, parser):
        self.getopt_add(parser)

    def prepare_edit(self, parser, service_name):
        self.service_name = service_name
        if not self.config.has_service(self.service_name):
            parser.error('service not found')

    def start_edit(self):
        if self.config.add_service(self.service_name,
                                   None,
                                   self.options.daemon,
                                   self.options.queue):
            print 'Service configured.'
        else:
            print 'No changes were made.'

    def prepare_set(self, parser, service_name, varname, value):
        self.service_name = service_name
        self.varname      = varname
        self.value        = value

    def start_set(self):
        self.config.set_service_variable(self.service_name,
                                         self.varname,
                                         self.value)
        print 'Variable set.'

    def prepare_unset(self, parser, service_name, varname):
        self.service_name = service_name
        self.varname      = varname

    def start_unset(self):
        self.config.unset_service_variable(self.service_name, self.varname)
        print 'Variable removed.'