def journey(self, journey: Union[Journey, str]) -> Journey: """ Returns information about a specific journey by its ID Useful if you want to refresh the data of the trip, e.g. the real-time data. :param journey: FPTF `Journey` object or journey ID :return: FPTF `Journey` object with current/updated information """ if not isinstance(journey, Journey): journey = Journey(journey) body = self.profile.format_journey_request(journey) res = self.profile.request(body) return self.profile.parse_journey_request(res)
def parse_journeys_request(self: ProfileInterface, data: HafasResponse) -> List[Journey]: """ Parses the HaFAS response for a journeys request :param data: Formatted HaFAS response :return: List of Journey objects """ journeys = [] for jny in data.res['outConL']: # TODO: Add more data date = self.parse_date(jny['date']) journeys.append( Journey(jny['ctxRecon'], date=date, duration=self.parse_timedelta(jny['dur']), legs=self.parse_legs(jny, data.common, date))) return journeys
def parse_journey_request( self: ProfileInterface, data: HafasResponse) -> Journey: """ Parses the HaFAS response for a journey request :param data: Formatted HaFAS response :return: List of Journey objects """ date = self.parse_date(data.res['outConL'][0]['date']) return Journey( data.res['outConL'][0]['ctxRecon'], date=date, duration=self.parse_timedelta( data.res['outConL'][0]['dur']), legs=self.parse_legs( data.res['outConL'][0], data.common, date))
def test_db_journey_parsing(): directory = os.path.dirname(os.path.realpath(__file__)) raw_hafas_json_file = open(directory + "/journey_raw.json", "r") hafas_response = PyTestHafasResponse(raw_hafas_json_file.read()) raw_hafas_json_file.close() correct_journey = Journey( id='¶HKI¶T$A=1@O=Siegburg/Bonn@L=8005556@a=128@$A=1@O=Troisdorf@L=8000135@a=128@$202008081507$202008081512$S 19$$1$$$', date=datetime.date(2020, 8, 8), duration=datetime.timedelta(seconds=300), legs=[Leg( id='1|227361|0|80|8082020', origin=Station( id='8005556', lid='A=1@O=Siegburg/Bonn@X=7203029@Y=50793916@U=80@L=8005556@', name='Siegburg/Bonn', latitude=50.793916, longitude=7.203029), destination=Station( id='8000135', lid='A=1@O=Troisdorf@X=7150892@Y=50813926@U=80@L=8000135@', name='Troisdorf', latitude=50.813926, longitude=7.150892), departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 8, 15, 7)), arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 8, 15, 12)), mode=Mode.TRAIN, name='S 19', cancelled=False, distance=None, departure_delay=datetime.timedelta(seconds=240), departure_platform='1', arrival_delay=datetime.timedelta(seconds=240), arrival_platform='1', stopovers=[Stopover( stop=Station( id='8005556', lid='A=1@O=Siegburg/Bonn@X=7203029@Y=50793916@U=80@L=8005556@', name='Siegburg/Bonn', latitude=50.793916, longitude=7.203029 ), cancelled=False, arrival=None, arrival_delay=None, arrival_platform=None, departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 8, 15, 7)), departure_delay=datetime.timedelta(seconds=240), departure_platform='1' ), Stopover( stop=Station( id='8000135', lid='A=1@O=Troisdorf@X=7150892@Y=50813926@U=80@L=8000135@', name='Troisdorf', latitude=50.813926, longitude=7.150892 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 8, 15, 12)), arrival_delay=datetime.timedelta(seconds=240), arrival_platform='1', departure=None, departure_delay=None, departure_platform=None ) ], )] ) assert DBProfile().parse_journey_request(hafas_response) == correct_journey
def test_vsn_journeys_parsing(): directory = os.path.dirname(os.path.realpath(__file__)) raw_hafas_json_file = open(directory + "/journeys_raw.json", "r") hafas_response = PyTestHafasResponse(raw_hafas_json_file.read()) raw_hafas_json_file.close() correct_journeys = [ Journey( id= '¶HKI¶T$A=1@O=Göttingen@L=8000128@a=128@$A=1@O=Lenglern@L=8003644@a=128@$202008090710$202008090719$ RB85$$1$$$', date=datetime.date(2020, 8, 9), duration=datetime.timedelta(seconds=540), legs=[ Leg(id='1|147532|0|80|9082020', origin=Station(id='8000128', name='Göttingen', latitude=51.536812, longitude=9.926069), destination=Station(id='8003644', name='Lenglern', latitude=51.588428, longitude=9.871199), departure=VSNProfile().timezone.localize( datetime.datetime(2020, 8, 9, 7, 10)), arrival=VSNProfile().timezone.localize( datetime.datetime(2020, 8, 9, 7, 19)), mode=Mode.TRAIN, name='RB85', cancelled=False, distance=None, departure_delay=datetime.timedelta(seconds=0), departure_platform='4', arrival_delay=datetime.timedelta(seconds=60), arrival_platform='1', stopovers=[ Stopover(stop=Station(id='8000128', name='Göttingen', latitude=51.536812, longitude=9.926069), cancelled=False, arrival=None, arrival_delay=None, arrival_platform=None, departure=VSNProfile().timezone.localize( datetime.datetime(2020, 8, 9, 7, 10)), departure_delay=datetime.timedelta(seconds=0), departure_platform=None), Stopover(stop=Station(id='8003644', name='Lenglern', latitude=51.588428, longitude=9.871199), cancelled=False, arrival=VSNProfile().timezone.localize( datetime.datetime(2020, 8, 9, 7, 19)), arrival_delay=datetime.timedelta(seconds=60), arrival_platform=None, departure=None, departure_delay=None, departure_platform=None) ]) ]) ] assert VSNProfile().parse_journeys_request( hafas_response) == correct_journeys