def test_db_departures_parsing(): directory = os.path.dirname(os.path.realpath(__file__)) raw_hafas_json_file = open(directory + "/departures_raw.json", "r") hafas_response = PyTestHafasResponse(raw_hafas_json_file.read()) raw_hafas_json_file.close() correct_station_board_legs = [ StationBoardLeg( id='1|200921|0|80|5082020', name='IC 2055', direction='Stralsund Hbf', station=Station( id='8098160', lid= 'A=1@O=Berlin Hbf (tief)@X=13369549@Y=52525589@U=80@L=8098160@', name='Berlin Hbf (tief)', latitude=52.525589, longitude=13.369549), date_time=DBProfile().timezone.localize( datetime.datetime(2020, 8, 5, 18, 16)), cancelled=False, delay=datetime.timedelta(seconds=0), platform='6') ] assert DBProfile().parse_station_board_request( hafas_response, "d") == correct_station_board_legs
def test_db_journey_request(): client = HafasClient(DBProfile()) journey = client.journey( journey= "¶HKI¶T$A=1@O=Siegburg/Bonn@L=8005556@a=128@$A=1@O=Troisdorf@L=8000135@a=128@$202008081507$202008081512$S 19$$1$$$c", ) assert isinstance(journey, Journey)
def test_db_journey_request(): client = HafasClient(DBProfile()) journey = client.journey( journey= "¶HKI¶T$A=1@O=Siegburg/Bonn@L=8005556@a=128@$A=1@O=Hennef(Sieg)@L=8002753@a=128@$202106051440$202106051445$S 12$$1$$$", ) assert isinstance(journey, Journey)
def dbapis_importstations_parse_station_row(row, agency_pk, source_pk, kind_pk): hafas_client = HafasClient(DBProfile()) agency = Agency.objects.get(pk=agency_pk) source = Source.objects.get(pk=source_pk) kind = StopIDKind.objects.get(pk=kind_pk) if row['EVA_NR'] == '': return stop = Stop.objects.filter( stopid__name=row['EVA_NR'], stopid__kind__in=agency.used_id_kind.all()).first() if stop is None: stop = Stop() stop.save() StopName.objects.get_or_create(name=row['NAME'], stop=stop, source=source) StopID.objects.get_or_create(stop=stop, name=row['EVA_NR'], source=source, kind=kind) try: StopLocation.objects.get(stop=stop, source=source) except ObjectDoesNotExist: try: hafasLocation = hafas_client.locations(row['EVA_NR'])[0] StopLocation.objects.create(stop=stop, latitude=hafasLocation.latitude, longitude=hafasLocation.longitude, source=source) except IndexError: return
def handle(self, *args, **options): client = HafasClient(DBProfile()) for start in STOPS: for end in STOPS: if start == end: continue journeys = client.journeys(start, end, date=datetime.datetime.now()) stops = [ Stop.objects.get(stopid__external_id=start), Stop.objects.get(stopid__external_id=end) ] cons = Connection.objects.filter(stop=stops[0]).filter( stop=stops[1]) if len(cons): con = cons[0] else: con = Connection() con.save() con.stop.add(*stops) con.duration = datetime.timedelta(seconds=statistics.mean( [j.duration.total_seconds() for j in journeys])) con.save()
def test_db_journeys_request(): client = HafasClient(DBProfile()) journeys = client.journeys(destination="8000135", origin="8005556", date=datetime.datetime.now(), min_change_time=0, max_changes=-1) assert journeys
def __init__(self): self.hafasclient = HafasClient(DBProfile()) self.provider = Provider.objects.get(internal_name="db") self.source, _ = Source.objects.get_or_create( internal_name="db_hafas", friendly_name="Deutsche Bahn HAFAS", provider=self.provider) self.idkind, _ = StopIDKind.objects.get_or_create( name='eva', provider=self.provider)
def test_db_locations_parsing(): directory = os.path.dirname(os.path.realpath(__file__)) raw_hafas_json_file = open(directory + "/locations_raw.json", "r") hafas_response = PyTestHafasResponse(raw_hafas_json_file.read()) raw_hafas_json_file.close() correct_locations = [ Station(id='008000207', name='Köln Hbf', latitude=50.942823, longitude=6.959197), Station(id="008096022", name='KÖLN', latitude=50.941312, longitude=6.967206) ] assert DBProfile().parse_location_request( hafas_response) == correct_locations
def test_db_locations_request(): client = HafasClient(DBProfile()) locations = client.locations(term="Köln Messe/Deutz") assert len(locations) >= 1
def test_db_departures_request(): client = HafasClient(DBProfile()) departures = client.departures(station="8011160", date=datetime.datetime.now(), max_trips=2) assert len(departures) <= 2
def test_db_trips_parsing(): directory = os.path.dirname(os.path.realpath(__file__)) raw_hafas_json_file = open(directory + "/trip_raw.json", "r") hafas_response = PyTestHafasResponse(raw_hafas_json_file.read()) raw_hafas_json_file.close() correct_trip = Leg( id='1|227083|0|80|5082020', origin=Station( id='8002753', lid='A=1@O=Hennef(Sieg)@X=7284588@Y=50773331@U=80@L=8002753@', name='Hennef(Sieg)', latitude=50.773331, longitude=7.284588), destination=Station( id='8000084', lid='A=1@O=Düren@X=6482454@Y=50809513@U=80@L=8000084@', name='Düren', latitude=50.809513, longitude=6.482454 ), departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 2)), arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 17)), mode=Mode.TRAIN, name='S 19', cancelled=False, distance=None, departure_delay=None, departure_platform='2', arrival_delay=None, arrival_platform='5', stopovers=[ Stopover( stop=Station( id='8002753', lid='A=1@O=Hennef(Sieg)@X=7284588@Y=50773331@U=80@L=8002753@', name='Hennef(Sieg)', latitude=50.773331, longitude=7.284588 ), cancelled=False, arrival=None, arrival_delay=None, arrival_platform=None, departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 2)), departure_delay=None, departure_platform='2' ), 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=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 6)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 7)), departure_delay=None, 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, 5, 12, 12)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 13)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8005629', lid='A=1@O=Spich@X=7114917@Y=50826727@U=80@L=8005629@', name='Spich', latitude=50.826727, longitude=7.114917 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 15)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 16)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8004873', lid='A=1@O=Porz-Wahn@X=7079266@Y=50858135@U=80@L=8004873@', name='Porz-Wahn', latitude=50.858135, longitude=7.079266 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 19)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 19)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8003330', lid='A=1@O=Köln/Bonn Flughafen@X=7119304@Y=50878900@U=80@L=8003330@', name='Köln/Bonn Flughafen', latitude=50.8789, longitude=7.119304 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 23)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 24)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8003358', lid='A=1@O=Köln Frankfurter Straße@X=7051264@Y=50915217@U=80@L=8003358@', name='Köln Frankfurter Straße', latitude=50.915217, longitude=7.051264 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 29)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 29)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8003320', lid='A=1@O=Köln Trimbornstr@X=6996736@Y=50935856@U=80@L=8003320@', name='Köln Trimbornstr', latitude=50.935856, longitude=6.996736), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 34)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 34)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8083368', lid='A=1@O=Köln Messe/Deutz Gl. 9-10@X=6974640@Y=50941303@U=80@L=8083368@', name='Köln Messe/Deutz Gl. 9-10', latitude=50.941303, longitude=6.97464), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 36)), arrival_delay=None, arrival_platform='10', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 37)), departure_delay=None, departure_platform='10' ), Stopover( stop=Station( id='8000207', lid='A=1@O=Köln Hbf@X=6958730@Y=50943029@U=80@L=8000207@', name='Köln Hbf', latitude=50.943029, longitude=6.95873 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 39)), arrival_delay=None, arrival_platform='11 B-C', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 40)), departure_delay=None, departure_platform='11 B-C' ), Stopover( stop=Station( id='8003392', lid='A=1@O=Köln Hansaring@X=6952563@Y=50949133@U=80@L=8003392@', name='Köln Hansaring', latitude=50.949133, longitude=6.952563 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 42)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 42)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8000208', lid='A=1@O=Köln-Ehrenfeld@X=6917280@Y=50951533@U=80@L=8000208@', name='Köln-Ehrenfeld', latitude=50.951533, longitude=6.91728), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 45)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 46)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8003375', lid='A=1@O=Köln-Müngersdorf Technologiepark@X=6888200@Y=50948396@U=80@L=8003375@', name='Köln-Müngersdorf Technologiepark', latitude=50.948396, longitude=6.8882 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 48)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 49)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8003732', lid='A=1@O=Lövenich@X=6834436@Y=50942930@U=80@L=8003732@', name='Lövenich', latitude=50.94293, longitude=6.834436 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 51)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 52)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8003383', lid='A=1@O=Köln-Weiden West@X=6815136@Y=50940899@U=80@L=8003383@', name='Köln-Weiden West', latitude=50.940899, longitude=6.815136 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 53)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 54)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8002389', lid='A=1@O=Frechen-Königsdorf@X=6777849@Y=50936503@U=80@L=8002389@', name='Frechen-Königsdorf', latitude=50.936503, longitude=6.777849 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 56)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 12, 57)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8000178', lid='A=1@O=Horrem@X=6713495@Y=50916250@U=80@L=8000178@', name='Horrem', latitude=50.91625, longitude=6.713495 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 0)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 1)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8005575', lid='A=1@O=Sindorf@X=6681107@Y=50903711@U=80@L=8005575@', name='Sindorf', latitude=50.903711, longitude=6.681107 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 3)), arrival_delay=None, arrival_platform='1', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 3)), departure_delay=None, departure_platform='1' ), Stopover( stop=Station( id='8001264', lid='A=1@O=Buir@X=6574513@Y=50862405@U=80@L=8001264@', name='Buir', latitude=50.862405, longitude=6.574513 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 9)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 10)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8003990', lid='A=1@O=Merzenich@X=6518051@Y=50840031@U=80@L=8003990@', name='Merzenich', latitude=50.840031, longitude=6.518051 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 13)), arrival_delay=None, arrival_platform='2', departure=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 13)), departure_delay=None, departure_platform='2' ), Stopover( stop=Station( id='8000084', lid='A=1@O=Düren@X=6482454@Y=50809513@U=80@L=8000084@', name='Düren', latitude=50.809513, longitude=6.482454 ), cancelled=False, arrival=DBProfile().timezone.localize(datetime.datetime(2020, 8, 5, 13, 17)), arrival_delay=None, arrival_platform='5', departure=None, departure_delay=None, departure_platform=None ) ] ) assert DBProfile().parse_trip_request(hafas_response) == correct_trip
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
import os import sys sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import datetime from helpers import StationPhillip from pyhafas import HafasClient from pyhafas.profile import DBProfile stations = StationPhillip() hafas = HafasClient(DBProfile()) # location = hafas.locations() journeys = hafas.journeys( origin=stations.get_eva(name='Tübingen Hbf'), destination=stations.get_eva(name='Köln Hbf'), date=datetime.datetime.now(), ) print(journeys)
import datetime from pyhafas import HafasClient from pyhafas.profile import DBProfile, VSNProfile client = HafasClient(DBProfile(), debug=True) print( client.departures(station='8000128', date=datetime.datetime.now(), max_trips=5)) print( client.arrivals(station='8005556', date=datetime.datetime.now(), max_trips=5)) print( client.journey( '¶HKI¶T$A=1@O=Berlin Jungfernheide@L=8011167@a=128@$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$202002101544$202002101549$RB 18521$$1$§T$A=1@O=Berlin Hbf (tief)@L=8098160@a=128@$A=1@O=München Hbf@L=8000261@a=128@$202002101605$202002102002$ICE 1007$$1$' )) print( client.journeys(destination="8000207", origin="8005556", date=datetime.datetime.now(), min_change_time=0, max_changes=-1)) print(client.locations("Köln Hbf")) print(client.trip("1|1372374|3|80|9062020")) print('=' * 20)
def __init__(self): self.hafasclient = HafasClient(DBProfile()) self.db, _ = Agency.objects.get_or_create(name="db") self.dbapis, _ = Source.objects.get_or_create(name="dbapis") self.idkind, _ = StopIDKind.objects.get_or_create(name='eva') self.timezone = pytz.timezone("Europe/Berlin")
def test_db_arrivals_request(): client = HafasClient(DBProfile()) arrivals = client.arrivals(station="8011160", date=datetime.datetime.now(), max_trips=2) assert len(arrivals) <= 2