Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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}")
Esempio n. 4
0
    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)
Esempio n. 5
0
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)):
Esempio n. 7
0
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
Esempio n. 9
0
 def __init__(self):
     self.airplanes = Airplanes('airplanes')
     self.flights = Flights('flights')
Esempio n. 10
0
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