carconnectivity-connector-skoda 0.3__tar.gz → 0.4a2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of carconnectivity-connector-skoda might be problematic. Click here for more details.

Files changed (41) hide show
  1. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/PKG-INFO +2 -2
  2. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/pyproject.toml +1 -1
  3. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connector_skoda.egg-info/PKG-INFO +2 -2
  4. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connector_skoda.egg-info/requires.txt +1 -1
  5. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/_version.py +9 -4
  6. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/climatization.py +8 -6
  7. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/connector.py +49 -0
  8. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/vehicle.py +2 -0
  9. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.flake8 +0 -0
  10. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  12. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/dependabot.yml +0 -0
  13. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/workflows/build.yml +0 -0
  14. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/workflows/build_and_publish.yml +0 -0
  15. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.github/workflows/codeql-analysis.yml +0 -0
  16. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/.gitignore +0 -0
  17. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/CHANGELOG.md +0 -0
  18. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/LICENSE +0 -0
  19. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/Makefile +0 -0
  20. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/README.md +0 -0
  21. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/doc/Config.md +0 -0
  22. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/setup.cfg +0 -0
  23. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/setup_requirements.txt +0 -0
  24. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connector_skoda.egg-info/SOURCES.txt +0 -0
  25. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connector_skoda.egg-info/dependency_links.txt +0 -0
  26. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connector_skoda.egg-info/top_level.txt +0 -0
  27. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/__init__.py +0 -0
  28. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/__init__.py +0 -0
  29. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/auth_util.py +0 -0
  30. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/helpers/blacklist_retry.py +0 -0
  31. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/my_skoda_session.py +0 -0
  32. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/openid_session.py +0 -0
  33. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/session_manager.py +0 -0
  34. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/auth/skoda_web_session.py +0 -0
  35. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/capability.py +0 -0
  36. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/charging.py +0 -0
  37. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/command_impl.py +0 -0
  38. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/error.py +0 -0
  39. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/mqtt_client.py +0 -0
  40. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/src/carconnectivity_connectors/skoda/ui/connector_ui.py +0 -0
  41. {carconnectivity_connector_skoda-0.3 → carconnectivity_connector_skoda-0.4a2}/test/integration_test/carConnectivity.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.3
3
+ Version: 0.4a2
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -37,7 +37,7 @@ Classifier: Topic :: Software Development :: Libraries
37
37
  Requires-Python: >=3.8
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: carconnectivity>=0.3
40
+ Requires-Dist: carconnectivity>=0.4a4
41
41
  Requires-Dist: oauthlib~=3.2.2
42
42
  Requires-Dist: requests~=2.32.3
43
43
  Requires-Dist: jwt~=1.3.1
@@ -14,7 +14,7 @@ authors = [
14
14
  { name = "Till Steinbach" }
15
15
  ]
16
16
  dependencies = [
17
- "carconnectivity>=0.3",
17
+ "carconnectivity>=0.4a4",
18
18
  "oauthlib~=3.2.2",
19
19
  "requests~=2.32.3",
20
20
  "jwt~=1.3.1",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.3
3
+ Version: 0.4a2
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -37,7 +37,7 @@ Classifier: Topic :: Software Development :: Libraries
37
37
  Requires-Python: >=3.8
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: carconnectivity>=0.3
40
+ Requires-Dist: carconnectivity>=0.4a4
41
41
  Requires-Dist: oauthlib~=3.2.2
42
42
  Requires-Dist: requests~=2.32.3
43
43
  Requires-Dist: jwt~=1.3.1
@@ -1,4 +1,4 @@
1
- carconnectivity>=0.3
1
+ carconnectivity>=0.4a4
2
2
  oauthlib~=3.2.2
3
3
  requests~=2.32.3
4
4
  jwt~=1.3.1
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '0.3'
16
- __version_tuple__ = version_tuple = (0, 3)
20
+ __version__ = version = '0.4a2'
21
+ __version_tuple__ = version_tuple = (0, 4)
@@ -1,12 +1,12 @@
1
1
  """
2
- Module for charging for skoda vehicles.
2
+ Module for climatization for skoda vehicles.
3
3
  """
4
4
  from __future__ import annotations
5
5
  from typing import TYPE_CHECKING
6
6
 
7
7
  from carconnectivity.climatization import Climatization
8
8
  from carconnectivity.objects import GenericObject
9
- from carconnectivity.vehicle import ElectricVehicle
9
+ from carconnectivity.vehicle import GenericVehicle
10
10
 
11
11
  from carconnectivity_connectors.skoda.error import Error
12
12
 
@@ -21,13 +21,15 @@ class SkodaClimatization(Climatization): # pylint: disable=too-many-instance-at
21
21
  This class extends the Climatization class and includes an enumeration of various
22
22
  charging states specific to Skoda vehicles.
23
23
  """
24
- def __init__(self, vehicle: ElectricVehicle | None = None, origin: Optional[Climatization] = None) -> None:
24
+ def __init__(self, vehicle: GenericVehicle | None = None, origin: Optional[Climatization] = None) -> None:
25
25
  if origin is not None:
26
26
  super().__init__(origin=origin)
27
- self.settings: Climatization.Settings = SkodaClimatization.Settings(origin=origin.settings)
27
+ if not isinstance(self.settings, SkodaClimatization.Settings):
28
+ self.settings: Climatization.Settings = SkodaClimatization.Settings(parent=self, origin=origin.settings)
29
+ self.settings.parent = self
28
30
  else:
29
31
  super().__init__(vehicle=vehicle)
30
- self.settings: Climatization.Settings = SkodaClimatization.Settings(origin=self.settings)
32
+ self.settings: Climatization.Settings = SkodaClimatization.Settings(parent=self)
31
33
  self.errors: Dict[str, Error] = {}
32
34
 
33
35
  class Settings(Climatization.Settings):
@@ -36,6 +38,6 @@ class SkodaClimatization(Climatization): # pylint: disable=too-many-instance-at
36
38
  """
37
39
  def __init__(self, parent: Optional[GenericObject] = None, origin: Optional[Climatization.Settings] = None) -> None:
38
40
  if origin is not None:
39
- super().__init__(origin=origin)
41
+ super().__init__(parent=parent, origin=origin)
40
42
  else:
41
43
  super().__init__(parent=parent)
@@ -345,6 +345,8 @@ class Connector(BaseConnector):
345
345
  vehicle_to_update = self.fetch_charging(vehicle_to_update)
346
346
  if vehicle_to_update.capabilities.has_capability('AIR_CONDITIONING'):
347
347
  vehicle_to_update = self.fetch_air_conditioning(vehicle_to_update)
348
+ if vehicle_to_update.capabilities.has_capability('VEHICLE_HEALTH_INSPECTION'):
349
+ vehicle_to_update = self.fetch_maintenance(vehicle_to_update)
348
350
 
349
351
  def fetch_charging(self, vehicle: SkodaElectricVehicle, no_cache: bool = False) -> SkodaElectricVehicle:
350
352
  """
@@ -608,6 +610,53 @@ class Connector(BaseConnector):
608
610
  vehicle.position.position_type._set_value(None) # pylint: disable=protected-access
609
611
  return vehicle
610
612
 
613
+ def fetch_maintenance(self, vehicle: SkodaVehicle, no_cache: bool = False) -> SkodaVehicle:
614
+ """
615
+ Fetches the maintenance information for a given Skoda vehicle.
616
+
617
+ Args:
618
+ vehicle (SkodaVehicle): The vehicle object for which maintenance information is to be fetched.
619
+ no_cache (bool, optional): If True, bypasses the cache and fetches fresh data. Defaults to False.
620
+
621
+ Returns:
622
+ SkodaVehicle: The vehicle object with updated maintenance information.
623
+
624
+ Raises:
625
+ APIError: If the VIN is missing or if the 'capturedAt' field is missing in the fetched data.
626
+ ValueError: If the vehicle has no charging object.
627
+ """
628
+ vin = vehicle.vin.value
629
+ if vin is None:
630
+ raise APIError('VIN is missing')
631
+ if vehicle.position is None:
632
+ raise ValueError('Vehicle has no charging object')
633
+ url = f'https://mysmob.api.connect.skoda-auto.cz/api/v3/vehicle-maintenance/vehicles/{vin}/report'
634
+ data: Dict[str, Any] | None = self._fetch_data(url=url, session=self.session, no_cache=no_cache)
635
+ #{'capturedAt': '2025-02-24T19:54:32.728Z', 'inspectionDueInDays': 620, 'mileageInKm': 2512}
636
+ if data is not None:
637
+ if 'capturedAt' in data and data['capturedAt'] is not None:
638
+ captured_at: datetime = robust_time_parse(data['capturedAt'])
639
+ else:
640
+ raise APIError('Could not fetch maintenance, capturedAt missing')
641
+ if 'mileageInKm' in data and data['mileageInKm'] is not None:
642
+ vehicle.odometer._set_value(value=data['mileageInKm'], measured=captured_at, unit=Length.KM) # pylint: disable=protected-access
643
+ else:
644
+ vehicle.odometer._set_value(None) # pylint: disable=protected-access
645
+ if 'inspectionDueInDays' in data and data['inspectionDueInDays'] is not None:
646
+ inspection_due: timedelta = timedelta(days=data['inspectionDueInDays'])
647
+ inspection_date: datetime = captured_at + inspection_due
648
+ inspection_date = inspection_date.replace(hour=0, minute=0, second=0, microsecond=0)
649
+ # pylint: disable-next=protected-access
650
+ vehicle.maintenance.inspection_due_at._set_value(value=inspection_date, measured=captured_at)
651
+ else:
652
+ vehicle.maintenance.inspection_due_at._set_value(None) # pylint: disable=protected-access
653
+ log_extra_keys(LOG_API, 'maintenance', data, {'capturedAt', 'mileageInKm', 'inspectionDueInDays'})
654
+
655
+ #url = f'https://mysmob.api.connect.skoda-auto.cz/api/v1/vehicle-health-report/warning-lights/{vin}'
656
+ #data: Dict[str, Any] | None = self._fetch_data(url=url, session=self.session, no_cache=no_cache)
657
+ #{'capturedAt': '2025-02-24T15:32:35.032Z', 'mileageInKm': 2512, 'warningLights': [{'category': 'ASSISTANCE', 'defects': []}, {'category': 'COMFORT', 'defects': []}, {'category': 'BRAKE', 'defects': []}, {'category': 'ELECTRIC_ENGINE', 'defects': []}, {'category': 'LIGHTING', 'defects': []}, {'category': 'TIRE', 'defects': []}, {'category': 'OTHER', 'defects': []}]}
658
+ return vehicle
659
+
611
660
  def fetch_air_conditioning(self, vehicle: SkodaVehicle, no_cache: bool = False) -> SkodaVehicle:
612
661
  """
613
662
  Fetches the air conditioning data for a given Skoda vehicle and updates the vehicle object with the retrieved data.
@@ -7,6 +7,7 @@ from carconnectivity.charging import Charging
7
7
 
8
8
  from carconnectivity_connectors.skoda.capability import Capabilities
9
9
  from carconnectivity_connectors.skoda.charging import SkodaCharging
10
+ from carconnectivity_connectors.skoda.climatization import SkodaClimatization
10
11
 
11
12
  SUPPORT_IMAGES = False
12
13
  try:
@@ -36,6 +37,7 @@ class SkodaVehicle(GenericVehicle): # pylint: disable=too-many-instance-attribu
36
37
 
37
38
  else:
38
39
  super().__init__(vin=vin, garage=garage, managing_connector=managing_connector)
40
+ self.climatization = SkodaClimatization(vehicle=self, origin=self.climatization)
39
41
  self.capabilities = Capabilities(vehicle=self)
40
42
  if SUPPORT_IMAGES:
41
43
  self._car_images: Dict[str, Image.Image] = {}