def filterFlights(flights): new_flights=Flights() for f in flights.elements: #print(f.departure.airport, f.arrival.airport, f.departure.airport==f.arrival.airport==airport) if f.departure.airport==f.arrival.airport==airport: new_flights.append(f) #print('\n') return new_flights
def loadFlightData(): # define a global variable called flights that will store the flights object containing all the flights global flights flights = Flights(flightSavesLocation) # fill the currentSelectedLocations to the default 'True' state for location in flights.getFlightLocations(): if not location in currentSelectedLocations: currentSelectedLocations[location] = True
def main(argv): data = Data(argv[1]) data.select_features(argv[2]) flights_data = Flights(data.data) flights_data.filter_by_airport_names("Origin_airport", S) print("Question 1:") flights_data.print_details(DETAILS, STATISTICS_FUNCTIONS) flights_data.compute_empty_seats() unwanted_flights = flights_data.count_bad_flights(3000) answer = "Yes" if unwanted_flights > 3120 else "No" print() print("Question 2:") print(f"Number of unwanted flights: {unwanted_flights}") print(f"Will Mr & Mrs Smith be separated? {answer}")
def get(self, departure=True): for airport_name in self.airport_codes: print(f'Collecting information for airport {airport_name}...') airport = Airport(airport_name, departure=departure) if not airport.is_created(): _ = airport.flights() flights = Flights(airport_name, departure=departure) flights.statuses() time.sleep(4.7)
def query_opensky(callsigns): myFlights = Flights() for callsign in callsigns: start='2020-01-01' end ='2020-01-30' try: aicrafts = opensky.api_aircraft(icao24=callsign, begin=start+' 00:00', end=end+' 23:59') except requests.exceptions.HTTPError as err: if err.response.status_code == 404: print("No result for callsign "+callsign+" in "+str(start)+"-"+str(end)) continue else: raise for _, row in aicrafts.iterrows(): dep_time = datetime.strptime(str(row['firstSeen'])[:19], time_format) arr_time = datetime.strptime(str(row['lastSeen'])[:19], time_format) dep_ap=row['estDepartureAirport'] if dep_ap is not None: dep_ap=dep_ap.strip() arr_ap=row['estArrivalAirport'] if arr_ap is not None: arr_ap=arr_ap.strip() departure=TakeoffLanding(airport=dep_ap, time=dep_time) arrival=TakeoffLanding(airport=arr_ap,time=arr_time) f=MyFlight(callsign=row['callsign'].strip(),icao=row['icao24'].strip(), nnumber=row['callsign'].strip(),departure=departure,arrival=arrival) myFlights.append(f) """ if row['callsign'] is None: print('callsign missing for '+row['icao24']) continue for f in flights: # GET CLOSEST FLIGHT TO TIME WITH SAME CALLSIGN AND ICAO if f.callsign is None: continue #if f.icao24 == row['icao24'] and (row['callsign'] in f.callsign or f.callsign in row['callsign'] or (f.registration is not None and f.registration in row['callsign'])) and (flight is None or abs(row['firstSeen']-f.start)<abs(row['firstSeen']-flight.start)): if f.icao24 == row['icao24']: a = row['callsign'] in f.callsign b = f.callsign in row['callsign'] c = f.registration is not None and f.registration in row['callsign'] if (a or b or c) and (flight is None or abs(row['firstSeen']-f.start)<abs(row['firstSeen']-flight.start)): flight = f if flight is None: dep, arr = getFlightAirports(None, None, row) myFlights.append(MyFlight(row['callsign'].strip(), row['icao24'].strip(), None, dep, arr)) else: dep, arr = getFlightAirports(usAirports, flight, row) f2 = MyFlight(row['callsign'].strip(), row['icao24'].strip(), flight.registration, dep, arr) #myFlights.append(MyFlight(flight.callsign, flight.icao24, flight.registration, dep, arr)) myFlights.append(f2) """ myFlights.to_file('../data/ffl321/jan_flights.json') print(myFlights)
for icao in icaos: count+=1 if icao in done: print(icao+' is already done') continue try: aicrafts = opensky.api_aircraft(icao24=icao, begin=start+' 00:00', end=end+' 23:59') except requests.exceptions.HTTPError as err: if err.response.status_code == 404: print("No result for icao "+icao) continue else: raise myFlights = Flights() for _, row in aicrafts.iterrows(): flight = None if row['callsign'] is None: print('callsign missing for '+row['icao24']) continue for f in flights: # GET CLOSEST FLIGHT TO TIME WITH SAME CALLSIGN AND ICAO if f.callsign is None: continue #if f.icao24 == row['icao24'] and (row['callsign'] in f.callsign or f.callsign in row['callsign'] or (f.registration is not None and f.registration in row['callsign'])) and (flight is None or abs(row['firstSeen']-f.start)<abs(row['firstSeen']-flight.start)): if f.icao24 == row['icao24']: a = row['callsign'] in f.callsign b = f.callsign in row['callsign'] c = f.registration is not None and f.registration in row['callsign'] if (a or b or c) and (flight is None or abs(row['firstSeen']-f.start)<abs(row['firstSeen']-flight.start)):
from flights import Flights flights = Flights() ''' Can also call: - flights.getCancelledPorts() - flights.getFlightCancelsByDay() - flights.getFlightCancelsByWeek() - flights.getTopCancelledPorts() - flights.getTopPortsFlightCancelsByDay() - flights.getTopFlightCancelsByWeek() - flights.getFlightCancelsByMonth() ''' flights.getSummaryFlightCancelsByMonth() flights.totalFlightsByMonth()
def addSheet(wb, filename): month = filename.split('.')[0] allFlights = Flights() allFlights.from_file(flightslistpath + filename) ws = wb.create_sheet(month) ws.title = month row0 = 1 row_title = row0 row_desc = row_title + 1 row_unit = row_desc + 1 row_data = row_unit + 1 col0 = 1 col_icao = col0 col_callsign = col_icao + 1 col_nnumber = col_callsign + 1 col_dep_ap = col_nnumber + 1 col_dep_time = col_dep_ap + 1 col_dep_ap_pos_lat = col_dep_time + 1 col_dep_ap_pos_lon = col_dep_ap_pos_lat + 1 col_dep_ap_pos_alt = col_dep_ap_pos_lon + 1 col_dep_ac_pos_lat = col_dep_ap_pos_alt + 1 col_dep_ac_pos_lon = col_dep_ac_pos_lat + 1 col_dep_ac_pos_alt = col_dep_ac_pos_lon + 1 col_arr_ap = col_dep_ac_pos_alt + 1 col_arr_time = col_arr_ap + 1 col_arr_ap_pos_lat = col_arr_time + 1 col_arr_ap_pos_lon = col_arr_ap_pos_lat + 1 col_arr_ap_pos_alt = col_arr_ap_pos_lon + 1 col_arr_ac_pos_lat = col_arr_ap_pos_alt + 1 col_arr_ac_pos_lon = col_arr_ac_pos_lat + 1 col_arr_ac_pos_alt = col_arr_ac_pos_lon + 1 col_last = col_arr_ac_pos_alt + 1 ws.merge_cells(start_row=row_title, end_row=row_title, start_column=col_icao, end_column=col_nnumber) ws.cell(row=row_title, column=col_icao).value = 'Identification Numbers' ws.cell(row=row_title, column=col_icao).alignment = Alignment(horizontal='center') ws.cell(row=row_desc, column=col_icao).value = 'ICAO24' ws.cell(row=row_desc, column=col_callsign).value = 'Callsign' ws.cell(row=row_desc, column=col_nnumber).value = 'N-Number' ws.merge_cells(start_row=row_title, end_row=row_title, start_column=col_dep_ap, end_column=col_dep_ac_pos_alt) ws.cell(row=row_title, column=col_dep_ap).value = "Departure" ws.cell(row=row_title, column=col_dep_ap).alignment = Alignment(horizontal='center') ws.cell(row=row_desc, column=col_dep_ap).value = 'Departure Airport' ws.cell(row=row_unit, column=col_dep_ap).value = 'ICAO number' ws.cell(row=row_desc, column=col_dep_time).value = 'Departure Time' ws.cell(row=row_unit, column=col_dep_time).value = 'YYYY-MM-DD HH:MM:SS' ws.merge_cells(start_row=row_desc, end_row=row_desc, start_column=col_dep_ap_pos_lat, end_column=col_dep_ap_pos_alt) ws.cell(row=row_desc, column=col_dep_ap_pos_lat).value = 'Departure Airport Positon' ws.cell( row=row_desc, column=col_dep_ap_pos_lat).alignment = Alignment(horizontal='center') ws.cell(row=row_unit, column=col_dep_ap_pos_lat).value = 'Latitude' ws.cell(row=row_unit, column=col_dep_ap_pos_lon).value = 'Longitude' ws.cell(row=row_unit, column=col_dep_ap_pos_alt).value = 'Altitude' ws.merge_cells(start_row=row_desc, end_row=row_desc, start_column=col_dep_ac_pos_lat, end_column=col_dep_ac_pos_alt) ws.cell(row=row_desc, column=col_dep_ac_pos_lat).value = 'First Aircraft Positon' ws.cell( row=row_desc, column=col_dep_ac_pos_lat).alignment = Alignment(horizontal='center') ws.cell(row=row_unit, column=col_dep_ac_pos_lat).value = 'Latitude' ws.cell(row=row_unit, column=col_dep_ac_pos_lon).value = 'Longitude' ws.cell(row=row_unit, column=col_dep_ac_pos_alt).value = 'Altitude' ws.merge_cells(start_row=row_title, end_row=row_title, start_column=col_arr_ap, end_column=col_arr_ac_pos_alt) ws.cell(row=row_title, column=col_arr_ap).value = "Arrival" ws.cell(row=row_title, column=col_arr_ap).alignment = Alignment(horizontal='center') ws.cell(row=row_desc, column=col_arr_ap).value = 'Arrival Airport' ws.cell(row=row_unit, column=col_arr_ap).value = 'ICAO number' ws.cell(row=row_desc, column=col_arr_time).value = 'Departure Time' ws.cell(row=row_unit, column=col_arr_time).value = 'YYYY-MM-DD HH:MM:SS' ws.merge_cells(start_row=row_desc, end_row=row_desc, start_column=col_arr_ap_pos_lat, end_column=col_arr_ap_pos_alt) ws.cell(row=row_desc, column=col_arr_ap_pos_lat).value = 'Arrival Airport Positon' ws.cell( row=row_desc, column=col_arr_ap_pos_lat).alignment = Alignment(horizontal='center') ws.cell(row=row_unit, column=col_arr_ap_pos_lat).value = 'Latitude' ws.cell(row=row_unit, column=col_arr_ap_pos_lon).value = 'Longitude' ws.cell(row=row_unit, column=col_arr_ap_pos_alt).value = 'Altitude' ws.merge_cells(start_row=row_desc, end_row=row_desc, start_column=col_arr_ac_pos_lat, end_column=col_arr_ac_pos_alt) ws.cell(row=row_desc, column=col_arr_ac_pos_lat).value = 'Last Aircraft Positon' ws.cell( row=row_desc, column=col_arr_ac_pos_lat).alignment = Alignment(horizontal='center') ws.cell(row=row_unit, column=col_arr_ac_pos_lat).value = 'Latitude' ws.cell(row=row_unit, column=col_arr_ac_pos_lon).value = 'Longitude' ws.cell(row=row_unit, column=col_arr_ac_pos_alt).value = 'Altitude' for i in range(col0, col_last): ws.column_dimensions[chr(ord('A') - col0 + i)].width = 15 ws.column_dimensions[chr(ord('A') - col0 + col_dep_time)].width = 19 ws.column_dimensions[chr(ord('A') - col0 + col_arr_time)].width = 19 for f in allFlights.elements: ws.cell(row=row_data, column=col_icao).value = f.icao.strip() ws.cell(row=row_data, column=col_callsign).value = f.callsign.strip() if f.nnumber is not None: #if 'None' not in f.nnumber: ws.cell(row=row_data, column=col_nnumber).value = f.nnumber if f.departure.airport is not None: #if 'None' not in f.departure.airport: ws.cell(row=row_data, column=col_dep_ap).value = f.departure.airport ws.cell(row=row_data, column=col_dep_time).value = str(f.departure.time) if f.departure.airport_position is not None: ws.cell(row=row_data, column=col_dep_ap_pos_lat ).value = f.departure.airport_position.latitude ws.cell(row=row_data, column=col_dep_ap_pos_lon ).value = f.departure.airport_position.longitude ws.cell(row=row_data, column=col_dep_ap_pos_alt ).value = f.departure.airport_position.altitude if f.departure.aircraft_position is not None: ws.cell(row=row_data, column=col_dep_ac_pos_lat ).value = f.departure.aircraft_position.latitude ws.cell(row=row_data, column=col_dep_ac_pos_lon ).value = f.departure.aircraft_position.longitude ws.cell(row=row_data, column=col_dep_ac_pos_alt ).value = f.departure.aircraft_position.altitude if f.arrival.airport is not None: #if 'None' not in f.arrival.airport: ws.cell(row=row_data, column=col_arr_ap).value = f.arrival.airport ws.cell(row=row_data, column=col_arr_time).value = str(f.arrival.time) if f.arrival.airport_position is not None: ws.cell(row=row_data, column=col_arr_ap_pos_lat ).value = f.arrival.airport_position.latitude ws.cell(row=row_data, column=col_arr_ap_pos_lon ).value = f.arrival.airport_position.longitude ws.cell(row=row_data, column=col_arr_ap_pos_alt ).value = f.arrival.airport_position.altitude if f.arrival.aircraft_position is not None: ws.cell(row=row_data, column=col_arr_ac_pos_lat ).value = f.arrival.aircraft_position.latitude ws.cell(row=row_data, column=col_arr_ac_pos_lon ).value = f.arrival.aircraft_position.longitude ws.cell(row=row_data, column=col_arr_ac_pos_alt ).value = f.arrival.aircraft_position.altitude row_data += 1 return wb
def __init__(self): self.airplanes = Airplanes('airplanes') self.flights = Flights('flights')
class Menu: def __init__(self): self.airplanes = Airplanes('airplanes') self.flights = Flights('flights') @staticmethod def show_options(): print('Press 1: Airplanes') print('Press 2: Flights') @staticmethod def ask(question): while True: check = input(question + ' (y/n) ').lower() if check in ('y', 'yes'): return True elif check in ('n', 'no'): return False def serialize(self): try: self.airplanes.serialize() self.flights.serialize() except OSError as e: print(e) except pickle.PickleError: print('Serialization error!') def deserialize(self): try: self.airplanes.deserialize() self.flights.deserialize() except OSError as e: print(e) except pickle.PickleError: print('Deserialization error!') # Print: @staticmethod def print_help(): print('help -- Print all commands') print('exit -- Exiting the program') print('show -- Show list') print('add -- Add item to list') print('edit -- Edit list item') print('del -- Remove item from list') print('drop -- Clear list') print('search -- Search for aircraft') def print_planes(self): print('Airplanes:') print(self.airplanes) def print_flights(self): print('Flights:') print(self.flights) # Add def add_plane(self): airplane = self.input_and_get_plane() if airplane: self.airplanes.insert(airplane) print('Added:', airplane) def input_and_get_plane(self): number = input('Number: ') if not number: print('Invalid input!') return if self.airplanes.exists(number): print('Plane already exists!') return pilot = input('Pilot: ') seats = input('Seats: ') return Airplane(number, pilot, seats) def add_flight(self): flight = self.input_and_get_flight() if flight: self.flights.insert(flight) print('Added:', flight) def input_and_get_flight(self): number = input('Number: ') if not number: print('Invalid input!') return if self.flights.exists(number): print('Flight already exists!') return whence = input('Whence: ') where = input('Where: ') plane = input('Plane: ') if not self.airplanes.exists(plane): print('Plane does not exist!') return return Flight(number, whence, where, plane) # Edit def edit_plane(self): number = input('Number: ') if not number: print('Invalid input!') return if not self.airplanes.exists(number): print('Plane does not exist!') return pilot = input('Pilot (new): ') seats = input('Seats (new): ') updated = self.airplanes.update(number, pilot, seats) print('Edited:', updated) def edit_flight(self): number = input('Number: ') if not number: print('Invalid input!') return if not self.flights.exists(number): print('Flight does not exist!') return whence = input('Whence (new): ') where = input('Where (new): ') plane = input('Plane (new): ') if not self.airplanes.exists(plane): print('Plane does not exist!') return updated = self.flights.update(number, whence, where, plane) print('Edited:', updated) # Delete def delete_plane(self): number = input('Number: ') if not number: print('Invalid input!') return check = self.airplanes.remove(number) if check: self.flights.delete_planes(number) print('Successfully deleted!') else: print('Airplane does not exist!') def delete_flight(self): number = input('Number: ') if not number: print('Invalid input!') return check = self.flights.remove(number) if check: print('Successfully deleted!') else: print('Flight does not exist!') # Drop def drop_planes(self): check = self.ask('Delete the list (Airplanes)?') if check: numbers = self.airplanes.numbers() self.flights.delete_planes(*numbers) self.airplanes.drop() print('Successfully deleted!') def drop_flights(self): check = self.ask('Delete the list (Flights)?') if check: self.flights.drop() print('Successfully deleted!') # Search def search_planes(self): where = input('Where: ') if not where: print('Invalid input!') return numbers = self.flights.get_planes(lambda x: x.where == where) filtered = self.airplanes.filter(lambda x: x.number in numbers) print('Filtered by country:', where) print('\n'.join(str(x) for x in filtered))
from flights import Flights from datetime import datetime from os import listdir from os.path import isfile, join """ Create a monthly lists of flights from individual icao recordings """ months = [ 'jun04-jul03', 'jul04-aug02', 'aug03-sep01', 'sep02-oct01', 'oct02-31', 'november_test', 'december01-30_test', 'dec31-jan01_test', 'january02-31_test', 'feb_test', 'march01-30', 'mar31-apr29' ] allFlights = Flights() for month in months: mypath = '../data/' + month onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))] for s in onlyfiles: newFlights = Flights() try: newFlights.from_file(mypath + '/' + s) except: continue allFlights.concat(newFlights) for f in allFlights.elements: f.departure.time = f.departure.time