def load_db_params(self, gc): from r2.lib.services import get_db_load self.databases = tuple(self.to_iter(gc['databases'])) self.db_params = {} if not self.databases: return dbm = db_manager.db_manager() db_param_names = ('name', 'db_host', 'db_user', 'db_pass', 'db_port', 'pool_size', 'max_overflow') for db_name in self.databases: conf_params = self.to_iter(gc[db_name + '_db']) params = dict(zip(db_param_names, conf_params)) if params['db_user'] == "*": params['db_user'] = self.db_user if params['db_pass'] == "*": params['db_pass'] = self.db_pass if params['db_port'] == "*": params['db_port'] = self.db_port if params['pool_size'] == "*": params['pool_size'] = self.db_pool_size if params['max_overflow'] == "*": params['max_overflow'] = self.db_pool_overflow_size ip = params['db_host'] ip_loads = get_db_load(self.servicecache, ip) if ip not in ip_loads or ip_loads[ip][0] < 1000: dbm.setup_db(db_name, g_override=self, **params) self.db_params[db_name] = params dbm.type_db = dbm.get_engine(gc['type_db']) dbm.relation_type_db = dbm.get_engine(gc['rel_type_db']) def split_flags(p): return ([n for n in p if not n.startswith("!")], dict((n.strip('!'), True) for n in p if n.startswith("!"))) prefix = 'db_table_' for k, v in gc.iteritems(): if k.startswith(prefix): params = list(self.to_iter(v)) name = k[len(prefix):] kind = params[0] if kind == 'thing': engines, flags = split_flags(params[1:]) dbm.add_thing(name, dbm.get_engines(engines), **flags) elif kind == 'relation': engines, flags = split_flags(params[3:]) dbm.add_relation(name, params[1], params[2], dbm.get_engines(engines), **flags) return dbm