def get_catering_closed_sessions(self, flight_number='', departure_airport='', start_date='', end_date=''): # load catering sessions statistic for given airport/dates/flight def get_one(self, flight_number=flight_number, departure_airport=departure_airport, start_date=start_date, end_date=end_date, length=1000): r = self.session.get( URLs.get_catering_closed_sessions.format( flight_number=flight_number, departure_airport=departure_airport, start_date=start_date, end_date=end_date, length=length)) r = json.loads(r.content)['data'] return r if departure_airport and departure_airport.upper() != 'SVO': cat_sessions = get_one(self, departure_airport=departure_airport, start_date=start_date, end_date=end_date) cat_sessions = pd.DataFrame(data=cat_sessions) else: cat_sessions = [] dates_range = crew_utils.date_iterator(start_date, end_date=end_date) for d in dates_range: sessions = get_one(self, departure_airport=departure_airport, start_date=d, end_date=d) cat_sessions.append(pd.DataFrame(data=sessions)) cat_sessions = pd.concat(cat_sessions, axis=0, sort=False) cat_sessions = cat_sessions.drop('display', axis=1) cat_sessions = crew_utils.dtrowid_to_index(cat_sessions) cat_sessions['earliestLocalDepartureDate'] = cat_sessions[ 'earliestLocalDepartureDate'].astype('datetime64') cat_sessions['latestLocalDepartureDate'] = cat_sessions[ 'latestLocalDepartureDate'].astype('datetime64') cat_sessions['amountOfOrders'] = cat_sessions['amountOfOrders'].astype( 'int') cat_sessions['amountOfCrewOperated'] = cat_sessions[ 'amountOfCrewOperated'].astype('int') cat_sessions['amountOfOrdersServed'] = cat_sessions[ 'amountOfOrdersServed'].astype('int') return cat_sessions
def get_flights_table(interface, start_date, num_of_days, filter_numbers=None): df = interface.get_flights_table(start_date, num_of_days=-3) dates_in_df = set([d.strftime('%Y-%m-%d') for d in list(set(df['departureDateStart']))]) dates_range = list(date_iterator(start_date, num_of_days=-num_of_days)) dfs_to_add = [] for date in set(dates_range).difference(dates_in_df): dfs_to_add.append(interface.get_flights_table(date, num_of_days=1)) df = pd.concat([df] + dfs_to_add, axis=0, sort=False) df = df.drop_duplicates() df['dayOfWeek'] = df['departureDateStart'].dt.dayofweek df['departureDateStart'] = df['departureDateStart'].astype('datetime64') df['flightNumber'] = df['flightNumber'].astype('int') if filter_numbers: df = df[df['flightNumber'] < filter_numbers] return df
def get_reports_table(self, start_date, num_of_days, report='purser'): # load crew reports records, all parameters in url_params dict (start/end dates, form id, staff id, flight num, # tail number, dep/arr airport, length of list if type(start_date) is datetime: start_date = start_date.strftime('%Y-%m-%d') form_id = {'purser': '51', 'otchet_sb': '32'} url_params = { "staff_id": '', "flight_number": '', "departure_airport": '', "arrival_airport": '', "reg_number": '', "length": 10000, "form_id": form_id[report] } reports_table = [] dates_range = crew_utils.date_iterator(start_date, num_of_days=num_of_days) for date in dates_range: url_params['start_date'] = url_params['end_date'] = date url = URLs.URL_monitor_reports.format(**url_params) reports = self.session.get(url) reports = json.loads(reports.content)['data'] reports_table.append(pd.DataFrame(data=reports)) reports_table = pd.concat(reports_table, axis=0, sort=False) reports_table = crew_utils.dtrowid_to_index(reports_table) reports_table = reports_table.drop([ 'manualProcessingProcessedDate', 'download', 'manualProcessingStaffId', 'id' ], axis=1, errors='ignore') reports_table['lastUpdate'] = reports_table['lastUpdate'].astype( 'datetime64') reports_table['departureDate'] = reports_table['departureDate'].astype( 'datetime64') reports_table['lastUpdateEnd'] = reports_table['lastUpdateEnd'].astype( 'datetime64') reports_table['flightNumber'] = reports_table['flightNumber'].astype( 'int') return reports_table
def get_sync_table(interface, departure_airport, start_date, end_date, max_delay): # return table with syncs/crew for one airport df_syncs = interface.get_syncs(departure_dates=crew_utils.date_iterator( start_date, end_date=end_date), departure_airports=(departure_airport, )) df_syncs['diff'] = ( df_syncs['scheduledDepartureDateTime'] - df_syncs['synchronizationDate']).astype('timedelta64[m]') df_syncs['interval'] = df_syncs.apply( lambda row: check_sync_intervals(row, max_delay), axis=1) df_crews = get_crew_list(itf, start_date, end_date, departure_airport) df = df_syncs.merge(df_crews, left_on=['staffId', 'flightNumber', 'departureDate'], right_on=['staffId', 'flightNumber', 'departureDate']) interval_ranged = pd.api.types.CategoricalDtype( categories=['boarded', 'check in', 'booked', 'late_data'], ordered=True) df['interval'] = df['interval'].astype(interval_ranged) df['boardedCount'] = df['boardedCount'].astype('int') df = df.sort_values(['interval', 'boardedCount'], ascending=[True, False]) return df.drop_duplicates(['staffId', 'flightNumber', 'departureDate'])
def get_flights_table(self, start_date, end_date=None, num_of_days=None, flight_numbers='', departure_airport='', arrival_airport='', length=2000, id_only=False, filter_status=False): # get flight table for range of dates OR one flight DB ID if departure_airport and departure_airport.upper() != 'SVO': f = self.session.get( URLs.URL_flights_list.format( flight_number=flight_numbers, departure_airport=departure_airport, arrival_airport=arrival_airport, departure_date='', length=length)) f = json.loads(f.content)['data'] flights = pd.DataFrame(data=f) else: flights = [] dates_range = crew_utils.date_iterator(start_date, end_date=end_date, num_of_days=num_of_days) if flight_numbers and type(flight_numbers) is str: flight_numbers = (flight_numbers, ) for d in dates_range: f = self.session.get( URLs.URL_flights_list.format( flight_number='', departure_airport=departure_airport, arrival_airport=arrival_airport, departure_date=d, length=length)) f = json.loads(f.content)['data'] flights.append(pd.DataFrame(data=f)) flights = pd.concat(flights, axis=0, sort=False) flights = crew_utils.dtrowid_to_index(flights) flights = flights.drop('details', axis=1) if flight_numbers: flights = flights[flights['flightNumber'].isin(flight_numbers)] if flights.empty: print('no flights found!!') if id_only: return flights.index[0] if filter_status: flights = flights[flights['flightStatusLabel'] != filter_status] flights['departureDateStart'] = flights['departureDateStart'].astype( 'datetime64') flights = flights[flights['departureDateStart'].isin( list( crew_utils.date_iterator(start_date, end_date=end_date, num_of_days=num_of_days)))] flights['paxInfoAvailable'] = flights['paxInfoAvailable'].replace({ '<i class="fa fa-ban"></i><span class="hidden">false</span>': False, '<i class="fa fa-check"></i><span class="hidden">true</span>': True }) #flights['flightNumber'] = flights['flightNumber'].astype('int') return flights
def get_syncs(self, departure_dates=(), start_date=None, end_date=None, staff_id='', flight_number='', departure_airports=(), length=25000): # load user's app<->server synchronizations # lastUpdate == Last DCS call, synchronizationDate == Sync Timestamp syncs = [] if not departure_dates and not departure_airports and not ( start_date and end_date): print( 'no date or airport given for sync filter, please add params') return if not departure_dates: departure_dates = crew_utils.date_iterator(start_date, end_date=end_date) if flight_number: flight_number = '0' * (4 - len(flight_number)) + flight_number if departure_airports: for date in departure_dates: for airport in departure_airports: print('parsing flight status syncs for {}...'.format(date)) r = self.session.get( URLs.URL_monitor_syncs.format( departure_date=date, flight_number=flight_number, departure_airport=airport, staff_id=staff_id, sort='asc', length=length)) r = json.loads(r.content)['data'] syncs.append(pd.DataFrame(data=r)) else: # too much results will be returned if no filtering for airports given if not departure_dates: departure_dates = ('', ) for date in departure_dates: print('parsing flight status syncs for {}...'.format(date)) asc = self.session.get( URLs.URL_monitor_syncs.format(departure_date=date, flight_number=flight_number, departure_airport='', staff_id=staff_id, sort='asc', length=length)) asc = json.loads(asc.content)['data'] syncs.append(pd.DataFrame(data=asc)) desc = self.session.get( URLs.URL_monitor_syncs.format(departure_date=date, flight_number=flight_number, departure_airport='', staff_id=staff_id, sort='desc', length=length)) desc = json.loads(desc.content)['data'] syncs.append(pd.DataFrame(data=desc)) syncs = pd.concat(syncs, axis=0, sort=False) syncs = syncs.drop_duplicates() syncs = crew_utils.dtrowid_to_index(syncs) syncs['lastUpdate'] = syncs['lastUpdate'].astype('datetime64') syncs['departureDate'] = syncs['departureDate'].astype('datetime64') syncs['scheduledDepartureDateTime'] = syncs[ 'scheduledDepartureDateTime'].astype('datetime64') syncs['synchronizationDate'] = syncs['synchronizationDate'].astype( 'datetime64') return syncs