/ backend / providers / hely.py
hely.py
 1  import json
 2  from typing import List
 3  from decimal import Decimal
 4  
 5  import jq
 6  from scrapy.http import HtmlResponse
 7  
 8  from cache.store import strip_all_get_decimal
 9  from models.interface import ProviderInterface, VehicleOption, Calculator
10  
11  
12  class Hely(ProviderInterface):
13      async def get_vehicles_options(self) -> List[VehicleOption]:
14          pricing_page = self.get_pricing_html()[0]
15          response = HtmlResponse(
16              url=pricing_page.url, body=pricing_page.html, encoding="utf-8"
17          )
18  
19          city_car = e_city_car = transporter_car = e_comfort_car = None
20  
21          for element in (
22              jq.compile(".. | select(.priceTableTariffRows?) | .priceTableTariffRows")
23              .input_text(response.css("script::text").extract()[0])
24              .all()[0]
25          ):
26              if element["cell1Heading"]["en"] == "CITY CAR":
27                  city_car = strip_all_get_decimal(element["cell2Heading"]["en"])
28              if element["cell1Heading"]["en"] == "E-CITY CAR":
29                  e_city_car = strip_all_get_decimal(element["cell2Heading"]["en"])
30              if element["cell1Heading"]["en"] == "TRANSPORTER CAR":
31                  transporter_car = strip_all_get_decimal(element["cell2Heading"]["en"])
32              if element["cell1Heading"]["en"] == "E-COMFORT CAR":
33                  e_comfort_car = strip_all_get_decimal(element["cell2Heading"]["en"])
34  
35          return [
36              VehicleOption(
37                  calculator=Calculator(
38                      price_per_minute=city_car / 60,
39                      price_per_km=Decimal(0),
40                      vehicle_request=self.vehicle_request,
41                  ),
42                  vehicle_image="hely-city-car.png",
43                  provider="Hely",
44                  type="City Car",
45              ),
46              VehicleOption(
47                  calculator=Calculator(
48                      price_per_minute=e_city_car / 60,
49                      price_per_km=Decimal(0),
50                      vehicle_request=self.vehicle_request,
51                  ),
52                  electric=True,
53                  vehicle_image="hely-e-city-car.png",
54                  provider="Hely",
55                  type="E-City Car",
56              ),
57              VehicleOption(
58                  calculator=Calculator(
59                      price_per_minute=transporter_car / 60,
60                      price_per_km=Decimal(0),
61                      vehicle_request=self.vehicle_request,
62                  ),
63                  vehicle_image="hely-comfort.png",
64                  provider="Hely",
65                  type="Transporter Car",
66              ),
67              VehicleOption(
68                  calculator=Calculator(
69                      price_per_minute=e_comfort_car / 60,
70                      price_per_km=Decimal(0),
71                      vehicle_request=self.vehicle_request,
72                  ),
73                  electric=True,
74                  vehicle_image="hely-comfort.png",
75                  provider="Hely",
76                  type="E-Comfort Car",
77              ),
78          ]