# 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