diff --git a/pyrail/models.py b/pyrail/models.py index 3cb64b9..07dafa3 100644 --- a/pyrail/models.py +++ b/pyrail/models.py @@ -82,7 +82,7 @@ class PlatformInfo(DataClassORJSONMixin): """Details about the platform, such as name and whether it is the normal one.""" name: str # Platform name - normal: bool # Whether it is the normal platform + normal: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether it is the normal platform @dataclass @@ -104,9 +104,11 @@ class LiveboardDeparture(DataClassORJSONMixin): metadata=field_options(deserialize=_timestamp_to_datetime) ) # Departure time (timestamp) delay: int # Delay in seconds - canceled: bool # Whether the departure is canceled - left: bool # Whether the train has left - is_extra: bool = field(metadata=field_options(alias="isExtra")) # Whether the train is extra + canceled: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the departure is canceled + left: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the train has left + is_extra: bool = field( + metadata=field_options(alias="isExtra", deserialize=str_to_bool) + ) # Whether the train is extra vehicle: str # Vehicle identifier vehicle_info: VehicleInfo = field(metadata=field_options(alias="vehicleinfo")) # Vehicle details platform: str # Platform name @@ -174,16 +176,22 @@ class ConnectionStop(DataClassORJSONMixin): scheduled_arrival_time: datetime = field( metadata=field_options(alias="scheduledArrivalTime", deserialize=_timestamp_to_datetime) ) # Scheduled arrival time - arrival_canceled: bool = field(metadata=field_options(alias="arrivalCanceled")) # Arrival cancellation status - arrived: bool # Arrival status + arrival_canceled: bool = field( + metadata=field_options(alias="arrivalCanceled", deserialize=str_to_bool) + ) # Arrival cancellation status + arrived: bool = field(metadata=field_options(deserialize=str_to_bool)) # Arrival status scheduled_departure_time: datetime = field( metadata=field_options(alias="scheduledDepartureTime", deserialize=_timestamp_to_datetime) ) # Scheduled departure time arrival_delay: int = field(metadata=field_options(alias="arrivalDelay")) # Arrival delay departure_delay: int = field(metadata=field_options(alias="departureDelay")) # Departure delay - departure_canceled: bool = field(metadata=field_options(alias="departureCanceled")) # Departure cancellation status - left: bool # Departure status - is_extra_stop: bool = field(metadata=field_options(alias="isExtraStop")) # Whether the stop is an extra one + departure_canceled: bool = field( + metadata=field_options(alias="departureCanceled", deserialize=str_to_bool) + ) # Departure cancellation status + left: bool = field(metadata=field_options(deserialize=str_to_bool)) # Departure status + is_extra_stop: bool = field( + metadata=field_options(alias="isExtraStop", deserialize=str_to_bool) + ) # Whether the stop is an extra one platform: str # Platform name platform_info: PlatformInfo = field(metadata=field_options(alias="platforminfo")) # Detailed platform info @@ -217,12 +225,14 @@ class ConnectionDeparture(DataClassORJSONMixin): vehicle_info: VehicleInfo = field(metadata=field_options(alias="vehicleinfo")) # Vehicle details platform: str # Platform name platform_info: PlatformInfo = field(metadata=field_options(alias="platforminfo")) # Detailed platform info - canceled: bool # Whether the departure is canceled + canceled: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the departure is canceled stops: ConnectionStops # Stops along the journey departure_connection: str = field(metadata=field_options(alias="departureConnection")) # Departure connection link direction: Direction # Direction of the connection - left: bool # Whether the train has left - walking: bool # Indicates if the connection requires walking + left: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the train has left + walking: bool = field( + metadata=field_options(deserialize=str_to_bool) + ) # Indicates if the connection requires walking occupancy: Occupancy # Occupancy level @@ -240,10 +250,12 @@ class ConnectionArrival(DataClassORJSONMixin): vehicle_info: VehicleInfo = field(metadata=field_options(alias="vehicleinfo")) # Vehicle details platform: str # Platform name platform_info: PlatformInfo = field(metadata=field_options(alias="platforminfo")) # Detailed platform info - canceled: bool # Whether the arrival is canceled + canceled: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the arrival is canceled direction: Direction # Direction of the connection - arrived: bool # Whether the train has arrived - walking: bool # Indicates if the connection requires walking + arrived: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the train has arrived + walking: bool = field( + metadata=field_options(deserialize=str_to_bool) + ) # Indicates if the connection requires walking departure_connection: str = field(metadata=field_options(alias="departureConnection")) # Departure connection link @@ -351,14 +363,20 @@ class VehicleStop(DataClassORJSONMixin): metadata=field_options(alias="scheduledArrivalTime", deserialize=_timestamp_to_datetime) ) # Scheduled arrival time delay: int # Delay in minutes - canceled: bool # Whether the stop is canceled + canceled: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the stop is canceled departure_delay: int = field(metadata=field_options(alias="departureDelay")) # Departure delay - departure_canceled: bool = field(metadata=field_options(alias="departureCanceled")) # Departure cancellation status + departure_canceled: bool = field( + metadata=field_options(alias="departureCanceled", deserialize=str_to_bool) + ) # Departure cancellation status arrival_delay: int = field(metadata=field_options(alias="arrivalDelay")) # Arrival delay - arrival_canceled: bool = field(metadata=field_options(alias="arrivalCanceled")) # Arrival cancellation status - left: bool # Whether the train has left - arrived: bool # Whether the train has arrived - is_extra_stop: bool = field(metadata=field_options(alias="isExtraStop")) # Whether this is an extra stop + arrival_canceled: bool = field( + metadata=field_options(alias="arrivalCanceled", deserialize=str_to_bool) + ) # Arrival cancellation status + left: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the train has left + arrived: bool = field(metadata=field_options(deserialize=str_to_bool)) # Whether the train has arrived + is_extra_stop: bool = field( + metadata=field_options(alias="isExtraStop", deserialize=str_to_bool) + ) # Whether this is an extra stop occupancy: Occupancy | None = field(default=None) # Occupancy level, not present in last stop departure_connection: str | None = field( default=None, metadata=field_options(alias="departureConnection") @@ -397,18 +415,24 @@ class Unit(DataClassORJSONMixin): id: str # Unit ID material_type: MaterialType = field(metadata=field_options(alias="materialType")) # Material type of the unit - has_toilets: bool = field(metadata=field_options(alias="hasToilets")) # Whether the unit has toilets + has_toilets: bool = field( + metadata=field_options(alias="hasToilets", deserialize=str_to_bool) + ) # Whether the unit has toilets has_second_class_outlets: bool = field( - metadata=field_options(alias="hasSecondClassOutlets") + metadata=field_options(alias="hasSecondClassOutlets", deserialize=str_to_bool) ) # Whether the unit has power outlets in second class has_first_class_outlets: bool = field( - metadata=field_options(alias="hasFirstClassOutlets") + metadata=field_options(alias="hasFirstClassOutlets", deserialize=str_to_bool) ) # Whether the unit has power outlets in first class - has_heating: bool = field(metadata=field_options(alias="hasHeating")) # Whether the unit has heating - has_airco: bool = field(metadata=field_options(alias="hasAirco")) # Whether the unit has air conditioning + has_heating: bool = field( + metadata=field_options(alias="hasHeating", deserialize=str_to_bool) + ) # Whether the unit has heating + has_airco: bool = field( + metadata=field_options(alias="hasAirco", deserialize=str_to_bool) + ) # Whether the unit has air conditioning traction_type: str = field(metadata=field_options(alias="tractionType")) # Traction type of the unit can_pass_to_next_unit: bool = field( - metadata=field_options(alias="canPassToNextUnit") + metadata=field_options(alias="canPassToNextUnit", deserialize=str_to_bool) ) # Whether the unit can pass to the next seats_first_class: int = field(metadata=field_options(alias="seatsFirstClass")) # Number of seats in first class seats_coupe_first_class: int = field( @@ -426,15 +450,17 @@ class Unit(DataClassORJSONMixin): ) # Number of standing places in second class length_in_meter: int = field(metadata=field_options(alias="lengthInMeter")) # Length of the unit in meters has_semi_automatic_interior_doors: bool = field( - metadata=field_options(alias="hasSemiAutomaticInteriorDoors") + metadata=field_options(alias="hasSemiAutomaticInteriorDoors", deserialize=str_to_bool) ) # Whether the unit has semi-automatic interior doors traction_position: int = field(metadata=field_options(alias="tractionPosition")) # Traction position of the unit - has_prm_section: bool = field(metadata=field_options(alias="hasPrmSection")) # Whether the unit has a PRM section + has_prm_section: bool = field( + metadata=field_options(alias="hasPrmSection", deserialize=str_to_bool) + ) # Whether the unit has a PRM section has_priority_places: bool = field( - metadata=field_options(alias="hasPriorityPlaces") + metadata=field_options(alias="hasPriorityPlaces", deserialize=str_to_bool) ) # Whether the unit has priority places has_bike_section: bool = field( - metadata=field_options(alias="hasBikeSection") + metadata=field_options(alias="hasBikeSection", deserialize=str_to_bool) ) # Whether the unit has a bike section