def asterisk_modules_config(tplfilename, customtplfilename, newfilename, modules): """ Generate Asterisk modules.conf from a template """ filename, filestat = _find_template_file(tplfilename, customtplfilename, newfilename) customfile = customtplfilename == filename cfg = AsteriskConfigParser(filename=filename) newcfg = AsteriskConfigParser() for directive in cfg.directives(): newcfg.add_directive(directive[0], directive[1]) mods = list(modules) appendmods = True if customfile and cfg.has_option('modules', 'noload'): for optname, optvalue in cfg.items('modules'): if optname == 'noload' and optvalue in mods: mods.remove(optvalue) for sec in cfg: secname = sec.get_name() newcfg.add_section(secname) for opt in sec: optname = opt.get_name() optvalue = opt.get_value() if secname != 'modules': newcfg.append(secname, optname, optvalue) continue if optname in ('preload', 'load', 'noload'): if appendmods: appendmods = False for module in mods: newcfg.append(secname, 'preload', module) if optvalue in mods: continue newcfg.append(secname, optname, optvalue) if appendmods: appendmods = False if not newcfg.has_section('modules'): newcfg.add_section('modules') for module in mods: newcfg.append('modules', 'preload', module) _write_config_file(newfilename, newcfg, filestat)