def runserver(self): def _shutdown(signum, frame): eventlet.spawn_n(runner.stop) runner = ServiceRunner(config=config.to_dict()) # for service_cls in BaseService.__subclasses__(): # runner.add_service(service_cls) runner.add_service(InvboxService) signal.signal(signal.SIGTERM, _shutdown) runner.start() runnlet = eventlet.spawn(runner.wait) while True: try: runnlet.wait() except OSError as exc: if exc.errno == errno.EINTR: continue raise except KeyboardInterrupt: print() try: runner.stop() except KeyboardInterrupt: print() # as above runner.kill() else: break
def get_config(call: APICall): path = call.data.get("path") if path: c = dict(config.get(path)) else: c = config.to_dict() def remove_none_value(x): """ Pyhocon bug in Python 3: leaves dummy "NoneValue"s in tree, see: https://github.com/chimpler/pyhocon/issues/111 """ if isinstance(x, dict): return {key: remove_none_value(value) for key, value in x.items()} if isinstance(x, list): return list(map(remove_none_value, x)) if isinstance(x, NoneValue): return None return x c.pop("secure", None) call.result.data = remove_none_value(c)
def command_set(self, args): """ /set [module|][section] <option> [value] """ if args is None or len(args) == 0: config_dict = config.to_dict() lines = [] theme = get_theme() for section_name, section in config_dict.items(): lines.append( '\x19%(section_col)s}[%(section)s]\x19o' % { 'section': section_name, 'section_col': dump_tuple(theme.COLOR_INFORMATION_TEXT), }) for option_name, option_value in section.items(): lines.append( '%s\x19%s}=\x19o%s' % (option_name, dump_tuple( theme.COLOR_REVISIONS_MESSAGE), option_value)) info = ('Current options:\n%s' % '\n'.join(lines), 'Info') elif len(args) == 1: option = args[0] value = config.get(option) if value is None and '=' in option: args = option.split('=', 1) info = ('%s=%s' % (option, value), 'Info') if len(args) == 2: if '|' in args[0]: plugin_name, section = args[0].split('|')[:2] if not section: section = plugin_name option = args[1] if not plugin_name in self.plugin_manager.plugins: file_name = self.plugin_manager.plugins_conf_dir file_name = os.path.join(file_name, plugin_name + '.cfg') plugin_config = PluginConfig(file_name, plugin_name) else: plugin_config = self.plugin_manager.plugins[plugin_name].config value = plugin_config.get(option, default='', section=section) info = ('%s=%s' % (option, value), 'Info') else: possible_section = args[0] if config.has_section(possible_section): section = possible_section option = args[1] value = config.get(option, section=section) info = ('%s=%s' % (option, value), 'Info') else: option = args[0] value = args[1] info = config.set_and_save(option, value) self.trigger_configuration_change(option, value) elif len(args) == 3: if '|' in args[0]: plugin_name, section = args[0].split('|')[:2] if not section: section = plugin_name option = args[1] value = args[2] if not plugin_name in self.plugin_manager.plugins: file_name = self.plugin_manager.plugins_conf_dir file_name = os.path.join(file_name, plugin_name + '.cfg') plugin_config = PluginConfig(file_name, plugin_name) else: plugin_config = self.plugin_manager.plugins[plugin_name].config info = plugin_config.set_and_save(option, value, section) else: if args[0] == '.': name = safeJID(self.current_tab().name).bare if not name: self.information('Invalid tab to use the "." argument.', 'Error') return section = name else: section = args[0] option = args[1] value = args[2] info = config.set_and_save(option, value, section) self.trigger_configuration_change(option, value) elif len(args) > 3: return self.command_help('set') self.information(*info)
def backup_cfg(): orig_config = cfg.to_dict() yield cfg.from_dict(orig_config)
def command_set(self, args): """ /set [module|][section] <option> [value] """ if args is None or len(args) == 0: config_dict = config.to_dict() lines = [] theme = get_theme() for section_name, section in config_dict.items(): lines.append('\x19%(section_col)s}[%(section)s]\x19o' % { 'section': section_name, 'section_col': dump_tuple(theme.COLOR_INFORMATION_TEXT), }) for option_name, option_value in section.items(): lines.append('%s\x19%s}=\x19o%s' % (option_name, dump_tuple(theme.COLOR_REVISIONS_MESSAGE), option_value)) info = ('Current options:\n%s' % '\n'.join(lines), 'Info') elif len(args) == 1: option = args[0] value = config.get(option) if value is None and '=' in option: args = option.split('=', 1) info = ('%s=%s' % (option, value), 'Info') if len(args) == 2: if '|' in args[0]: plugin_name, section = args[0].split('|')[:2] if not section: section = plugin_name option = args[1] if not plugin_name in self.plugin_manager.plugins: file_name = self.plugin_manager.plugins_conf_dir file_name = os.path.join(file_name, plugin_name + '.cfg') plugin_config = PluginConfig(file_name, plugin_name) else: plugin_config = self.plugin_manager.plugins[plugin_name].config value = plugin_config.get(option, default='', section=section) info = ('%s=%s' % (option, value), 'Info') else: possible_section = args[0] if config.has_section(possible_section): section = possible_section option = args[1] value = config.get(option, section=section) info = ('%s=%s' % (option, value), 'Info') else: option = args[0] value = args[1] info = config.set_and_save(option, value) self.trigger_configuration_change(option, value) elif len(args) == 3: if '|' in args[0]: plugin_name, section = args[0].split('|')[:2] if not section: section = plugin_name option = args[1] value = args[2] if not plugin_name in self.plugin_manager.plugins: file_name = self.plugin_manager.plugins_conf_dir file_name = os.path.join(file_name, plugin_name + '.cfg') plugin_config = PluginConfig(file_name, plugin_name) else: plugin_config = self.plugin_manager.plugins[plugin_name].config info = plugin_config.set_and_save(option, value, section) else: if args[0] == '.': name = safeJID(self.current_tab().name).bare if not name: self.information(_('Invalid tab to use the "." argument.'), _('Error')) return section = name else: section = args[0] option = args[1] value = args[2] info = config.set_and_save(option, value, section) self.trigger_configuration_change(option, value) elif len(args) > 3: return self.command_help('set') self.call_for_resize() self.information(*info)