diff --git a/CHANGELOG.md b/CHANGELOG.md index 12cf8b4..9cec140 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ The changelog lists relevant feature changes between each release. Search GitHub issues and pull requests for smaller issues. +## 2025-06-25: +- add converter for bolt feeds: remove all bicycle entries + - note: if future bolt feeds contain bicycles, the bicycle entries must be added again + ## 2025-05-16: - add converter for protected lime feed: remove `markets` feed and set `rentals_apps` diff --git a/app/converters/gbfs_bolt_remove_bicycle.py b/app/converters/gbfs_bolt_remove_bicycle.py new file mode 100644 index 0000000..18d84d3 --- /dev/null +++ b/app/converters/gbfs_bolt_remove_bicycle.py @@ -0,0 +1,33 @@ +from typing import Union + +from app.base_converter import BaseConverter + + +class GbfsBoltRemoveBicycleConverter(BaseConverter): + """ + bolt contains no bicycles, so we can remove all bicycle entries. + """ + + hostnames = ['mds.bolt.eu', 'gbfs.prod.sharedmobility.ch'] + + def convert(self, data: Union[dict, list], path: str) -> Union[dict, list]: + if not isinstance(data, dict): + return data + if not path.startswith(('/gbfs/2/', '/v2/gbfs/bolt_')): + return data + + if path.endswith('/vehicle_types'): + fields = data.get('data') + if not isinstance(fields, dict): + return data + vehicle_types = fields.get('vehicle_types') + if not isinstance(vehicle_types, list): + return data + newlist = [] + for vehicle_type in vehicle_types: + if vehicle_type.get('form_factor') != 'bicycle': + newlist.append(vehicle_type) + fields['vehicle_types'] = newlist + return data + + return data