repository.py
1 import asyncio 2 from typing import List 3 4 from models.interface import VehicleOption 5 from models.models import ProviderVehiclesRequest 6 from providers.greenwheels import GreenWheels 7 from providers.hely import Hely 8 from providers.mywheels import MyWheels 9 from providers.owncar import OwnCar 10 from providers.sharenow import ShareNow 11 from providers.sixtshare import SixtShare 12 from providers.snappcar import SnappCar 13 14 15 async def get_options_ordered( 16 vehicle_request: ProviderVehiclesRequest, 17 ) -> List[VehicleOption]: 18 providers = [ 19 GreenWheels( 20 vehicle_request=vehicle_request, 21 pricing_urls=["https://www.greenwheels.nl/en-us/rates"], 22 free_parking=False, 23 ), 24 MyWheels( 25 vehicle_request=vehicle_request, 26 pricing_urls=["https://mywheels.nl/en/tarieven"], 27 free_parking=False, 28 ), 29 ShareNow( 30 vehicle_request=vehicle_request, 31 pricing_urls=[ 32 "https://www.share-now.com/nl/en/peugeot-e-208/", 33 "https://www.share-now.com/nl/en/fiat-500e/", 34 "https://www.share-now.com/nl/en/pricing/" 35 ], 36 free_parking=True, 37 ), 38 SixtShare( 39 vehicle_request=vehicle_request, 40 pricing_urls=["https://www.sixt.nl/share/tarieven/#/"], 41 free_parking=True, 42 ), 43 Hely( 44 vehicle_request=vehicle_request, 45 pricing_urls=["https://hely.com/tarieven?lng=en"], 46 free_parking=True, 47 ), 48 OwnCar(vehicle_request=vehicle_request, free_parking=False), 49 SnappCar(vehicle_request=vehicle_request, free_parking=False), 50 ] 51 52 if vehicle_request.free_parking is True: 53 providers = filter(lambda x: x.free_parking, providers) 54 55 return sorted( 56 [ 57 vehicle 58 for provider_result in await asyncio.gather( 59 *(p.get_vehicles_options() for p in providers) 60 ) 61 for vehicle in provider_result 62 ], 63 key=lambda x: x.total_price, 64 )