Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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()
Ejemplo n.º 6
0
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)
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
def test_db_locations_request():
    client = HafasClient(DBProfile())
    locations = client.locations(term="Köln Messe/Deutz")
    assert len(locations) >= 1
Ejemplo n.º 10
0
def test_db_departures_request():
    client = HafasClient(DBProfile())
    departures = client.departures(station="8011160",
                                   date=datetime.datetime.now(),
                                   max_trips=2)
    assert len(departures) <= 2
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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")
Ejemplo n.º 16
0
def test_db_arrivals_request():
    client = HafasClient(DBProfile())
    arrivals = client.arrivals(station="8011160",
                               date=datetime.datetime.now(),
                               max_trips=2)
    assert len(arrivals) <= 2