/ backend / repository.py
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      )