From d0d087015146c7e0d71d40dbb4606f83b77be7f3 Mon Sep 17 00:00:00 2001 From: Simon Lamon <32477463+silamon@users.noreply.github.com> Date: Sat, 18 Jan 2025 14:59:06 +0000 Subject: [PATCH 1/2] Boolean fields --- pyrail/models.py | 88 +++++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/pyrail/models.py b/pyrail/models.py index e538dab..ca4e1e3 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=lambda x: timestamp_to_datetime(x)) ) # 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(deserialize=str_to_bool, alias="isExtra") + ) # Whether the train is extra vehicle: str # Vehicle identifier vehicle_info: VehicleInfo = field(metadata=field_options(alias="vehicleinfo")) # Vehicle details platform: str # Platform name @@ -144,16 +146,22 @@ class ConnectionStop(DataClassORJSONMixin): scheduled_arrival_time: datetime = field( metadata=field_options(alias="scheduledArrivalTime", deserialize=lambda x: timestamp_to_datetime(x)) ) # 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(deserialize=str_to_bool, alias="arrivalCanceled") + ) # 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=lambda x: timestamp_to_datetime(x)) ) # 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(deserialize=str_to_bool, alias="departureCanceled") + ) # Departure cancellation status + left: bool = field(metadata=field_options(deserialize=str_to_bool)) # Departure status + is_extra_stop: bool = field( + metadata=field_options(deserialize=str_to_bool, alias="isExtraStop") + ) # Whether the stop is an extra one platform: str # Platform name platform_info: PlatformInfo = field(metadata=field_options(alias="platforminfo")) # Detailed platform info @@ -187,12 +195,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 @@ -210,10 +220,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 @@ -321,14 +333,20 @@ class VehicleStop(DataClassORJSONMixin): metadata=field_options(alias="scheduledArrivalTime", deserialize=lambda x: timestamp_to_datetime(x)) ) # 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(deserialize=str_to_bool, alias="departureCanceled") + ) # 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(deserialize=str_to_bool, alias="arrivalCanceled") + ) # 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(deserialize=str_to_bool, alias="isExtraStop") + ) # 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") @@ -367,18 +385,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(deserialize=str_to_bool, alias="hasToilets") + ) # Whether the unit has toilets has_second_class_outlets: bool = field( - metadata=field_options(alias="hasSecondClassOutlets") + metadata=field_options(deserialize=str_to_bool, alias="hasSecondClassOutlets") ) # Whether the unit has power outlets in second class has_first_class_outlets: bool = field( - metadata=field_options(alias="hasFirstClassOutlets") + metadata=field_options(deserialize=str_to_bool, alias="hasFirstClassOutlets") ) # 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(deserialize=str_to_bool, alias="hasHeating") + ) # Whether the unit has heating + has_airco: bool = field( + metadata=field_options(deserialize=str_to_bool, alias="hasAirco") + ) # 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(deserialize=str_to_bool, alias="canPassToNextUnit") ) # 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( @@ -396,15 +420,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(deserialize=str_to_bool, alias="hasSemiAutomaticInteriorDoors") ) # 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(deserialize=str_to_bool, alias="hasPrmSection") + ) # Whether the unit has a PRM section has_priority_places: bool = field( - metadata=field_options(alias="hasPriorityPlaces") + metadata=field_options(deserialize=str_to_bool, alias="hasPriorityPlaces") ) # Whether the unit has priority places has_bike_section: bool = field( - metadata=field_options(alias="hasBikeSection") + metadata=field_options(deserialize=str_to_bool, alias="hasBikeSection") ) # Whether the unit has a bike section From a3ee0d52129d558bd934d95902693afb9c1b10bb Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sat, 18 Jan 2025 23:31:29 +0100 Subject: [PATCH 2/2] Sorting the metadata field options --- pyrail/models.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pyrail/models.py b/pyrail/models.py index ca4e1e3..4465aeb 100644 --- a/pyrail/models.py +++ b/pyrail/models.py @@ -107,7 +107,7 @@ class LiveboardDeparture(DataClassORJSONMixin): 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(deserialize=str_to_bool, alias="isExtra") + 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 @@ -147,7 +147,7 @@ class ConnectionStop(DataClassORJSONMixin): metadata=field_options(alias="scheduledArrivalTime", deserialize=lambda x: timestamp_to_datetime(x)) ) # Scheduled arrival time arrival_canceled: bool = field( - metadata=field_options(deserialize=str_to_bool, alias="arrivalCanceled") + 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( @@ -156,11 +156,11 @@ class ConnectionStop(DataClassORJSONMixin): 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(deserialize=str_to_bool, alias="departureCanceled") + 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(deserialize=str_to_bool, alias="isExtraStop") + 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 @@ -336,16 +336,16 @@ class VehicleStop(DataClassORJSONMixin): 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(deserialize=str_to_bool, alias="departureCanceled") + 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(deserialize=str_to_bool, alias="arrivalCanceled") + 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(deserialize=str_to_bool, alias="isExtraStop") + 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( @@ -386,23 +386,23 @@ 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(deserialize=str_to_bool, alias="hasToilets") + metadata=field_options(alias="hasToilets", deserialize=str_to_bool) ) # Whether the unit has toilets has_second_class_outlets: bool = field( - metadata=field_options(deserialize=str_to_bool, 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(deserialize=str_to_bool, 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(deserialize=str_to_bool, alias="hasHeating") + metadata=field_options(alias="hasHeating", deserialize=str_to_bool) ) # Whether the unit has heating has_airco: bool = field( - metadata=field_options(deserialize=str_to_bool, alias="hasAirco") + 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(deserialize=str_to_bool, 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( @@ -420,17 +420,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(deserialize=str_to_bool, 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(deserialize=str_to_bool, alias="hasPrmSection") + metadata=field_options(alias="hasPrmSection", deserialize=str_to_bool) ) # Whether the unit has a PRM section has_priority_places: bool = field( - metadata=field_options(deserialize=str_to_bool, 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(deserialize=str_to_bool, alias="hasBikeSection") + metadata=field_options(alias="hasBikeSection", deserialize=str_to_bool) ) # Whether the unit has a bike section