Exemple #1
0
 def process_data(self, data, poi):
     park = jmespath.search(
         'records[?car_park_id==`{}`]|[0]'.format(poi['properties']['ref']),
         data)
     if park:
         return ParkingPlaces(park['available'], park['occupied'],
                              park['available_PRM'], park['occupied_PRM'])
Exemple #2
0
 def get_old_items(self, park):
     available = jmespath.search('fields.nombreplacesdisponibles', park)
     occupied = jmespath.search('fields.nombreplacesoccupees', park)
     # Person with reduced mobility
     available_PRM = jmespath.search('fields.nombreplacesdisponiblespmr',
                                     park)
     occupied_PRM = jmespath.search('fields.nombreplacesoccupeespmr', park)
     return ParkingPlaces(available, occupied, available_PRM, occupied_PRM)
Exemple #3
0
def car_park_space_get_information_no_data_test():
    star_response = {"records": [{"datasetid": "tco-parcsrelais-etat-tr", "fields": {"idparc": "42"}}]}
    provider = StarProvider("http://fake.url", {'Keolis Rennes'}, 'toto', 42, username=None)
    empty_parking = ParkingPlaces(available=None, occupied=None, available_PRM=None, occupied_PRM=None)
    with requests_mock.Mocker() as m:
        m.get('http://fake.url?dataset=toto', json=star_response)
        assert provider.get_informations(poi) == empty_parking
        assert m.called
Exemple #4
0
 def process_data(self, data, poi):
     park = jmespath.search('records[?to_number(fields.{})==`{}`]|[0]'
                            .format(self.id_park, poi['properties']['ref']), data)
     if park:
         available = jmespath.search('fields.{}'.format(self.available), park)
         nb_places = jmespath.search('fields.{}'.format(self.total), park)
         if available is not None and nb_places is not None and nb_places >= available:
             occupied = nb_places - available
         else:
             occupied = None
         return ParkingPlaces(available, occupied, None, None)
Exemple #5
0
 def process_data(self, data, poi):
     park = jmespath.search(
         'records[?fields.numero_parking==\'{}\']|[0]'.format(
             poi['properties']['ref'].zfill(2)), data)
     if park:
         available = jmespath.search('fields.nombre_places_libres', park)
         nb_places = jmespath.search('fields.nombre_places', park)
         if available is not None and nb_places is not None and nb_places >= available:
             occupied = nb_places - available
         else:
             occupied = None
         return ParkingPlaces(available, occupied, None, None)
Exemple #6
0
def car_park_space_get_information_test():
    parking_places = ParkingPlaces(available=4,
                                   occupied=3,
                                   available_PRM=1,
                                   occupied_PRM=0)
    provider = SytralProvider(url="sytral.url",
                              operators={'Sytral'},
                              dataset='sytral_dataset',
                              timeout=42)
    provider._call_webservice = MagicMock(
        return_value=json.loads(sytral_response))
    info = provider.get_informations(poi)
    assert info == parking_places
Exemple #7
0
 def process_data(self, data, poi):
     park = jmespath.search(
         'records[?fields.idparc==\'{}\']|[0]'.format(
             poi['properties']['ref']), data)
     if park:
         available = jmespath.search('fields.nombreplacesdisponibles', park)
         occupied = jmespath.search('fields.nombreplacesoccupees', park)
         # Person with reduced mobility
         available_PRM = jmespath.search(
             'fields.nombreplacesdisponiblespmr', park)
         occupied_PRM = jmespath.search('fields.nombreplacesoccupeespmr',
                                        park)
         return ParkingPlaces(available, occupied, available_PRM,
                              occupied_PRM)
Exemple #8
0
def car_park_space_get_new_information_ok_without_PMR_test():
    # Information of PRM is not provided
    parking_places = ParkingPlaces(
        available=4,
        occupied=6,
        total_places=10,
        available_ridesharing=10,
        occupied_ridesharing=20,
        available_electric_vehicle=5,
        occupied_electric_vehicle=10,
        state="OUVERT",
    )
    provider = StarProvider("http://fake.url", {'Keolis Rennes'}, 'new-etat-test', 42, username=None)
    star_response = {
        "records": [
            {
                "datasetid": "tco-parcsrelais-new-etat-tr",
                "fields": {
                    "jrdinfosoliste": 4,
                    "capacitesoliste": 10,
                    "jrdinfocovoiturage": 10,
                    "capacitecovoiturage": 30,
                    "jrdinfoelectrique": 5,
                    "capaciteve": 15,
                    "etatouverture": "OUVERT",
                    "idparc": "42",
                },
            }
        ]
    }

    with requests_mock.Mocker() as m:
        m.get('http://fake.url?dataset=new-etat-test', json=star_response)
        info = provider.get_informations(poi)
        assert info == parking_places
        assert hasattr(info, "available")
        assert hasattr(info, "occupied")
        assert hasattr(info, "total_places")
        assert hasattr(info, "available_ridesharing")
        assert hasattr(info, "occupied_ridesharing")
        assert hasattr(info, "available_electric_vehicle")
        assert hasattr(info, "occupied_electric_vehicle")
        assert hasattr(info, "state")
        assert not hasattr(info, "available_PRM")
        assert hasattr(info, "occupied_PRM")
        assert m.called
Exemple #9
0
    def get_new_items(self, park):
        occupied = 0
        occupied_PRM = 0
        occupied_ridesharing = 0
        occupied_electric_vehicle = 0

        available = jmespath.search('fields.jrdinfosoliste', park)
        total_places = jmespath.search('fields.capacitesoliste', park)
        if any(n is not None for n in [available, total_places]):
            occupied = total_places - (available or 0)
        # Person with reduced mobility
        available_PRM = jmespath.search('fields.jrdinfopmr', park)
        total_places_PRM = jmespath.search('fields.capacitepmr', park)
        if any(n is not None for n in [available_PRM, total_places_PRM]):
            occupied_PRM = total_places_PRM - (available_PRM or 0)
        available_ridesharing = jmespath.search('fields.jrdinfocovoiturage',
                                                park)
        total_places_ridesharing = jmespath.search(
            'fields.capacitecovoiturage', park)
        if any(n is not None
               for n in [available_ridesharing, total_places_ridesharing]):
            occupied_ridesharing = total_places_ridesharing - (
                available_ridesharing or 0)
        available_electric_vehicle = jmespath.search(
            'fields.jrdinfoelectrique', park)
        total_places_electric_vehicle = jmespath.search(
            'fields.capaciteve', park)
        if any(n is not None for n in
               [available_electric_vehicle, total_places_electric_vehicle]):
            occupied_electric_vehicle = total_places_electric_vehicle - (
                available_electric_vehicle or 0)
        state = jmespath.search('fields.etatouverture', park)
        return ParkingPlaces(
            available,
            occupied,
            available_PRM,
            occupied_PRM,
            total_places,
            available_ridesharing,
            occupied_ridesharing,
            available_electric_vehicle,
            occupied_electric_vehicle,
            state,
        )
Exemple #10
0
    def get_informations(self, poi):
        ref = poi.get('properties', {}).get('ref')
        if not ref:
            return

        data = self._call_webservice(ref)
        if not data:
            return

        available = jmespath.search(
            'records[0].fields.nombreplacesdisponibles', data)
        occupied = jmespath.search('records[0].fields.nombreplacesoccupees',
                                   data)
        # Person with reduced mobility
        available_PRM = jmespath.search(
            'records[0].fields.nombreplacesdisponiblespmr', data)
        occupied_PRM = jmespath.search(
            'records[0].fields.nombreplacesoccupeespmr', data)

        return ParkingPlaces(available, occupied, available_PRM, occupied_PRM)
Exemple #11
0
def car_park_space_get_information_ok_test():
    parking_places = ParkingPlaces(available=4,
                                   occupied=3,
                                   available_PRM=2,
                                   occupied_PRM=0)
    star_response = {
        "records": [{
            "fields": {
                "nombreplacesdisponibles": 4,
                "nombreplacesoccupees": 3,
                "nombreplacesdisponiblespmr": 2,
                "nombreplacesoccupeespmr": 0,
                "idparc": "42",
            }
        }]
    }

    provider = StarProvider("http://fake.url", {'Keolis Rennes'}, 'toto', 42)
    with requests_mock.Mocker() as m:
        m.get('http://fake.url?dataset=toto', json=star_response)
        assert provider.get_informations(poi) == parking_places
        assert m.called
Exemple #12
0
def car_park_space_get_information_ok_without_PMR_test():
    # Information of PRM is not provided
    parking_places = ParkingPlaces(available=4, occupied=3)
    provider = StarProvider("http://fake.url", {'Keolis Rennes'}, 'toto', 42, username=None)
    star_response = {
        "records": [
            {
                "datasetid": "tco-parcsrelais-etat-tr",
                "fields": {"nombreplacesdisponibles": 4, "nombreplacesoccupees": 3, "idparc": "42"},
            }
        ]
    }

    with requests_mock.Mocker() as m:
        m.get('http://fake.url?dataset=toto', json=star_response)
        info = provider.get_informations(poi)
        assert info == parking_places
        assert hasattr(info, "available")
        assert hasattr(info, "occupied")
        assert not hasattr(info, "available_PRM")
        assert not hasattr(info, "occupied_PRM")
        assert m.called
Exemple #13
0
def car_park_space_get_new_information_ok_test():
    parking_places = ParkingPlaces(
        available=4,
        occupied=6,
        available_PRM=2,
        occupied_PRM=0,
        total_places=10,
        available_ridesharing=10,
        occupied_ridesharing=20,
        available_electric_vehicle=5,
        occupied_electric_vehicle=10,
        state="OUVERT",
    )
    star_response = {
        "records": [
            {
                "datasetid": "tco-parcsrelais-new-etat-tr",
                "fields": {
                    "jrdinfosoliste": 4,
                    "capacitesoliste": 10,
                    "jrdinfopmr": 2,
                    "capacitepmr": 2,
                    "jrdinfocovoiturage": 10,
                    "capacitecovoiturage": 30,
                    "jrdinfoelectrique": 5,
                    "capaciteve": 15,
                    "etatouverture": "OUVERT",
                    "idparc": "42",
                },
            }
        ]
    }

    provider = StarProvider("http://fake.url", {'Keolis Rennes'}, 'test', 42, username=None)
    with requests_mock.Mocker() as m:
        m.get('http://fake.url?dataset=test', json=star_response)
        assert provider.get_informations(poi) == parking_places
        assert m.called
Exemple #14
0
def car_park_space_get_information_test():

    parking_places = ParkingPlaces(available=4,
                                   occupied=3)

    provider = DiviaProvider("fake.url", {'Divia'}, 'toto', 42)
    divia_response = """
    {
        "records":[
            {
                "fields": {
                    "numero_parking": "42",
                    "nombre_places_libres": 4,
                    "nombre_places": 7
                }
            }
        ]
    }
    """
    import json
    provider._call_webservice = MagicMock(return_value=json.loads(divia_response))
    info = provider.get_informations(poi)
    assert info == parking_places
    assert not hasattr(info, "available_PRM")
    assert not hasattr(info, "occupied_PRM")

    provider._call_webservice = MagicMock(return_value=None)
    assert provider.get_informations(poi) is None

    divia_response = """
    {
        "records":[
            {
                "fields": {
                }
            }
        ]
    }
    """

    provider._call_webservice = MagicMock(return_value=json.loads(divia_response))
    assert provider.get_informations(poi) is None

    divia_response = """
    {
        "records":[
        ]
    }
    """
    provider._call_webservice = MagicMock(return_value=json.loads(divia_response))
    assert provider.get_informations(poi) is None

    divia_response = """
    {
        "records":[
            {
                "fields": {
                    "numero_parking": "42"
                }
            }
        ]
    }
    """
    empty_parking = ParkingPlaces(available=None,
                                  occupied=None,
                                  available_PRM=None,
                                  occupied_PRM=None)
    provider._call_webservice = MagicMock(return_value=json.loads(divia_response))
    assert provider.get_informations(poi) == empty_parking
Exemple #15
0
    def _test():

        parking_places = ParkingPlaces(available=4, occupied=3)

        provider = divia_class("fake.url", {'Divia'}, 'toto', 42)
        divia_response = """
        {
            "records":[
                {
                    "fields": {
                        "%s": "42",
                        "%s": 4,
                        "%s": 7
                    }
                }
            ]
        }
        """ % (
            search_pattern.id_park,
            search_pattern.available,
            search_pattern.total,
        )

        import json

        provider._call_webservice = MagicMock(
            return_value=json.loads(divia_response))
        info = provider.get_informations(poi)
        assert info == parking_places
        assert not hasattr(info, "available_PRM")
        assert not hasattr(info, "occupied_PRM")

        provider._call_webservice = MagicMock(return_value=None)
        assert provider.get_informations(poi) is None

        divia_response = """
        {
            "records":[
                {
                    "fields": {
                    }
                }
            ]
        }
        """

        provider._call_webservice = MagicMock(
            return_value=json.loads(divia_response))
        assert provider.get_informations(poi) is None

        divia_response = """
        {
            "records":[
            ]
        }
        """
        provider._call_webservice = MagicMock(
            return_value=json.loads(divia_response))
        assert provider.get_informations(poi) is None

        divia_response = ("""
        {
            "records":[
                {
                    "fields": {
                        "%s": "42"
                    }
                }
            ]
        }
        """ % search_pattern.id_park)
        empty_parking = ParkingPlaces(available=None,
                                      occupied=None,
                                      available_PRM=None,
                                      occupied_PRM=None)
        provider._call_webservice = MagicMock(
            return_value=json.loads(divia_response))
        assert provider.get_informations(poi) == empty_parking
Exemple #16
0
def car_park_space_get_information_test():
    parking_places = ParkingPlaces(available=4,
                                   occupied=3,
                                   available_PRM=2,
                                   occupied_PRM=0)
    provider = StarProvider("fake.url", {'Keolis Rennes'}, 'toto', 42)
    star_response = """
    {
        "records":[
            {
                "fields": {
                    "nombreplacesdisponibles": 4,
                    "nombreplacesoccupees": 3,
                    "nombreplacesdisponiblespmr": 2,
                    "nombreplacesoccupeespmr": 0,
                    "idparc": "42"
                }
            }
        ]
    }
    """
    import json
    provider._call_webservice = MagicMock(
        return_value=json.loads(star_response))
    assert provider.get_informations(poi) == parking_places

    invalid_poi = {}
    assert provider.get_informations(invalid_poi) is None

    provider._call_webservice = MagicMock(return_value=None)
    assert provider.get_informations(poi) is None

    star_response = """
    {
        "records":[
            {
                "fields": {
                    "idparc": "42"
                }
            }
        ]
    }
    """
    empty_parking = ParkingPlaces(available=None,
                                  occupied=None,
                                  available_PRM=None,
                                  occupied_PRM=None)
    provider._call_webservice = MagicMock(
        return_value=json.loads(star_response))
    assert provider.get_informations(poi) == empty_parking

    star_response = """
    {
        "records":[
        ]
    }
    """
    provider._call_webservice = MagicMock(
        return_value=json.loads(star_response))
    assert provider.get_informations(poi) is None

    # Information of PRM is not provided
    parking_places = ParkingPlaces(available=4, occupied=3)
    provider = StarProvider('Keolis Rennes', 'toto', 42)
    star_response = """
    {
        "records":[
            {
                "fields": {
                    "nombreplacesdisponibles": 4,
                    "nombreplacesoccupees": 3,
                    "idparc": "42"
                }
            }
        ]
    }
    """

    provider._call_webservice = MagicMock(
        return_value=json.loads(star_response))
    info = provider.get_informations(poi)
    assert info == parking_places
    assert hasattr(info, "available")
    assert hasattr(info, "occupied")
    assert not hasattr(info, "available_PRM")
    assert not hasattr(info, "occupied_PRM")