def c14n_uri(uri): puri = list(urisup.uri_help_split(uri)) puri[PATH] = os.path.abspath(puri[PATH]) return uri_help_unsplit(tuple(puri))
def set_db_backends(args, options): # pylint: disable-msg=W0613 """ POST /set_db_backends """ if 'xivo' not in args: raise HttpReqError(415, "missing option 'xivo'") else: xivodburi = list(urisup.uri_help_split(args['xivo'])) if xivodburi[0] is None or xivodburi[0].lower() not in WIZARD_XIVO_DB_ENGINES: raise HttpReqError(415, "invalid option 'xivo'") else: xivodburi[0] = xivodburi[0].lower() if WIZARD_XIVO_DB_ENGINES[xivodburi[0]]: xivodbparams = WIZARD_XIVO_DB_ENGINES[xivodburi[0]]['params'] else: xivodbparams = {} if xivodburi[3]: xivodbparams.update(dict(xivodburi[3])) if xivodbparams: xivodburi[3] = zip(xivodbparams.keys(), xivodbparams.values()) else: xivodburi[3] = None args['xivo'] = urisup.uri_help_unsplit(xivodburi) if 'ql' not in args: args['ql'] = args['xivo'] if 'ipbxengine' not in args: raise HttpReqError(415, "missing option 'ipbxengine'") elif args['ipbxengine'] not in WIZARD_IPBX_ENGINES: raise HttpReqError(415, "invalid ipbxengine: %r" % args['ipbxengine']) ipbxdbinfo = WIZARD_IPBX_ENGINES[args['ipbxengine']]['database'] if 'ipbx' not in args: raise HttpReqError(415, "missing option 'ipbx'") else: ipbxdburi = list(urisup.uri_help_split(args['ipbx'])) if ipbxdburi[0] is None or ipbxdburi[0].lower() not in ipbxdbinfo: raise HttpReqError(415, "invalid option 'ipbx'") else: ipbxdburi[0] = ipbxdburi[0].lower() if ipbxdbinfo[ipbxdburi[0]]['params']: ipbxdbparams = ipbxdbinfo[ipbxdburi[0]]['params'] else: ipbxdbparams = {} if ipbxdburi[3]: ipbxdbparams.update(dict(ipbxdburi[3])) if ipbxdbparams: ipbxdburi[3] = zip(ipbxdbparams.keys(), ipbxdbparams.values()) else: ipbxdburi[3] = None args['ipbx'] = urisup.uri_help_unsplit(ipbxdburi) if not WIZARDLOCK.acquire_read(Wdc['lock_timeout']): raise HttpReqError(503, "unable to take WIZARDLOCK for reading after %s seconds" % Wdc['lock_timeout']) try: connect = xivo_helpers.db_connect(args['xivo']) if not connect: raise HttpReqError(415, "unable to connect to 'xivo' database") connect = xivo_helpers.db_connect(args['ipbx']) if not connect: raise HttpReqError(415, "unable to connect to 'ipbx' database") merge_config_file(Wdc['agid_config_tpl_file'], Wdc['agid_config_custom_tpl_file'], Wdc['agid_config_file'], {'db': {'db_uri': args['ipbx']}}) merge_config_file(Wdc['provisioning_config_tpl_file'], Wdc['provisioning_config_custom_tpl_file'], Wdc['provisioning_config_file'], {'general': {'database_uri': args['ipbx']}}) merge_config_file(Wdc['webinterface_xivo_tpl_file'], Wdc['webinterface_xivo_custom_tpl_file'], Wdc['webinterface_xivo_file'], {'general': {'datastorage': '"%s"' % args['xivo']}}) merge_config_file(Wdc['webinterface_cti_tpl_file'], Wdc['webinterface_cti_custom_tpl_file'], Wdc['webinterface_cti_file'], {'general': {'datastorage': '"%s"' % args['xivo']}, 'queuelogger': {'datastorage': '"%s"' % args['ql']}, }) merge_config_file("%s.%s" % (Wdc['webinterface_ipbx_tpl_file'], args['ipbxengine']), "%s.%s" % (Wdc['webinterface_ipbx_custom_tpl_file'], args['ipbxengine']), Wdc['webinterface_ipbx_file'], {'general': {'datastorage': '"%s"' % args['ipbx']}}) if args['ipbxengine'] == 'asterisk': asterisk_configuration(ipbxdburi, ipbxdbinfo[ipbxdburi[0]], ipbxdbparams) finally: WIZARDLOCK.release()