# Dada una sesion, una lista de nodos, un tiempo y un numero de destino # devuelve el nodo elegido, su regla de precio, su ruta, sus reescrituras # y la lista de nodos validos hasta donde se busco def _call_data(session, nodes, now, called): node, rewrites, rules, rule, routes, route = (None,)*6 final_nodes = [] j = 0 for nodes_max in nodes: if node: break j = j+1 rnodes = nodes_max[:] # Defino cuales son los nodos que puedo elegir be_chosen = range(len(nodes_max)) # Mientras existan nodos elegibles con esa prioridad while be_chosen != []: # Elijo uno de los nodos elegible con prioridad maxima chosen = _rand(len(be_chosen)) # Elimino el numero de ese nodo para no elegirlo nuevamente del be_chosen[chosen] n = rnodes[chosen] rewrites = _node_rewrites(session, n) rules = _node_price_rules(session, n, now) if len(rules)>0: for rp in rules: if rule: break routes = _rule_routes(session, rp) if len(routes)>0: for r in routes: if route: break if called.startswith(r.matching): rule, route, node = rp, r, n del rnodes[chosen] elif not len(rules) or not rule: del rnodes[chosen] final_nodes.append(rnodes) final_nodes = final_nodes + nodes[j, len(nodes)] return node, rule, route, rewrites, final_nodes