def setUp(self): # Itinerary 1 14:30 - 18:17 (3:47) self.begin1 = datetime(2018, 4, 28, 14, 30) self.end1 = datetime(2018, 4, 28, 18, 17) self.td1 = timedelta(hours=3, minutes=47) self.i1 = Itinerary(self.begin1, self.end1) # Itinerary 2 23:30 - 02:12 (2:42) self.begin2 = datetime(2018, 4, 28, 23, 30) self.end2 = datetime(2018, 4, 29, 2, 12) self.td2 = timedelta(hours=2, minutes=42) self.i2 = Itinerary.from_timedelta(self.begin2, self.td2)
def convert(self, dated, begin, end): """date should be a datetime object begin and end should have a %H%M (2345) format origin and destination are three-letter airport codes :type date: datetime.date""" begin, end = self.given_time_zone(dated, begin, end) return Itinerary(begin, end)
def correct_invalid_events(self): for flight in self.duty_day.events: print(flight) r = input("Is flight properly built? y/n").capitalize() if 'N' in r: itinerary_string = input( "Enter itinerary as string (date, begin, blk) 31052018 2206 0122 " ) itinerary = Itinerary.from_string(itinerary_string) flight.scheduled_itinerary = itinerary flight.update_to_db()
def retrieve_flights_from_database(self): SQL = "SELECT * FROM flights WHERE number = ? AND date = ?" conn = sqlite3.connect( 'C:\\Users\\Xico\\Dropbox\\PyCharmProjects\\Orgutrip\\data\\flights.db' ) c = conn.cursor() for duty_day in self.line.return_duty_days(): for flight in duty_day.events: print(50 * '*') print("Flight's actual_itinerary itinerary: ", flight.name) print(flight.actual_itinerary) print() rows = c.execute(SQL, [flight.name, flight.begin.date()]) row = rows.fetchone() if row: begin = datetime.strptime(row[0] + row[3], "%Y-%m-%d%H%M") duration = timedelta(minutes=int(row[5])) scheduled_itinerary = Itinerary.from_timedelta( begin, duration) print("Flight's scheduled itinerary: ", flight.name) flight.published_itinerary = scheduled_itinerary print(flight.published_itinerary) else: rows = c.execute( SQL, [flight.name, flight.begin.date() - timedelta(days=1)]) row = rows.fetchone() if row: begin = datetime.strptime(row[0] + row[3], "%Y-%m-%d%H%M") duration = timedelta(minutes=int(row[5])) scheduled_itinerary = Itinerary.from_timedelta( begin, duration) print("Flight's scheduled itinerary: ", flight.name) flight.published_itinerary = scheduled_itinerary print(flight.published_itinerary) else: pass conn.close()
def build_itinerary(self, roster_day: dict) -> Itinerary: """return marker data, marker's don't have credits """ try: begin = roster_day['begin'] end = roster_day['end'] except KeyError: begin = '0001' end = '2359' # print("Unknown begin and end times for duty") # print("{} {} ".format(self.date_tracker.dated, rD['name'])) # begin, end = input("Begin and END time as HHMM HHMM ").split() itinerary = Itinerary.from_date_and_strings(self.date_tracker.dated, begin, end) return itinerary
def create_reserve(self, rd): formatting = '%d%b%Y%H%M' begin = datetime.strptime(rd['date'] + rd['year'] + rd['begin'], formatting) end = datetime.strptime(rd['date'] + rd['year'] + rd['end'], formatting) if end < begin: end = end - timedelta(days=1) itinerary = Itinerary(begin, end) origin = Airport('MEX') destination = Airport('MEX') route = get_route('0000', origin, destination) route.flight_number = rd['name'] return GroundDuty(route=route, scheduled_itinerary=itinerary)
def convert(self, date, begin, end, endDay=None, origin=None, destination=None): '''date should have a %d%b%y (13FEB2015) format or be a datetime object begin and end should have a %H%M (2345) format origin and destination are three-letter airport codes''' if not self.dataTZ: self.localTimeZone(date, origin, begin, destination, end) else: begin, end = self.givenTimeZone(date, begin, end, endDay) return Itinerary(begin, end)
def from_flight_itinerary(self, roster_day): """Given a group of duties, add them to a DutyDay""" duty_day = DutyDay() for flight in roster_day['flights']: itinerary = Itinerary.from_date_and_strings(self.date_tracker.dated, flight['begin'], flight['end']) origin = Airport(flight['origin']) destination = Airport(flight['destination']) route = get_route(name=flight['name'][-4:], origin=origin, destination=destination) if self.line_type == 'scheduled': f = Flight(route=route, scheduled_itinerary=itinerary) else: f = Flight(route=route, actual_itinerary=itinerary) f.dh = not flight['name'].isnumeric() duty_day.append(f) return duty_day
def setUp(self): self.begin = datetime.datetime(2018, 5, 1, 0, 1) self.end = datetime.datetime(2018, 5, 1, 23, 59) self.it1 = Itinerary(begin=self.begin, end=self.end) self.marker = Marker('X', self.it1, None)
def get_flight(dt_tracker: DateTimeTracker, flight_dict: dict, postpone: bool, suggested_blk: str) -> Flight: # 1. Get the route # take into consideration the last 4 digits Because some flights start with 'DH' # origin = get_airport(flight_dict['origin']) # destination = get_airport(flight_dict['destination']) origin = Airport(flight_dict['origin']) destination = Airport(flight_dict['destination']) route = get_route(flight_dict['name'][-4:], origin, destination) # 2. We need the airline code carrier_code = get_carrier(flight_dict) # 3. Find the flight in the DB begin = copy(dt_tracker.dt) flight = Flight.load_from_db_by_fields(airline_iata_code=carrier_code, scheduled_begin=begin, route=route) # 4. Create and store flight if not found in the DB if not flight: try: if flight_dict['blk'] != '0000': # 4.a Found a regular flight, create it td = dt_tracker.forward(flight_dict['blk']) itinerary = Itinerary.from_timedelta(begin=begin, a_timedelta=td) elif suggested_blk != '0000' and suggested_blk.isnumeric(): # 4.b Found a DH flight in a duty day with a suggested block time td = dt_tracker.forward(suggested_blk) itinerary = Itinerary.from_timedelta(begin=begin, a_timedelta=td) if not itinerary.in_same_month(): # Flight reaches next month and therefore it's block time cannot be determined dt_tracker.backward(suggested_blk) raise UndefinedBlockTime() else: raise UndefinedBlockTime() except UndefinedBlockTime: # 4.d Unable to determine flight blk, must enter it manually if postpone: raise UnbuiltTripError() else: print("FLT {} {} {} {} {} {} ".format( dt_tracker.date, flight_dict['name'], flight_dict['origin'], flight_dict['begin'], flight_dict['destination'], flight_dict['end'])) print("unable to determine DH time.") print("") blk = input("Insert time as HHMM format :") td = dt_tracker.forward(blk) itinerary = Itinerary.from_timedelta(begin=begin, a_timedelta=td) equipment = Equipment(flight_dict['equipment']) flight = Flight(route=route, scheduled_itinerary=itinerary, equipment=equipment, carrier=carrier_code) flight.save_to_db() else: dt_tracker.forward(str(flight.duration)) flight.dh = not flight_dict['name'].isnumeric() return flight