Skip to content

Commit ee34196

Browse files
check propulsion_type for current_range_meters
1 parent e74068d commit ee34196

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

app/converters/gbfs_nextbike_set_range_properties.py

+28-7
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,47 @@
66
class GbfsNextbikeSetRangePropertiesConverter(BaseConverter):
77
hostnames = ['gbfs.nextbike.net']
88

9+
vehicle_types_cache_per_system: dict[str, list[dict]] = {}
10+
11+
@staticmethod
12+
def _get_system_id_from_path(path: str) -> str:
13+
return path.split('/')[-3:-2][0]
14+
915
def convert(self, data: Union[dict, list], path: str) -> Union[dict, list]:
1016
if not isinstance(data, dict):
1117
return data
1218

1319
if path.endswith('/vehicle_types.json'):
14-
for vehicle_type in data['data'].get('vehicle_types', []):
20+
vehicle_types = data.get('data', {}).get('vehicle_types', [])
21+
if not isinstance(vehicle_types, list):
22+
return data
23+
for vehicle_type in vehicle_types:
1524
if 'propulsion_type' not in vehicle_type or vehicle_type['propulsion_type'] == 'human':
1625
continue
1726
if 'max_range_meters' not in vehicle_type or vehicle_type['max_range_meters'] == 0:
1827
vehicle_type['max_range_meters'] = 60000
28+
system_id = self._get_system_id_from_path(path)
29+
self.vehicle_types_cache_per_system[system_id] = vehicle_types
1930
return data
2031

2132
if path.endswith('/free_bike_status.json'):
22-
for bike in data['data'].get('bikes', []):
23-
if 'vehicle_type_id' not in bike:
33+
system_id = self._get_system_id_from_path(path)
34+
vehicles_types = self.vehicle_types_cache_per_system.get(system_id, [])
35+
if not vehicles_types:
36+
return data
37+
vehicles = data.get('data', {}).get('bikes', [])
38+
if not isinstance(vehicles, list):
39+
return data
40+
for vehicle in vehicles:
41+
if 'vehicle_type_id' not in vehicle:
2442
continue
25-
# vehicle_type_id = bike['vehicle_type_id']
26-
# check if vehicle_type has propulsion_type != human
27-
if 'current_range_meters' not in bike or bike['current_range_meters'] == 0:
28-
bike['current_range_meters'] = 1000
43+
vehicle_type_id = vehicle['vehicle_type_id']
44+
for vehicle_type in vehicle_types:
45+
if 'vehicle_type_id' not in vehicle_type or vehicle_type['vehicle_type_id'] != vehicle_type_id:
46+
continue
47+
if 'current_range_meters' not in vehicle or vehicle['current_range_meters'] == 0:
48+
vehicle['current_range_meters'] = 1000
49+
break
2950
return data
3051

3152
return data

0 commit comments

Comments
 (0)