def test_add_show_comment_valid(self): username = '******' firstname = 'First Name' lastname = 'Last Name' password = utils.hash_password('password') email = '*****@*****.**' query = ExploriumDbApi.USERS_TABLE.delete().where(ExploriumDbApi.USERS_TABLE.c.username == username) ExploriumDbApi.conn.execute(query) query = ExploriumDbApi.USERS_TABLE.insert().values(username=username, password=password, email=email, firstname=firstname, lastname=lastname) ExploriumDbApi.conn.execute(query) it = Itinerary('New York') it_id = ExploriumDbApi.save_itinerary(username, it) it.db_id = it_id self.assertNotEqual(it, None) self.assertNotEqual(it.db_id, None) add_res = ExploriumDbApi.add_comment(username, it.db_id, 'Hello World') self.assertEqual(add_res, None) comments = ExploriumDbApi.get_itinerary_comments(it.db_id) self.assertNotEqual(comments, None) in_comments = False for comment in comments: if comment['comment'] == 'Hello World' and comment['username'] == username: in_comments = True self.assertTrue(in_comments) query = ExploriumDbApi.ITINERARY_TABLE.delete().where(ExploriumDbApi.ITINERARY_TABLE.c.itinerary_id == it.db_id) ExploriumDbApi.conn.execute(query)
def regenerate(city): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) old = session['current_view_itinerary'] try: preferences = dict() preferences['time_spent'] = request.form.get('days') if int(preferences['time_spent']) > DAY_LIMIT: preferences['time_spent'] = DAY_LIMIT preferences['max_price'] = request.form.get('price') itinerary = Itinerary(city, preferences=preferences) if 'db_id' in session['current_view_itinerary']: new_db_id = ExploriumDbApi.save_itinerary(session['username'], itinerary) itinerary.db_id = new_db_id query = ExploriumDbApi.COMMENTS.update().where(ExploriumDbApi.COMMENTS.c.itinerary_id == session['current_view_itinerary']['db_id']).values(itinerary_id=new_db_id) ExploriumDbApi.conn.execute(query) ExploriumDbApi.delete_itinerary(session['current_view_itinerary']['db_id']) session['current_view_itinerary'] = itinerary.to_dict() return redirect(url_for('get_itinerary_by_id', db_id=session['current_view_itinerary']['db_id'])) return render_template('show_itinerary.html', this_username=session['username'], city=session['current_view_itinerary']['city'], itinerary=itinerary.to_dict(), error="") except Exception as e: #print e session['current_view_itinerary'] = old if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) return render_template('show_itinerary.html', this_username=session['username'], city=session['current_view_itinerary']['city'], itinerary=session['current_view_itinerary'], error="")
def test_remove_user(self): username1 = 'xc3lrea8cfngas' firstname = 'First Name' lastname = 'Last Name' password = utils.hash_password('password') email = '*****@*****.**' query = ExploriumDbApi.USERS_TABLE.delete().where(ExploriumDbApi.USERS_TABLE.c.username == username1) ExploriumDbApi.conn.execute(query) query = ExploriumDbApi.USERS_TABLE.insert().values(username=username1, password=password, email=email, firstname=firstname, lastname=lastname) ExploriumDbApi.conn.execute(query) username2 = 'a8casuxdas' firstname = 'First Name' lastname = 'Last Name' password = utils.hash_password('password') email = '*****@*****.**' query = ExploriumDbApi.USERS_TABLE.delete().where(ExploriumDbApi.USERS_TABLE.c.username == username2) ExploriumDbApi.conn.execute(query) query = ExploriumDbApi.USERS_TABLE.insert().values(username=username2, password=password, email=email, firstname=firstname, lastname=lastname) ExploriumDbApi.conn.execute(query) it = Itinerary('New York') it_id = ExploriumDbApi.save_itinerary(username1, it) it.db_id = it_id self.assertNotEqual(it.db_id, None) ExploriumDbApi.add_user(username2, it.db_id) del_res = ExploriumDbApi.remove_user(username2, it.db_id) self.assertEqual(del_res, None) ExploriumDbApi.delete_itinerary(it.db_id)
def manage_single_route(home_airport, other_airports, aircraft_code, real_exch_rates=True, append_date_time=True, empty_tank=False, hubs=[], stopover_cost=0, constraints=[], airport_file="input files/airport.csv", aircraft_file="input files/aircraft.csv", currency_file="input files/countrycurrency.csv", exchange_rate_file="input files/currencyrates.csv", output_file="bestroutes/bestroutes.csv"): airport_list = [home_airport] + other_airports # read data from input files and handle errors reading the files try: airport_atlas = AirportAtlas(airport_file) except FileNotFoundError: title = "File not found" message = "Unable to open the file: " + str(airport_file) + "\nPlease check the file path and try again" messagebox.showerror(title, message) return None try: currency_table = CurrencyTable(currency_file, exchange_rate_file, real_exch_rates) except CountryCurrencyFileError: title = "Unable to find the currency file" message = "Unable to open the file: " + str(currency_file) + "\nPlease check the file path and try again" messagebox.showerror(title, message) return None except ExchangeRateFileError: title = "Unable to find the currency file" message = "Unable to open the file: " + str(exchange_rate_file) + "\nPlease check the file path and try again" messagebox.showerror(title, message) return None try: aircraft_catalogue = AircraftCatalog(aircraft_file) except FileNotFoundError: title = "File not found" message = "Unable to open the file: " + str(aircraft_file) + "\nPlease check the file path and try again" messagebox.showerror(title, message) return None try: aircraft_range = aircraft_catalogue.get_aircraft_range(aircraft_code) except KeyError: title = "Invalid aircraft code" message = "Unable to find the aircraft code " + str(aircraft_code) + "\nPlease check the code and try again" messagebox.showerror(title, message) return None # calculate the best route and output the result itinerary = Itinerary(airport_atlas, currency_table, airport_list, aircraft_code, aircraft_range, empty_tank, hubs, stopover_cost, constraints) print(itinerary) itinerary.get_cheapest_route() if itinerary.get_error_message() is None: output_file = make_output_filename(output_file, append_date_time) write_to_csv(output_file, itinerary.cheapest_route.make_csv_row())
def test_add_spot(self): it = Itinerary('New York', None) old_items = sum(it.touristSpots, []) #it.add_spot(TouristSpot()) ts = ExploriumDbApi.load_tourist_spot(google_id='ChIJ2y1Dpbm6woARP3MtcSoZ8OI') it.add_spot(ts) new_items = sum(it.touristSpots, []) self.assertGreater(len(new_items), len(old_items))
def test_itinerary_to_dict(self): it = Itinerary('New York', None) self.assertNotEqual(it, None) self.assertNotEqual(it.touristSpots, None) self.assertGreater(len(it.touristSpots), 0) dict = it.to_dict() self.assertEqual(dict['city'], 'New York') self.assertEqual(dict['db_id'], it.db_id)
def test_init_itinerary_dict(self): it1 = Itinerary('New York', None) it2 = Itinerary('New York', itinerary=it1.to_dict()) self.assertNotEqual(it2, None) self.assertEqual(len(it1.touristSpots), len(it2.touristSpots)) for i in range(len(it1.touristSpots)): self.assertEqual(len(it1.touristSpots[i]), len(it2.touristSpots[i])) for j in range(len(it1.touristSpots[i])): self.assertEqual(it1.touristSpots[i][j].destinationID, it2.touristSpots[i][j].destinationID)
def get_itinerary_by_id(db_id): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) query = ExploriumDbApi.ITINERARY_TABLE.select().where(ExploriumDbApi.ITINERARY_TABLE.c.itinerary_id == db_id) result = ExploriumDbApi.conn.execute(query).fetchone() if result: itinerary = Itinerary(result['city'], db_id=db_id) session['current_view_itinerary'] = itinerary.to_dict() return render_template('show_itinerary.html', this_username=session['username'], itinerary=session['current_view_itinerary'], error="") return redirect(url_for('view_itineraries'))
def test_add_flight(self): """test adding flight to class""" response_1 = requests.get( "https://api.skypicker.com/flights?flyFrom=MEL&to=SYD&curr=AUD&dateFrom=12/12/2020&dateTo=15/12/2020&partner=picky&v=3" ) data = json.loads(response_1.text) test_response = data["data"][0] test_flight = Flight(test_response) test_itinerary = Itinerary() test_itinerary.add_flight(test_flight) # make sure class attribute contains flight self.assertTrue(test_itinerary.itineraries)
def save(): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) if 'current_view_itinerary' in session and session['current_view_itinerary']['db_id'] is None: itinerary = session['current_view_itinerary'] cur_itinerary = Itinerary(itinerary['city'], itinerary=itinerary) db_id = ExploriumDbApi.save_itinerary(session['username'], cur_itinerary) cur_itinerary.db_id = db_id session['current_view_itinerary'] = cur_itinerary.to_dict() return redirect(url_for('get_itinerary_by_id', db_id=session['current_view_itinerary']['db_id'])) #return render_template('show_itinerary.html', this_username=session['username'], city=cur_itinerary.city, itinerary=session['current_view_itinerary'], error="") return render_template('show_itinerary.html', this_username=session['username'], itinerary=session['current_view_itinerary'], error="")
def loadData(self,Data): numofairports=len(Data)-1 #minus one because last index is aircraftcode airportlist=[] for i in range(numofairports): #seperates airports from aircraft airportlist.append(Data[i]) aircraftcode=Data[numofairports] cheapestroutelist,mincost,cheapestroutedist,shortestroutelist,shortestroutecost,shortestroutedist=ItineraryList.calculationForFiveRoutes(self,airportlist,aircraftcode) self.obj1=Itinerary(cheapestroutelist,mincost,cheapestroutedist,shortestroutelist,shortestroutecost,shortestroutedist,Data[5])
def test_add_delete_tourist_spot(self): tester = app.test_client(self) user = '******' it = Itinerary('New York', None) self.assertNotEqual(it, None) it_id = ExploriumDbApi.save_itinerary(user, it) query = ExploriumDbApi.ITINERARY_TABLE.select().where(ExploriumDbApi.ITINERARY_TABLE.c.itinerary_id == it_id) result = ExploriumDbApi.conn.execute(query).fetchone() self.assertNotEqual(result, None) tester.post( '/signin', data=dict(user_username="******", user_password="******"), follow_redirects=True ) add_response = tester.post( '/add_spot/661', data={ 'itinerary': str(it_id) }, follow_redirects=True ) tester.get('/itinerary/'+str(it_id), follow_redirects=True, content_type='html/text') self.assertIn('The Palm Los Angeles', add_response.data) del_response = tester.get('/delete_spot/661', follow_redirects=True, content_type='html/text') self.assertNotIn('The Palm Los Angeles', del_response.data)
def test_save_delete_itinerary(self): user = '******' it = Itinerary('New York', None) self.assertNotEqual(it, None) it_id = ExploriumDbApi.save_itinerary(user, it) self.assertNotEqual(it_id, None) ExploriumDbApi.delete_itinerary(it_id)
class testItineraryClass(unittest.TestCase): """Unit tests for Itinerary class""" def setUp(self): self.route = ["DUB", "HEA", "AAA", "MEL", "POL"] self.testItinerary1 = Itinerary(self.route, "747") # Test to check if itinerary attributes are correctly set up def testItineraryAttributes(self): self.assertEqual(self.testItinerary1.route, ["DUB", "HEA", "AAA", "MEL", "POL"]) self.assertEqual(str(self.testItinerary1.aircraft), "Boeing 747") self.assertEqual(self.testItinerary1.revisitCode, "") # Test to check printing of itinerary string def testItineraryString(self): self.assertEqual(str(self.testItinerary1), "Route: {}; Aircraft: Boeing 747".format(self.route)) # Test to check setting an aircraft in the itinerary def testSetValidAircraft(self): self.testItinerary1.setAircraft("777") self.assertEqual(str(self.testItinerary1.aircraft), "Boeing 777") # Test to check setting an invalid aircraft in the itinerary def testSetInvalidAircraft(self): self.testItinerary1.setAircraft("abc") self.assertEqual(str(self.testItinerary1.aircraft), "Boeing 747") # Test to check setting of revisit airport def testValidateRevisit(self): code = self.testItinerary1.validateRevisit("AAA") # Valid revisit airport self.assertEqual(code, "AAA") code = self.testItinerary1.validateRevisit("a") # Invalid revisit airport self.assertEqual(code, "") code = self.testItinerary1.validateRevisit([2,3]) # Invalid revisit airport self.assertEqual(code, "")
def test_save_route(self): user = '******' city = 'New York' pref = dict() pref['types'] = 'museums' pref['min_price'] = 2000 pref['max_price'] = 5000 pref['radius'] = 2000 itinerary = Itinerary(city, preferences=pref)
def getItinList(db,restrictions=None): outputList={} itins = db.query("select * from itin") for itin in itins: if restrictions is not None and getattr(restrictions,"restrictedLocations") is not None and itin[0] in restrictions.restrictedLocations: continue #Ignore any restricted locations when building list itinId=itin[0] weatherLoc=itin[6] weatherLocElevation=db.conn.cursor().execute("select elevation from stations where noaaID=?",(weatherLoc,)).fetchone()[0] outputList[itinId]=Itinerary(db,itinId,itin[1],itin[2],itin[3],itin[4],itin[5],weatherLoc,itin[7],itin[8],itin[9],itin[10],itin[11],itin[12],itin[13],itin[14],weatherLocElevation) return outputList
def test_itinerary2(self): user = '******' city = 'New York' pref = dict() pref['types'] = 'museums' pref['min_price'] = 2000 pref['max_price'] = 1000 pref['radius'] = 2000 itinerary = Itinerary(city, preferences=pref) SystemTests.itinerary = itinerary assert itinerary.city is 'New York'
def route(): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) if request.method == 'GET': return render_template('route.html', this_username=session['username'], error="") else: try: preferences = dict() preferences['time_spent'] = request.form.get('rangeInput') if int(preferences['time_spent']) > DAY_LIMIT: preferences['time_spent'] = DAY_LIMIT preferences['max_price'] = request.form.get('price') city = request.form.get('city') preferences['types'] = request.form.getlist('t_spot') itinerary = Itinerary(city, preferences=preferences) session['current_view_itinerary'] = itinerary.to_dict() return render_template('show_itinerary.html', this_username=session['username'], itinerary=session['current_view_itinerary'], error="") except Exception as e: #print e if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) return render_template('index.html', this_username=session['username'], show_what="Welcome!", result_info_list='')
def test_1(self): try: user = '******' city = 'New York' pref = dict() pref['types'] = 'museums' pref['min_price'] = 2000 pref['max_price'] = 5000 pref['radius'] = -1 itinerary = Itinerary(city, preferences=pref) SystemTests.itinerary = itinerary assert itinerary.city is not 'New York' except Exception as e: pass else: assert itinerary.city is 'New York'
def test_DBApi_save_load_itinerary(self): user = '******' city = 'New York' pref = dict() pref['types'] = 'museums' pref['min_price'] = 1 pref['max_price'] = 3 pref['radius'] = 2000 itinerary = Itinerary(city, preferences=pref) ExploriumDbApi.save_itinerary(user, itinerary) result = ExploriumDbApi.get_user_itineraries(user) ##print('------------------------------------------') ##print(result) ##print('------------------------------------------') state = 0 if result is not None or u"": state = 1 assert state == 1
def test_controller_add_remove_user_id(self): query = ExploriumDbApi.USER_ITINERARIES.delete().where(ExploriumDbApi.USER_ITINERARIES.c.user_id == 1144) ExploriumDbApi.conn.execute(query) tester = app.test_client(self) user = '******' it = Itinerary('New York', None) self.assertNotEqual(it, None) it_id = ExploriumDbApi.save_itinerary(user, it) tester.post( '/signin', data=dict(user_username="******", user_password="******"), follow_redirects=True ) tester.post( '/route', data={ 'rangeInput': 15, 'price': 1000, 'max_price': 5000, 'city': "Paris", 't_spot': ["museums"] }, follow_redirects=True ) tester.post( '/add_user/'+str(it_id), data={ 'user': '******', }, follow_redirects=True ) response = tester.get('/view_itineraries', content_type='html/text') self.assertIn(b'helloworld', response.data) tester.post( '/remove_user/'+str(it_id), data={ 'user': '******', }, follow_redirects=True ) response = tester.get('/view_itineraries', content_type='html/text') self.assertNotIn(b'helloworld', response.data)
def add_tourist_spot(t_id): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) it_id = request.args.get('itinerary') query = ExploriumDbApi.ITINERARY_TABLE.select().where(ExploriumDbApi.ITINERARY_TABLE.c.itinerary_id == it_id) result = ExploriumDbApi.conn.execute(query).fetchone() if result: cur_itinerary = Itinerary(result['city'], db_id=it_id) cur_itinerary.add_spot(ExploriumDbApi.load_tourist_spot(ts_id=t_id)) new_db_id = ExploriumDbApi.save_itinerary(session['username'], cur_itinerary) cur_itinerary.db_id = new_db_id query = ExploriumDbApi.COMMENTS.update().where(ExploriumDbApi.COMMENTS.c.itinerary_id == it_id).values(itinerary_id=new_db_id) ExploriumDbApi.conn.execute(query) cur_itinerary.db_id = new_db_id ExploriumDbApi.delete_itinerary(it_id) return redirect(url_for('spotdetail', dest_id=t_id))
def delete_tourist_spot(t_id): if 'username' not in session or 'password' not in session: return redirect(url_for('signin')) if 'current_view_itinerary' in session: if session['current_view_itinerary']['db_id'] is not None: cur_itinerary = Itinerary(session['current_view_itinerary']['city'], db_id =session['current_view_itinerary']['db_id']) cur_itinerary.del_spot(ExploriumDbApi.load_tourist_spot(ts_id=t_id)) new_db_id = ExploriumDbApi.save_itinerary(session['username'], cur_itinerary) query = ExploriumDbApi.COMMENTS.update().where(ExploriumDbApi.COMMENTS.c.itinerary_id == session['current_view_itinerary']['db_id']).values(itinerary_id=new_db_id) ExploriumDbApi.conn.execute(query) cur_itinerary.db_id = new_db_id ExploriumDbApi.delete_itinerary(session['current_view_itinerary']['db_id']) session['current_view_itinerary'] = cur_itinerary.to_dict() return render_template('show_itinerary.html', this_username=session['username'], city=session['current_view_itinerary']['city'], itinerary=session['current_view_itinerary'], error="") return render_template('index.html', this_username=session['username'], show_what="Welcome!", result_info_list='')
def read(self, flights, deps, sinks): itins = [] self.f.readline() line = self.f.readline() while line is not '': args = line.split(',') ff = flights.get(int(args[0]), None) sf = flights.get(int(args[1]), None) psgrs = int(args[2]) if sf is None: sink = sinks[ff.j.j] else: sink = sinks[sf.j.j] itin = Itinerary(ff, sf, psgrs, sink) itins.append(itin) line = self.f.readline() self.f.close() list = [] for itin in itins: if itin.canceled(): #Next-day flight arcs list.append(itin) nd = NextDayArc(itin, sinks[itin.end().j]) itin.outgoing.append(nd) itin.end().incoming.append(nd) #Itinerary arrival arcs for dep in deps.get(itin.j.j, []): if dep.t >= itin.t: sa = TripStartArc(itin, dep) itin.outgoing.append(sa) dep.incoming.append(sa) else: itin.ff.reduce(itin.psgrs) if itin.sf != None: itin.sf.reduce(itin.psgrs) return list
import sys from Query import Query from Flights import Flight from Itinerary import Itinerary # Create Query object new_query = Query() # Iterate through every flight in API respons try: for flights in new_query.query_results: # Create flight objects and add to Itinerary object Itinerary.add_flight(Flight(flights)) except: # exit program if no flights found sys.exit(0) # Print all flight objects to terminal Itinerary.list_results() # User chooses a flight Itinerary.choose_flight()
class ItineraryList: def __init__(self,Data): self.__routelist=self.loadData(Data) def loadData(self,Data): numofairports=len(Data)-1 #minus one because last index is aircraftcode airportlist=[] for i in range(numofairports): #seperates airports from aircraft airportlist.append(Data[i]) aircraftcode=Data[numofairports] cheapestroutelist,mincost,cheapestroutedist,shortestroutelist,shortestroutecost,shortestroutedist=ItineraryList.calculationForFiveRoutes(self,airportlist,aircraftcode) self.obj1=Itinerary(cheapestroutelist,mincost,cheapestroutedist,shortestroutelist,shortestroutecost,shortestroutedist,Data[5]) def getCheapestRouteList(self): return self.obj1.getCheapestRouteList() def getMinCost(self): return self.obj1.getMinCost() def getCheapestRouteDist(self): return self.obj1.getCheapestRouteDist() def getShortestRouteList(self): return self.obj1.getShortestRouteList() def getShortestRouteCost(self): return self.obj1.getShortestRouteCost() def getShortestRouteDist(self): return self.obj1.getShortestRouteDist() def getAircraft(self): return self.obj1.getAircraft() def permutations(homeairport,airportlist): possairportlist=list(permutations(airportlist)) routelist=[] for row in possairportlist: row=list(row) row.insert(0,homeairport) row.insert(len(row),homeairport) routelist.append(row) return routelist def calculationForFiveRoutes(self,airportlist,aircraftcode): """ The main code of the project. Takes the list of the airports and aircraft given by the user, eliminates all the impossible routes and with trial and error finds the optimum route. Returns the cheapest route, minimum cost, distance of the optimum route and the impossible routes distance. cheapestroutelist,mincost,routedist,impossible_routes_distancefuel **Parameters**\n ----------\n airportlist: A list consists of 5 airports (IATA codes) taken as an input from the user. aircraftcode: The aircraft's code which will carry on the itinerary. **Returns**\n -------\n cheapestroutelist: The sequence of airports regarding to the optimum route. mincost: The cost of the itinerary. routedist: THe total distance of the itinerary. impossible_routes_distancefuel: The list of the impossible routes. """ homeairport=airportlist.pop(0) routelist=ItineraryList.permutations(homeairport,airportlist) cheapestroutelist,mincost,routedist,bestroutelist,cost1,bestroute,impossible_routes_fullrefuel=ItineraryList.fullrefuel(airportlist,routelist,aircraftcode) cheapestroutelistopt,mincostopt,routedistopt,impossible_routes_distancefuel=ItineraryList.distancerefuel(airportlist,routelist,aircraftcode) if mincostopt<mincost: mincost=mincostopt cheapestroutelist=cheapestroutelistopt routedist=routedistopt if len(impossible_routes_fullrefuel)==24 and len(impossible_routes_distancefuel)==24: #if all possible routes=(4!)*2 are impossible print ... messagebox.showinfo("Impossible route", "This plane cannot complete the specified routes please change the plane or routes") elif len(impossible_routes_fullrefuel)==24: mincost=mincostopt cheapestroutelist=cheapestroutelistopt routedist=routedistopt else: return cheapestroutelist,mincost,routedist,bestroutelist,cost1,bestroute def fullrefuel(airportlist,routelist,aircraftcode): #finds shortest and cheapest routes by full refuel try: aircraft=AircraftList('aircraft.csv') except FileNotFoundError: messagebox.showinfo("Loading error aircraft.csv file", "Unable to load 'aircraft.csv' file please make sure this file and aircraft.csv located on the same file and filename is 'aircraft.csv'") sys.exit(0) try: airport=AirportAtlas('airport.csv') except FileNotFoundError: messagebox.showinfo("Loading error airport.csv file", "Unable to load 'airport.csv' file please make sure this file and airport.csv located on the same file and filename is 'airport.csv'") sys.exit(0) try: countrycurr=CurrencyList('countrycurrency.csv') except FileNotFoundError: messagebox.showinfo("Loading error countrycurrency.csv file", "Unable to load 'countrycurrency.csv' file please make sure this file and countrycurrency.csv located on the same file and filename is 'countrycurrency.csv'") sys.exit(0) try: currencyrate=CurrencyRateList('currencyrates.csv') except FileNotFoundError: messagebox.showinfo("Loading error currencyrates.csv file", "Unable to load 'currencyrates.csv' file please make sure this file and currencyrates.csv located on the same file and filename is 'currencyrates.csv'") sys.exit(0) # some initial assignments initialaircraftrange=aircraft.getAircraftRange(aircraftcode) aircraftrange=initialaircraftrange bestroute=10**10 mincost=10**10 tobefueled=0 cost=0 indx=0 currrate=0 impossible_routes_fullrefuel=[] control=0 #for controling the impossible routes for j in range(len(routelist)): totalcost=0 totalroute=0 control=0 #sets control back to zero for k in range(len(airportlist)+1): distance=airport.distanceBetweenAirports(routelist[j][k],routelist[j][k+1]) totalroute+=distance if routelist[j][k]==routelist[j][k+1]: #plane can visit one airport twice but departure and arrival cant be same airport control=1 if distance>aircraftrange: tobefueled=initialaircraftrange-aircraftrange where=airport.getAirportCountry(routelist[j][k]) iseuro=countrycurr.getCurrencyCode(where) currrate=currencyrate.getCurrencyRate(iseuro) cost=tobefueled*currrate aircraftrange+=tobefueled totalcost+=cost if distance>aircraftrange: #still distance is bigger than range even when gas tank is full control=1 #if control is 1 bestroute and cheapest is not calculated indx+=1 aircraftrange=aircraftrange-distance totalroute1=totalroute aircraftrange=initialaircraftrange #================COMPARING=============================== if control == 0: if bestroute>totalroute: bestroute=totalroute bestroutelist=routelist[j] cost1=totalcost if mincost>totalcost: mincost=totalcost cheapestroutelist=routelist[j] routedist=totalroute1 #========================================================= else: impossible_routes_fullrefuel.append(routelist[j]) # for counting impossible routes bestroutelist=0 totalroute=0 cost1=0 if len(impossible_routes_fullrefuel)==24: cheapestroutelist=0 mincost=10**10 routedist=0 bestroutelist=0 cost1=10**10 bestroute=0 return cheapestroutelist,mincost,routedist,bestroutelist,cost1,bestroute,impossible_routes_fullrefuel else: return cheapestroutelist,mincost,routedist,bestroutelist,cost1,bestroute,impossible_routes_fullrefuel def distancerefuel(airportlist,routelist,aircraftcode): #Doing a small optimization by checking whether fully refueling or refueling enough for only that leg's distance is cheaper try: aircraft=AircraftList('aircraft.csv') except FileNotFoundError: messagebox.showinfo("Loading error aircraft.csv file", "Unable to load 'aircraft.csv' file please make sure this file and aircraft.csv located on the same file and filename is 'aircraft.csv'") sys.exit(0) try: airport=AirportAtlas('airport.csv') except FileNotFoundError: messagebox.showinfo("Loading error airport.csv file", "Unable to load 'airport.csv' file please make sure this file and airport.csv located on the same file and filename is 'airport.csv'") sys.exit(0) try: countrycurr=CurrencyList('countrycurrency.csv') except FileNotFoundError: messagebox.showinfo("Loading error countrycurrency.csv file", "Unable to load 'countrycurrency.csv' file please make sure this file and countrycurrency.csv located on the same file and filename is 'countrycurrency.csv'") sys.exit(0) try: currencyrate=CurrencyRateList('currencyrates.csv') except FileNotFoundError: messagebox.showinfo("Loading error currencyrates.csv file", "Unable to load 'currencyrates.csv' file please make sure this file and currencyrates.csv located on the same file and filename is 'currencyrates.csv'") sys.exit(0) initialaircraftrange=aircraft.getAircraftRange(aircraftcode) aircraftrange=initialaircraftrange mincost=10**10 totalcostopt=0 indx=0 currrate=0 impossible_routes_distancefuel=[] control=0 for j in range(len(routelist)): totalroute=0 totalcostopt=0 control=0 for k in range(len(airportlist)+1): distance=airport.distanceBetweenAirports(routelist[j][k],routelist[j][k+1]) totalroute+=distance if routelist[j][k]==routelist[j][k+1]: control=1 if distance>aircraftrange:# refuel enough to complete this leg where=airport.getAirportCountry(routelist[j][k]) iseuro=countrycurr.getCurrencyCode(where) currrate=currencyrate.getCurrencyRate(iseuro) if distance<initialaircraftrange: tobefueledopt=distance-aircraftrange costopt=tobefueledopt*currrate aircraftrange+=tobefueledopt totalcostopt+=costopt if distance>aircraftrange: #still distance is bigger than range even when gas tank is full control=1 #if control is 1 bestroute and cheapest is not calculated indx+=1 aircraftrange=aircraftrange-distance totalroute1=totalroute aircraftrange=initialaircraftrange if control == 0: #=======================COMPARING====================== if mincost>totalcostopt: mincost=totalcostopt cheapestroutelist=routelist[j] routedist=totalroute1 #================================================== else: impossible_routes_distancefuel.append(routelist[j]) # for counting impossible routes bestroutelist=0 totalroute=0 cost1=0 if len(impossible_routes_distancefuel)==24: cheapestroutelist=0 mincost=10**10 routedist=0 return cheapestroutelist,mincost,routedist,impossible_routes_distancefuel else: return cheapestroutelist,mincost,routedist,impossible_routes_distancefuel
def setUp(self): self.route = ["DUB", "HEA", "AAA", "MEL", "POL"] self.testItinerary1 = Itinerary(self.route, "747")
return self.cur def __del__(self): self.conn.close() if __name__ == '__main__': itinList = [] dbManager = DatabaseManager("hikingData.db") conn = dbManager.conn cursor = conn.cursor() itins = cursor.execute("select * from itin") for itin in itins: itinList.append( Itinerary(dbManager, itin[0], itin[1], itin[2], itin[3], itin[4], itin[5], itin[6], itin[7], itin[8], itin[9], itin[10], itin[11], itin[12], itin[13], itin[14])) #append itin objects waypoint_distances = {} waypoint_durations = {} checkCount = 0 addCount = 0 #print(waypoint_distances) gmaps = googlemaps.Client(GOOGLE_MAPS_API_KEY) for (source, target) in combinations(itinList, 2): checkCount += 1 #if checkCount%1000: print("Checked {} pairs".format(checkCount)) sql = "select * from waypoints where source_ID={} and target_ID={}".format( source.id, target.id) #Check for unique row in SQL table if cursor.execute( sql).fetchone() is not None: #skip it if we already got it
def test_init_itinerary_valid(self): it = Itinerary('New York', None) self.assertNotEqual(it, None) self.assertNotEqual(it.touristSpots, None) self.assertGreater(len(it.touristSpots), 0)