Exemplo n.º 1
0
    def _async_request(self):
        direct_path_type = StreetNetworkPathType.DIRECT
        periode_extremity = utils.PeriodExtremity(self._request['datetime'], self._request['clockwise'])
        for dep_mode, arr_mode in self._krakens_call:
            dp = self._streetnetwork_path_pool.wait_and_get(
                self._requested_orig_obj,
                self._requested_dest_obj,
                dep_mode,
                periode_extremity,
                direct_path_type,
                request=self._request,
            )
            if dp.journeys:
                self._journey_params.direct_path_duration = dp.journeys[0].durations.total
            else:
                self._journey_params.direct_path_duration = None

            bike_in_pt = dep_mode == 'bike' and arr_mode == 'bike'
            pt_journey = PtJourney(
                future_manager=self._future_manager,
                instance=self._instance,
                orig_fallback_durtaions_pool=self._orig_fallback_durations_pool,
                dest_fallback_durations_pool=self._dest_fallback_durations_pool,
                dep_mode=dep_mode,
                arr_mode=arr_mode,
                periode_extremity=periode_extremity,
                journey_params=self._journey_params,
                bike_in_pt=bike_in_pt,
                request=self._request,
            )

            self._value.append(PtPoolElement(dep_mode, arr_mode, pt_journey))

        self._value.sort(_PtJourneySorter())
Exemplo n.º 2
0
def test_request_journeys_should_raise_on_non_200():
    with requests_mock.Mocker() as mock:
        instant_system = InstantSystem(service_url='http://instant.sys', api_key='ApiKey', network='Network')

        mock.get('http://instant.sys', status_code=401, text='{this is the http response}')

        with pytest.raises(RidesharingServiceError) as e:
            instant_system._request_journeys(
                '1.2,3.4',
                '5.6,7.8',
                utils.PeriodExtremity(
                    datetime=utils.str_to_time_stamp("20171225T060000"), represents_start=True
                ),
                DummyInstance(),
            )

        exception_params = e.value.get_params().values()
        assert 401 in exception_params
        assert '{this is the http response}' in exception_params
Exemplo n.º 3
0
def blablalines_test():
    with mock.patch('requests.get', mock_get):

        blablalines = Blablalines(
            service_url='dummyUrl',
            api_key='dummyApiKey',
            network='dummyNetwork',
            feed_publisher=DUMMY_BLABLALINES_FEED_PUBLISHER,
        )
        from_coord = '47.28696,0.78981'
        to_coord = '47.38642,0.69039'

        period_extremity = utils.PeriodExtremity(
            datetime=utils.str_to_time_stamp("20171225T060000"),
            represents_start=True)
        ridesharing_journeys, feed_publisher = blablalines.request_journeys_with_feed_publisher(
            from_coord=from_coord,
            to_coord=to_coord,
            period_extremity=period_extremity,
            instance_params=DummyInstance(),
        )

        assert len(ridesharing_journeys) == 2
        assert ridesharing_journeys[0].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[0].metadata.system_id == 'blablalines'
        assert ridesharing_journeys[
            0].ridesharing_ad == 'https://blablalines.com'

        assert ridesharing_journeys[
            0].pickup_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].pickup_place.lat == 47.28696
        assert ridesharing_journeys[0].pickup_place.lon == 0.78981

        assert ridesharing_journeys[
            0].dropoff_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].dropoff_place.lat == 47.38642
        assert ridesharing_journeys[0].dropoff_place.lon == 0.69039

        assert ridesharing_journeys[0].shape
        assert ridesharing_journeys[0].shape[0].lat == ridesharing_journeys[
            0].pickup_place.lat
        assert ridesharing_journeys[0].shape[0].lon == ridesharing_journeys[
            0].pickup_place.lon
        assert ridesharing_journeys[0].shape[
            1].lat == 47.28698  # test that we really load a shape
        assert ridesharing_journeys[0].shape[1].lon == 0.78975
        assert ridesharing_journeys[0].shape[-1].lat == ridesharing_journeys[
            0].dropoff_place.lat
        assert ridesharing_journeys[0].shape[-1].lon == ridesharing_journeys[
            0].dropoff_place.lon

        assert ridesharing_journeys[0].price == 100.0
        assert ridesharing_journeys[0].currency == 'centime'

        assert ridesharing_journeys[0].total_seats is None
        assert ridesharing_journeys[0].available_seats == 3

        assert ridesharing_journeys[1].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[1].metadata.system_id == 'blablalines'
        assert ridesharing_journeys[1].shape
        assert ridesharing_journeys[
            1].ridesharing_ad == 'https://blablalines.com'

        assert ridesharing_journeys[1].pickup_place.addr == ""
        assert ridesharing_journeys[1].pickup_place.lat == 47.28696
        assert ridesharing_journeys[1].pickup_place.lon == 0.78981

        assert ridesharing_journeys[1].dropoff_place.addr == ""
        assert ridesharing_journeys[1].dropoff_place.lat == 47.38399
        assert ridesharing_journeys[1].dropoff_place.lon == 0.69192

        assert ridesharing_journeys[1].price == 300.0
        assert ridesharing_journeys[1].currency == 'centime'

        assert ridesharing_journeys[1].total_seats is None
        assert ridesharing_journeys[1].available_seats == 2

        assert feed_publisher == RsFeedPublisher(
            **DUMMY_BLABLALINES_FEED_PUBLISHER)
Exemplo n.º 4
0
def instant_system_test():
    with mock.patch('requests.get', mock_get):

        instant_system = InstantSystem(
            service_url='dummyUrl',
            api_key='dummyApiKey',
            network='dummyNetwork',
            feed_publisher=DUMMY_INSTANT_SYSTEM_FEED_PUBLISHER,
            rating_scale_min=0,
            rating_scale_max=10,
        )
        from_coord = '48.109377,-1.682103'
        to_coord = '48.020335,-1.743929'

        period_extremity = utils.PeriodExtremity(
            datetime=utils.str_to_time_stamp("20171225T060000"),
            represents_start=True)

        params = RidesharingServiceManager.InstanceParams.make_params(
            DummyInstance())
        ridesharing_journeys, feed_publisher = instant_system.request_journeys_with_feed_publisher(
            from_coord=from_coord,
            to_coord=to_coord,
            period_extremity=period_extremity,
            instance_params=params)

        assert len(ridesharing_journeys) == 2
        assert ridesharing_journeys[0].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[0].metadata.system_id == 'instant_system'
        assert ridesharing_journeys[0].metadata.rating_scale_min == 0
        assert ridesharing_journeys[0].metadata.rating_scale_max == 10
        assert (
            ridesharing_journeys[0].ridesharing_ad ==
            'https://jky8k.app.goo.gl/?efr=1&apn=com.is.android.rennes&ibi=&isi=&utm_campaign=KISIO&link=https%3A%2F%2Fwww.star.fr%2Fsearch%2F%3FfeatureName%3DsearchResultDetail%26networkId%3D33%26journeyId%3D4bcd0b9d-2c9d-42a2-8ffb-4508c952f4fb'
        )

        assert ridesharing_journeys[
            0].pickup_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].pickup_place.lat == 48.1102
        assert ridesharing_journeys[0].pickup_place.lon == -1.68623

        assert ridesharing_journeys[
            0].dropoff_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].dropoff_place.lat == 48.02479
        assert ridesharing_journeys[0].dropoff_place.lon == -1.74673

        assert len(ridesharing_journeys[0].shape) > 3
        assert ridesharing_journeys[0].shape[0].lat == ridesharing_journeys[
            0].pickup_place.lat
        assert ridesharing_journeys[0].shape[0].lon == ridesharing_journeys[
            0].pickup_place.lon
        assert ridesharing_journeys[0].shape[
            1].lat == 48.1101  # test that we really load a shape
        assert ridesharing_journeys[0].shape[1].lon == -1.68635
        assert ridesharing_journeys[0].shape[-1].lat == ridesharing_journeys[
            0].dropoff_place.lat
        assert ridesharing_journeys[0].shape[-1].lon == ridesharing_journeys[
            0].dropoff_place.lon

        assert ridesharing_journeys[
            0].pickup_date_time == utils.str_to_time_stamp("20171225T070759")
        assert ridesharing_journeys[
            0].dropoff_date_time == utils.str_to_time_stamp("20171225T072536")

        assert ridesharing_journeys[0].driver.alias == 'Jean P.'
        assert ridesharing_journeys[0].driver.gender == Gender.MALE
        assert ridesharing_journeys[
            0].driver.image == 'https://dummyimage.com/128x128/C8E6C9/000.png&text=JP'
        assert ridesharing_journeys[0].driver.rate == 0
        assert ridesharing_journeys[0].driver.rate_count == 0

        assert ridesharing_journeys[0].price == 170
        assert ridesharing_journeys[0].currency == 'centime'

        assert ridesharing_journeys[0].total_seats is None
        assert ridesharing_journeys[0].available_seats == 4

        assert ridesharing_journeys[1].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[1].metadata.system_id == 'instant_system'
        assert ridesharing_journeys[1].metadata.rating_scale_min == 0
        assert ridesharing_journeys[1].metadata.rating_scale_max == 10
        # the shape should not be none, but we don't test the whole string
        assert ridesharing_journeys[1].shape
        assert (
            ridesharing_journeys[1].ridesharing_ad ==
            "https://jky8k.app.goo.gl/?efr=1&apn=com.is.android.rennes&ibi=&isi=&utm_campaign=KISIO&link=https%3A%2F%2Fwww.star.fr%2Fsearch%2F%3FfeatureName%3DsearchResultDetail%26networkId%3D33%26journeyId%3D05223c04-834d-4710-905f-aa3796da5837"
        )

        assert ridesharing_journeys[1].pickup_place.addr == ""
        assert ridesharing_journeys[1].pickup_place.lat == 48.1102
        assert ridesharing_journeys[1].pickup_place.lon == -1.68623

        assert ridesharing_journeys[1].dropoff_place.addr == ""
        assert ridesharing_journeys[1].dropoff_place.lat == 48.03193
        assert ridesharing_journeys[1].dropoff_place.lon == -1.74635

        assert ridesharing_journeys[
            1].pickup_date_time == utils.str_to_time_stamp("20171225T073542")
        assert ridesharing_journeys[
            1].dropoff_date_time == utils.str_to_time_stamp("20171225T075309")

        assert ridesharing_journeys[1].driver.alias == 'Alice M.'
        assert ridesharing_journeys[1].driver.gender == Gender.FEMALE
        assert ridesharing_journeys[
            1].driver.image == 'https://dummyimage.com/128x128/B2EBF2/000.png&text=AM'
        assert ridesharing_journeys[1].driver.rate == 0
        assert ridesharing_journeys[1].driver.rate_count == 0

        assert ridesharing_journeys[1].price == 0
        assert ridesharing_journeys[1].currency == 'centime'

        assert ridesharing_journeys[1].total_seats is None
        assert ridesharing_journeys[1].available_seats == 4

        assert feed_publisher == RsFeedPublisher(
            **DUMMY_INSTANT_SYSTEM_FEED_PUBLISHER)
Exemplo n.º 5
0
def klaxit_service_test():
    with mock.patch('requests.get', mock_get):

        klaxit = Klaxit(
            service_url='dummyUrl',
            api_key='dummyApiKey',
            network='dummyNetwork',
            feed_publisher=DUMMY_KLAXIT_FEED_PUBLISHER,
        )
        from_coord = '47.28696,0.78981'
        to_coord = '47.38642,0.69039'

        period_extremity = utils.PeriodExtremity(
            datetime=utils.str_to_time_stamp("20171225T060000"),
            represents_start=True)
        params = RidesharingServiceManager.InstanceParams.make_params(
            DummyInstance())
        ridesharing_journeys, feed_publisher = klaxit.request_journeys_with_feed_publisher(
            from_coord=from_coord,
            to_coord=to_coord,
            period_extremity=period_extremity,
            instance_params=params)

        assert len(ridesharing_journeys) == 2
        assert ridesharing_journeys[0].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[0].metadata.system_id == 'klaxit'
        assert ridesharing_journeys[
            0].ridesharing_ad == 'https://klaxit.app.link'

        assert ridesharing_journeys[
            0].pickup_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].pickup_place.lat == 48.8898252102323
        assert ridesharing_journeys[0].pickup_place.lon == 2.37550085289956

        assert ridesharing_journeys[
            0].dropoff_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].dropoff_place.lat == 48.85658
        assert ridesharing_journeys[0].dropoff_place.lon == 2.37729

        assert ridesharing_journeys[0].shape
        assert ridesharing_journeys[0].shape[0].lat == ridesharing_journeys[
            0].pickup_place.lat
        assert ridesharing_journeys[0].shape[0].lon == ridesharing_journeys[
            0].pickup_place.lon
        assert ridesharing_journeys[0].shape[
            1].lat == 48.88981  # test that we really load a shape
        assert ridesharing_journeys[0].shape[1].lon == 2.37553
        assert ridesharing_journeys[0].shape[-1].lat == ridesharing_journeys[
            0].dropoff_place.lat
        assert ridesharing_journeys[0].shape[-1].lon == ridesharing_journeys[
            0].dropoff_place.lon

        assert ridesharing_journeys[0].price == 51.0
        assert ridesharing_journeys[0].currency == 'centime'

        # Klaxit doesn't have any information on seats
        assert ridesharing_journeys[0].total_seats is None
        assert ridesharing_journeys[0].available_seats is None

        assert ridesharing_journeys[1].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[1].metadata.system_id == 'klaxit'
        assert ridesharing_journeys[1].shape
        assert ridesharing_journeys[
            1].ridesharing_ad == 'https://klaxit.app.link'

        assert ridesharing_journeys[1].pickup_place.addr == ""
        assert ridesharing_journeys[1].pickup_place.lat == 48.8943912703919
        assert ridesharing_journeys[1].pickup_place.lon == 2.3724889755249

        assert ridesharing_journeys[1].dropoff_place.addr == ""
        assert ridesharing_journeys[1].dropoff_place.lat == 48.8559454289402
        assert ridesharing_journeys[1].dropoff_place.lon == 2.37563525508835

        assert ridesharing_journeys[1].price == pytest.approx(56.0, abs=0.01)
        assert ridesharing_journeys[1].currency == 'centime'

        # Klaxit doesn't have any information on seats
        assert ridesharing_journeys[1].total_seats is None
        assert ridesharing_journeys[1].available_seats is None

        assert feed_publisher == RsFeedPublisher(**DUMMY_KLAXIT_FEED_PUBLISHER)
Exemplo n.º 6
0
def karos_service_test():
    with mock.patch('requests.get', mock_get):

        karos = Karos(
            service_url='dummyUrl',
            api_key='dummyApiKey',
            network='dummyNetwork',
            feed_publisher=DUMMY_KAROS_FEED_PUBLISHER,
        )

        # Check status information
        status = karos.status()
        assert status['id'] == 'karos'
        assert status['class'] == 'Karos'
        assert status['network'] == 'dummyNetwork'
        assert status['circuit_breaker']['fail_counter'] == 0
        assert status['circuit_breaker']['current_state'] == 'closed'
        assert status['circuit_breaker']['reset_timeout'] == 60

        from_coord = '47.28696,0.78981'
        to_coord = '47.38642,0.69039'

        period_extremity = utils.PeriodExtremity(
            datetime=utils.str_to_time_stamp("20171225T060000"), represents_start=True
        )
        params = RidesharingServiceManager.InstanceParams.make_params(DummyInstance)
        ridesharing_journeys, feed_publisher = karos.request_journeys_with_feed_publisher(
            from_coord=from_coord, to_coord=to_coord, period_extremity=period_extremity, instance_params=params
        )

        assert len(ridesharing_journeys) == 2
        assert ridesharing_journeys[0].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[0].metadata.system_id == 'karos'
        assert (
            ridesharing_journeys[0].ridesharing_ad
            == 'https://www.karos.fr/vianavigo?data=eyJmaXJzdE5hbWUiOiAiQW50b25lbGxvIiwgImlkIjogImY3MmZlNWNkLWQyODctNDViMy1iMzViLTdkMmFmNTZmOWE2NiIsICJncmFkZSI6IDUsICJhZ2UiOiAyMCwgImxhc3ROYW1lIjogIk0iLCAiZHVyYXRpb25fc2luY2VfbGFzdF9sb2dpbiI6IDk0LCAiZGVwYXJ0dXJlVG9QaWNrdXBXYWxraW5nUG9seWxpbmUiOiAiaWp6aEhpZ19NYVl0YEAiLCAicGljdHVyZSI6ICJodHRwczovL3N0b3JhZ2UtZG93bmxvYWQuZ29vZ2xlYXBpcy5jb20va2Fyb3MtZGUuYXBwc3BvdC5jb20vcC8yMDYwOTg3Ny0yOWRiLTRjZTUtYmIwMy03Njg0MGM0ODY4ZmEuanBnIiwgImRyb3BvZmZUb0Fycml2YWxXYWxraW5nVGltZSI6IDU3NTIsICJwaG9uZV92ZXJpZmllZCI6IHRydWUsICJkdXJhdGlvbiI6IDY5NiwgInByaWNlIjogeyJhbW91bnQiOiAyLjAsICJkaXNjb3VudCI6IDAuMH0sICJnZW5kZXIiOiAiTSIsICJyZXNwb25zZV9yYXRlIjogMC44NDg0ODQ4NDg0ODQ4NDg1LCAiZHJvcG9mZlRvQXJyaXZhbFdhbGtpbmdQb2x5bGluZSI6ICJjd3ZoSGdxZ0x+ZkJieFIiLCAiZGVwYXJ0dXJlX3RpbWUiOiAxNjAyMDY4NTM5LCAibmJfY2FycG9vbCI6IDQzLCAiZGVwYXJ0dXJlVG9QaWNrdXBXYWxraW5nVGltZSI6IDQ1NywgImpvdXJuZXlQb2x5bGluZSI6ICJrZHtoSHNlfkxSZkBSZkBiQn5DakhqTWpDbkZ6QG5BYkJyRD9SUmZAUj9SU3pFekpSZkB6QG5BakNiR3pAYkJSUnpAYkJ+SHpPfkNqSFJSbkF2QmZAYkJ2QmJCekBuQT9mQFJ2QnJEckk/ZkB+Q2ZKUlJuQWJHbkFyRFJmQG5BckRmQHZCekBqQz9SUmZAZkBiQmZAdkJiQnpFfkNmSlJ6QD9SfkNuS1JmQHpAdkJmQGpDekBqQ1JmQFJmQFJmQFJuQVJmQG5BfkNmQGJCP2ZAUmZAdkJ2Rz9SekB2QmZAdkJ6QGpDUm5BekBqQ1JSUnpAYkJuRj9SYkJuRmJCekU/ZkByRGJMbkFyRFJmQD9mQD9SbkFyRFJuQW5BckR2QmpIPz8/ZkBmQFI/Um5GalJ6QHZCUm5BP1I/ZkBSYkJmQD9Se0BTe0BnQHtAP1NnQHtAa0hjVj8/UmdAU1NTU1NSP2ZAZkBSP1JuRmpSekB2QlJuQT9SP2ZAUmJCP3pAUz8/YkdTZkpvQXJdZ0B+V29Bel53THZgRWdAZkpvQWpXZ0BiR3NEckQifQ=='
        )

        assert ridesharing_journeys[0].pickup_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].pickup_place.lat == 48.8047
        assert ridesharing_journeys[0].pickup_place.lon == 2.2897

        assert ridesharing_journeys[0].dropoff_place.addr == ""  # address is not provided in mock
        assert ridesharing_journeys[0].dropoff_place.lat == 48.7821
        assert ridesharing_journeys[0].dropoff_place.lon == 2.1738

        assert ridesharing_journeys[0].shape
        assert ridesharing_journeys[0].shape[0].lat == ridesharing_journeys[0].pickup_place.lat
        assert ridesharing_journeys[0].shape[0].lon == ridesharing_journeys[0].pickup_place.lon
        assert ridesharing_journeys[0].shape[1].lat == 48.8046  # test that we really load a shape
        assert ridesharing_journeys[0].shape[1].lon == 2.2895
        assert ridesharing_journeys[0].shape[-1].lat == ridesharing_journeys[0].dropoff_place.lat
        assert ridesharing_journeys[0].shape[-1].lon == ridesharing_journeys[0].dropoff_place.lon

        assert ridesharing_journeys[0].driver.alias == 'Antonello'
        assert ridesharing_journeys[0].driver.gender == Gender.MALE
        assert ridesharing_journeys[0].driver.image == 'https://dummyimage.com/128x128/C8E6C9/000.png&text=JP'
        assert ridesharing_journeys[0].driver.rate == 5
        assert ridesharing_journeys[0].driver.rate_count is None

        assert ridesharing_journeys[0].price == 200.0
        assert ridesharing_journeys[0].currency == 'centime'
        assert ridesharing_journeys[0].total_seats is None
        assert ridesharing_journeys[0].available_seats == 3
        assert ridesharing_journeys[1].metadata.network == 'dummyNetwork'
        assert ridesharing_journeys[1].metadata.system_id == 'karos'
        assert ridesharing_journeys[1].shape
        assert (
            ridesharing_journeys[1].ridesharing_ad
            == 'https://www.karos.fr/vianavigo?data=eyJmaXJzdE5hbWUiOiAiY2Fyb2xpbmUiLCAiaWQiOiAiMTkwNzFlZTUtZjc2YS00MTMwLTkwZmYtMzM1NTFmOTFlZDBmIiwgImdyYWRlIjogNSwgImFnZSI6IDIwLCAibGFzdE5hbWUiOiAidCIsICJkdXJhdGlvbl9zaW5jZV9sYXN0X2xvZ2luIjogNjIzNCwgImRlcGFydHVyZVRvUGlja3VwV2Fsa2luZ1BvbHlsaW5lIjogImlqemhIaWdfTXxWeXRAIiwgInBpY3R1cmUiOiBudWxsLCAiZHJvcG9mZlRvQXJyaXZhbFdhbGtpbmdUaW1lIjogNTUwMCwgInBob25lX3ZlcmlmaWVkIjogdHJ1ZSwgImR1cmF0aW9uIjogMTE4MSwgInByaWNlIjogeyJhbW91bnQiOiAyLjAsICJkaXNjb3VudCI6IDAuMH0sICJnZW5kZXIiOiAiRiIsICJyZXNwb25zZV9yYXRlIjogMC45NjI5NjI5NjI5NjI5NjI5LCAiZHJvcG9mZlRvQXJyaXZhbFdhbGtpbmdQb2x5bGluZSI6ICJvZ2doSGN2eUtzZkt+fEQiLCAiZGVwYXJ0dXJlX3RpbWUiOiAxNjAyMDc0MTI3LCAibmJfY2FycG9vbCI6IDE0NiwgImRlcGFydHVyZVRvUGlja3VwV2Fsa2luZ1RpbWUiOiA1NzIsICJqb3VybmV5UG9seWxpbmUiOiAia3J5aEhjfWBNemlRfmVmQCJ9'
        )

        assert ridesharing_journeys[1].pickup_place.addr == ""
        assert ridesharing_journeys[1].pickup_place.lat == 48.7967
        assert ridesharing_journeys[1].pickup_place.lon == 2.3037

        assert ridesharing_journeys[1].dropoff_place.addr == ""
        assert ridesharing_journeys[1].dropoff_place.lat == 48.7028
        assert ridesharing_journeys[1].dropoff_place.lon == 2.1029

        assert ridesharing_journeys[1].price == 200.0
        assert ridesharing_journeys[1].currency == 'centime'
        assert ridesharing_journeys[1].total_seats is None
        assert ridesharing_journeys[1].available_seats == 3
        assert feed_publisher == RsFeedPublisher(**DUMMY_KAROS_FEED_PUBLISHER)