예제 #1
0
    def get_flights(
        self,
        departure_iata,
        destination_iata,
        departure_date,
        return_date,
        currency="GBP",
        min_nights=7,
        max_nights=28,
        stop_overs=0,
    ):
        """find flight information using Tequila Kiwi API and return a
        FlightData object

        Args:
            departure_iata (str): IATA Code for origin city
            destination_iata (str): IATA Code for destination city
            departure_date (str): dd/mm/YYYY for earliest departure
            return_date (str): dd/mm/YYYY for latest return
            currency (str, optional): currency to return. Defaults to "GBP".
            min_nights (int, optional): minimum nights. Defaults to 7.
            max_nights (int, optional): maximum nights. Defaults to 28.

        Returns:
            FlightData: FlightData for lowst cost flight
        """
        url = self.url_base + "/v2/search"
        params = {
            "fly_from": departure_iata,
            "fly_to": destination_iata,
            "date_from": departure_date,
            "date_to": return_date,
            "nights_in_dst_from": min_nights,
            "nights_in_dst_to": max_nights,
            "curr": currency,
            "flight_type": "round",
            "one_for_city": 1,
            "max_stopovers": stop_overs,
        }
        response = requests.get(url, params=params, headers=self.headers)
        data = response.json()
        # course reccomends a try/except block here instead...I disagree
        if len(data["data"]) > 0:
            data = data["data"][0]
        else:
            if stop_overs < 3:
                stop_overs += 1
                return self.get_flights(
                    departure_iata,
                    destination_iata,
                    departure_date,
                    return_date,
                    currency,
                    min_nights,
                    max_nights,
                    stop_overs=stop_overs,
                )
            else:
                return None

        flight_data = FlightData(
            departure_city=data["cityFrom"],
            departure_airport=data["flyFrom"],
            destination_city=data["cityTo"],
            destination_airport=data["flyTo"],
            departure_date=data["route"][0]["local_departure"].split("T")[0],
            return_date=data["route"][-1]["local_arrival"].split("T")[0],
            price=data["price"],
        )
        if stop_overs > 0:
            flight_data.stop_overs = stop_overs
            flight_data.via_city = data["route"][0]["cityTo"]

        return flight_data