示例#1
0
    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)
示例#2
0
    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)
示例#3
0
 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()
示例#4
0
 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()
示例#5
0
    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
示例#6
0
 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)
示例#7
0
    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)
示例#8
0
 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
示例#9
0
 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)
示例#10
0
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