def test_find_love(self): ''' Función encargada de probar la función find love. :return: ''' # Primer test start, goal = 0, 4 arcs = [(0, 1), (0, 2), (0, 3), (3, 4)] g = Graph(goal + 1) for arc in arcs: g.add_edge(arc[0], arc[1]) self.assertEqual(g.find_love(start, goal), (2, ['3', '4'])) # Segundo test start, goal = 0, 9 arcs = [(0, 1), (0, 2), (0, 3), (1, 5), (2, 4), (3, 7), (4, 9), (5, 6), (7, 8), (6, 9), (8, 9)] g = Graph(goal + 1) for arc in arcs: g.add_edge(arc[0], arc[1]) self.assertEqual(g.find_love(start, goal), (3, ['2', '4', '9'])) # Tercer test start, goal = 0, 4 arcs = [(0, 1), (0, 2), (0, 3), (1, 3), (2, 3), (2, 4)] g = Graph(goal + 1) for arc in arcs: g.add_edge(arc[0], arc[1]) self.assertEqual(g.find_love(start, goal), (2, ['2', '4']))
class GraphApi(Resource): def __init__(self): # Arcos self._arcs = [] # Nodo inicial self._start = None # Nodo final self._goal = None # Instancia de la clase 'Graph' self._g_instance = None # Mensaje de respuesta al usuario self._data = None # Getters y setters @property def arcs(self): ''' Getter de la variable 'arcs'. :return: La variable 'arcs' ''' return self._arcs @arcs.setter def arcs(self, arcs): ''' Setter de la variable 'arcs'. :return: None ''' self._arcs = arcs @property def start(self): ''' Getter de la variable 'start'. :return: La variable 'start' ''' return self._start @start.setter def start(self, start): ''' Setter de la variable 'start'. :return: None ''' self._start = start @property def goal(self): ''' Getter de la variable 'goal'. :return: La variable 'goal' ''' return self._goal @goal.setter def goal(self, goal): ''' Setter de la variable 'goal'. :return: None ''' self._goal = goal @property def g_instance(self): ''' Getter de la variable 'g_instance'. :return: La variable 'g_instance' ''' return self._g_instance @g_instance.setter def g_instance(self, g_instance): ''' Setter de la variable 'g_instance'. :return: None ''' self._g_instance = g_instance @property def data(self): ''' Getter de la variable 'data'. :return: La variable 'data' ''' return self._data @data.setter def data(self, data): ''' Setter de la variable 'data'. :return: None ''' self._data = data def get(self): ''' Función que devuelve la lista de arcos del árbol (si la hay) al hacer una petición GET al endpoint '/graph'. :return: Un JSON con los arcos del grafo. ''' return {"data": "Graph API working..."} def put(self): ''' Función encargada de recibir los datos necesarios para crear un grafo. Los recibe en formato JSON cuando se hace una petición PUT al endpoint. :return: Una tupla de la forma (num_personas_necesarias, [lista_de_personas_necesarias]) ''' # Verificamos que cumpla con los datos que necesitamos args = graph_put_args.parse_args() # Función encargada de tratar la entrada self.clean_data(args) # Iniciamos el grafo self.start_graph() # Le damos formato al JSON de respuesta self.data = {"distance": self.data[0], "nodes": self.data[1]} return self.data, 201 def clean_data(self, args): # Guardamos el inicio y el objetivo self.start = args['start'] self.goal = args['goal'] # Separamos los arcos por parejas edges = args['edges'].split(',') # Separamos cada pareja edges = [tuple(map(int, edge.split('-'))) for edge in edges] # Guardamos los arcos en su variable respectiva self.arcs = edges # Modificamos la variable global for el in self.arcs: temp_graph.append(el) def delete(self): temp_graph.clear() return {"message": "Arcos borrados satisfactoriamente"} def are_arcs_empty(self): if len(temp_graph) == 0: abort(404, message="No se puede consultar un grafo sin nodos") def start_graph(self): self.g_instance = Graph(self.goal + 1) # Agregamos los arcos al grafo for pair in self.arcs: self.g_instance.add_edge(pair[0], pair[1]) # Buscamos la cantidad de personas necesarias para llegar de 'start' a 'goal' self.data = self.g_instance.find_love(self.start, self.goal)