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'])
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)
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
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)
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)
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
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)
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
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, )
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)
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
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
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
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
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
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")