carconnectivity-connector-skoda 0.4a8__py3-none-any.whl → 0.4.1__py3-none-any.whl

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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.4a8
3
+ Version: 0.4.1
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.4a11
40
+ Requires-Dist: carconnectivity>=0.4
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,10 +1,10 @@
1
1
  carconnectivity_connectors/skoda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- carconnectivity_connectors/skoda/_version.py,sha256=yk7F-aY3-bSpr2Y78fjZ3DV9CNQcGrOzYh8bBvw_wKI,508
3
- carconnectivity_connectors/skoda/capability.py,sha256=vbAKK8KKre-CndLF6_5qyWLpfa4KZHk1U-hpb6nCL5w,4225
2
+ carconnectivity_connectors/skoda/_version.py,sha256=yF2DwGUoQKNnLhAbpZX8kCQKjw77EZzhRk7_OTftets,511
3
+ carconnectivity_connectors/skoda/capability.py,sha256=wH563-XUb_TnT8di1qDjnj-cY-cNHcAT6z7mx21LhSQ,4770
4
4
  carconnectivity_connectors/skoda/charging.py,sha256=CoUOYHHUPPPldKQvv0h-qrUsoEtstR3iUx-l0IU5rNM,6798
5
5
  carconnectivity_connectors/skoda/climatization.py,sha256=Jut468SkxjPBDTqroWFvDifVPfJBxGjsFed5pc4kZkg,1768
6
6
  carconnectivity_connectors/skoda/command_impl.py,sha256=vgno5Qb5To0hCHOEBWSG8UOwCY9kT5fz1e2y0b6zF7U,3047
7
- carconnectivity_connectors/skoda/connector.py,sha256=cwI-7AAwzKODZgyZtk2qL-HxBdEpEvHE2riVLTePXw4,128467
7
+ carconnectivity_connectors/skoda/connector.py,sha256=TKbdKWSgY-lBQbxqjGmxaJy7Zq_lZ2icFIvLfMENa3w,129771
8
8
  carconnectivity_connectors/skoda/error.py,sha256=ffxzvjmci7vtp9Q1K4DR1kBF0kTJxN5Gluci3kDBkEI,2459
9
9
  carconnectivity_connectors/skoda/mqtt_client.py,sha256=RkZ43NG1Z_TUmc2hUZS0yYUfwewzfut63zZUhQR1xug,39101
10
10
  carconnectivity_connectors/skoda/vehicle.py,sha256=TeY3qKWbBfxFxt6UzSDrB-YZ4L8GURAvINzBiFm9Y9E,3819
@@ -16,8 +16,8 @@ carconnectivity_connectors/skoda/auth/session_manager.py,sha256=Uf1vujuDBYUCAXhY
16
16
  carconnectivity_connectors/skoda/auth/skoda_web_session.py,sha256=tapjCRRPBu3tHrDoKmtuAlQhgxktib3oWTB8MHEzZTY,10816
17
17
  carconnectivity_connectors/skoda/auth/helpers/blacklist_retry.py,sha256=f3wsiY5bpHDBxp7Va1Mv9nKJ4u3qnCHZZmDu78_AhMk,1251
18
18
  carconnectivity_connectors/skoda/ui/connector_ui.py,sha256=2Gywhyki52IxIZXV6DhWhzrBLn2293LlUMhK1Rxnw9w,1376
19
- carconnectivity_connector_skoda-0.4a8.dist-info/LICENSE,sha256=PIwI1alwDyOfvEQHdGCm2u9uf_mGE8030xZDfun0xTo,1071
20
- carconnectivity_connector_skoda-0.4a8.dist-info/METADATA,sha256=FgmLzGc6cUEeulykyeFr7dxJGD0gfGzesmGqZiznnIY,5366
21
- carconnectivity_connector_skoda-0.4a8.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
22
- carconnectivity_connector_skoda-0.4a8.dist-info/top_level.txt,sha256=KqA8GviZsDH4PtmnwSQsz0HB_w-TWkeEHLIRNo5dTaI,27
23
- carconnectivity_connector_skoda-0.4a8.dist-info/RECORD,,
19
+ carconnectivity_connector_skoda-0.4.1.dist-info/LICENSE,sha256=PIwI1alwDyOfvEQHdGCm2u9uf_mGE8030xZDfun0xTo,1071
20
+ carconnectivity_connector_skoda-0.4.1.dist-info/METADATA,sha256=W_S_e-mJ-MSSuh-U3DKmTUahRfUnkFC9nphAbgUUPg0,5363
21
+ carconnectivity_connector_skoda-0.4.1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
22
+ carconnectivity_connector_skoda-0.4.1.dist-info/top_level.txt,sha256=KqA8GviZsDH4PtmnwSQsz0HB_w-TWkeEHLIRNo5dTaI,27
23
+ carconnectivity_connector_skoda-0.4.1.dist-info/RECORD,,
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.4a8'
21
- __version_tuple__ = version_tuple = (0, 4)
20
+ __version__ = version = '0.4.1'
21
+ __version_tuple__ = version_tuple = (0, 4, 1)
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
5
5
  from enum import IntEnum
6
6
 
7
7
  from carconnectivity.objects import GenericObject
8
- from carconnectivity.attributes import StringAttribute
8
+ from carconnectivity.attributes import StringAttribute, GenericAttribute
9
9
 
10
10
  if TYPE_CHECKING:
11
11
  from typing import Dict, Optional
@@ -77,7 +77,7 @@ class Capabilities(GenericObject):
77
77
  """
78
78
  return self.__capabilities.get(capability_id)
79
79
 
80
- def has_capability(self, capability_id: str) -> bool:
80
+ def has_capability(self, capability_id: str, check_status_ok=False) -> bool:
81
81
  """
82
82
  Check if the Capabilities contains a capability with the specified ID.
83
83
 
@@ -87,7 +87,14 @@ class Capabilities(GenericObject):
87
87
  Returns:
88
88
  bool: True if the capability exists, otherwise False.
89
89
  """
90
- return capability_id in self.__capabilities
90
+ if check_status_ok:
91
+ if capability_id in self.__capabilities and self.__capabilities[capability_id].enabled:
92
+ capability: Capability = self.__capabilities[capability_id]
93
+ if capability.status.enabled and capability.status.value is not None and len(capability.status.value) > 0:
94
+ return False
95
+ return True
96
+ return False
97
+ return capability_id in self.__capabilities and self.__capabilities[capability_id].enabled
91
98
 
92
99
 
93
100
  class Capability(GenericObject):
@@ -103,7 +110,7 @@ class Capability(GenericObject):
103
110
  super().__init__(object_id=capability_id, parent=capabilities)
104
111
  self.delay_notifications = True
105
112
  self.capability_id = StringAttribute("id", self, capability_id, tags={'connector_custom'})
106
- self.statuses = list[Capability.Status]
113
+ self.status = GenericAttribute("status", self, value=[], tags={'connector_custom'})
107
114
  self.enabled = True
108
115
  self.delay_notifications = False
109
116
 
@@ -373,15 +373,15 @@ class Connector(BaseConnector):
373
373
  vehicle_to_update = self.fetch_vehicle_status(vehicle_to_update)
374
374
  vehicle_to_update = self.fetch_driving_range(vehicle_to_update)
375
375
  if vehicle_to_update.capabilities is not None and vehicle_to_update.capabilities.enabled:
376
- if vehicle_to_update.capabilities.has_capability('READINESS'):
376
+ if vehicle_to_update.capabilities.has_capability('READINESS', check_status_ok=True):
377
377
  vehicle_to_update = self.fetch_connection_status(vehicle_to_update)
378
- if vehicle_to_update.capabilities.has_capability('PARKING_POSITION'):
378
+ if vehicle_to_update.capabilities.has_capability('PARKING_POSITION', check_status_ok=True):
379
379
  vehicle_to_update = self.fetch_position(vehicle_to_update)
380
- if vehicle_to_update.capabilities.has_capability('CHARGING') and isinstance(vehicle_to_update, SkodaElectricVehicle):
380
+ if vehicle_to_update.capabilities.has_capability('CHARGING', check_status_ok=True) and isinstance(vehicle_to_update, SkodaElectricVehicle):
381
381
  vehicle_to_update = self.fetch_charging(vehicle_to_update)
382
- if vehicle_to_update.capabilities.has_capability('AIR_CONDITIONING'):
382
+ if vehicle_to_update.capabilities.has_capability('AIR_CONDITIONING', check_status_ok=True):
383
383
  vehicle_to_update = self.fetch_air_conditioning(vehicle_to_update)
384
- if vehicle_to_update.capabilities.has_capability('VEHICLE_HEALTH_INSPECTION'):
384
+ if vehicle_to_update.capabilities.has_capability('VEHICLE_HEALTH_INSPECTION', check_status_ok=True):
385
385
  vehicle_to_update = self.fetch_maintenance(vehicle_to_update)
386
386
  vehicle_to_update = self.decide_state(vehicle_to_update)
387
387
  self.car_connectivity.transaction_end()
@@ -1034,6 +1034,20 @@ class Connector(BaseConnector):
1034
1034
  else:
1035
1035
  capability = Capability(capability_id=capability_id, capabilities=vehicle.capabilities)
1036
1036
  vehicle.capabilities.add_capability(capability_id, capability)
1037
+ if 'statuses' in capability_dict and capability_dict['statuses'] is not None:
1038
+ statuses = capability_dict['statuses']
1039
+ if isinstance(statuses, list):
1040
+ for status in statuses:
1041
+ if status in [item.name for item in Capability.Status]:
1042
+ capability.status.value.append(Capability.Status[status])
1043
+ else:
1044
+ LOG_API.warning('Capability status unkown %s', status)
1045
+ capability.status.value.append(Capability.Status.UNKNOWN)
1046
+ else:
1047
+ LOG_API.warning('Capability status not a list in %s', statuses)
1048
+ else:
1049
+ capability.status.value.clear()
1050
+ log_extra_keys(LOG_API, 'capability', capability_dict, {'id', 'statuses'})
1037
1051
  else:
1038
1052
  raise APIError('Could not parse capability, id missing')
1039
1053
  for capability_id in vehicle.capabilities.capabilities.keys() - found_capabilities:
@@ -1043,7 +1057,7 @@ class Connector(BaseConnector):
1043
1057
  else:
1044
1058
  vehicle.capabilities.clear_capabilities()
1045
1059
 
1046
- if vehicle.capabilities.has_capability('VEHICLE_WAKE_UP_TRIGGER'):
1060
+ if vehicle.capabilities.has_capability('VEHICLE_WAKE_UP_TRIGGER', check_status_ok=True):
1047
1061
  if vehicle.commands is not None and vehicle.commands.commands is not None \
1048
1062
  and not vehicle.commands.contains_command('wake-sleep'):
1049
1063
  wake_sleep_command = WakeSleepCommand(parent=vehicle.commands)
@@ -1052,7 +1066,8 @@ class Connector(BaseConnector):
1052
1066
  vehicle.commands.add_command(wake_sleep_command)
1053
1067
 
1054
1068
  # Add HONK_AND_FLASH command if necessary capabilities are available
1055
- if vehicle.capabilities.has_capability('HONK_AND_FLASH') and vehicle.capabilities.has_capability('PARKING_POSITION'):
1069
+ if vehicle.capabilities.has_capability('HONK_AND_FLASH', check_status_ok=True) \
1070
+ and vehicle.capabilities.has_capability('PARKING_POSITION', check_status_ok=True):
1056
1071
  if vehicle.commands is not None and vehicle.commands.commands is not None \
1057
1072
  and not vehicle.commands.contains_command('honk-flash'):
1058
1073
  honk_flash_command = HonkAndFlashCommand(parent=vehicle.commands)
@@ -1061,7 +1076,7 @@ class Connector(BaseConnector):
1061
1076
  vehicle.commands.add_command(honk_flash_command)
1062
1077
 
1063
1078
  # Add lock and unlock command
1064
- if vehicle.capabilities.has_capability('ACCESS'):
1079
+ if vehicle.capabilities.has_capability('ACCESS', check_status_ok=True):
1065
1080
  if vehicle.doors is not None and vehicle.doors.commands is not None and vehicle.doors.commands.commands is not None \
1066
1081
  and not vehicle.doors.commands.contains_command('lock-unlock'):
1067
1082
  lock_unlock_command = LockUnlockCommand(parent=vehicle.doors.commands)