farepy.base#

Normalized data model for multi-source flight search.

Classes

FlightOffer(source, outbound, price, ...[, ...])

A single bookable flight option, normalized across all sources.

FlightSource(*args, **kwargs)

Protocol that all source adapters implement.

Itinerary(segments[, duration_minutes])

One direction of travel (outbound or return).

SearchRequest(origin, destination, ...[, ...])

Normalized search parameters.

SearchResult(request, offers, ...[, cached])

Container for search results with metadata.

Segment(departure_airport, arrival_airport, ...)

A single flight leg (one takeoff-to-landing).

class farepy.base.FlightOffer(source, outbound, price, currency, airlines, inbound=None, booking_url=None, raw=None)[source]#

Bases: object

A single bookable flight option, normalized across all sources.

class farepy.base.FlightSource(*args, **kwargs)[source]#

Bases: Protocol

Protocol that all source adapters implement.

is_available()[source]#

Check availability. Returns (available, message).

Return type:

tuple[bool, str]

search(request)[source]#

Search for flights. Returns empty list on no results.

Return type:

list[FlightOffer]

class farepy.base.Itinerary(segments, duration_minutes=None)[source]#

Bases: object

One direction of travel (outbound or return).

class farepy.base.SearchRequest(origin, destination, departure_date, return_date=None, adults=1, currency='EUR', max_results=50, non_stop=None, outbound_departure_after=None, outbound_departure_before=None, outbound_arrival_after=None, outbound_arrival_before=None, inbound_departure_after=None, inbound_departure_before=None, inbound_arrival_after=None, inbound_arrival_before=None)[source]#

Bases: object

Normalized search parameters.

class farepy.base.SearchResult(request, offers, sources_queried, sources_failed, searched_at, cached=False)[source]#

Bases: object

Container for search results with metadata.

class farepy.base.Segment(departure_airport, arrival_airport, departure_time, arrival_time, carrier, carrier_name=None, flight_number=None, duration_minutes=None, aircraft=None)[source]#

Bases: object

A single flight leg (one takeoff-to-landing).

**Times are local wall-clock times at the airport they refer to, with no zone** (departure_time at departure_airport, arrival_time at arrival_airport), which is how airlines and every source publish them. They are naive on purpose: attaching a zone would need an airport-to-zone table this package does not carry. So compare or sort them only against times at the same airport (e.g. filtering departures from one origin); a departure and an arrival in different zones cannot be subtracted to get a flight time – use duration_minutes for that. SearchResult.searched_at is the one timestamp that is UTC (see farepy.util.now_iso()). A source that does not report a time leaves it as "".