carconnectivity-connector-seatcupra 0.1a10__tar.gz → 0.1a12__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.
Files changed (39) hide show
  1. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/PKG-INFO +2 -2
  2. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/pyproject.toml +1 -1
  3. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connector_seatcupra.egg-info/PKG-INFO +2 -2
  4. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connector_seatcupra.egg-info/requires.txt +1 -1
  5. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/_version.py +1 -1
  6. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/connector.py +20 -6
  7. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.flake8 +0 -0
  8. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/dependabot.yml +0 -0
  11. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/workflows/build.yml +0 -0
  12. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/workflows/build_and_publish.yml +0 -0
  13. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.github/workflows/codeql-analysis.yml +0 -0
  14. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/.gitignore +0 -0
  15. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/CHANGELOG.md +0 -0
  16. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/LICENSE +0 -0
  17. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/Makefile +0 -0
  18. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/README.md +0 -0
  19. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/doc/Config.md +0 -0
  20. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/setup.cfg +0 -0
  21. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/setup_requirements.txt +0 -0
  22. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connector_seatcupra.egg-info/SOURCES.txt +0 -0
  23. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connector_seatcupra.egg-info/dependency_links.txt +0 -0
  24. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connector_seatcupra.egg-info/top_level.txt +0 -0
  25. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/__init__.py +0 -0
  26. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/__init__.py +0 -0
  27. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/auth_util.py +0 -0
  28. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/helpers/blacklist_retry.py +0 -0
  29. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/my_cupra_session.py +0 -0
  30. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/openid_session.py +0 -0
  31. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/session_manager.py +0 -0
  32. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/auth/vw_web_session.py +0 -0
  33. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/capability.py +0 -0
  34. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/charging.py +0 -0
  35. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/climatization.py +0 -0
  36. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/command_impl.py +0 -0
  37. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/ui/connector_ui.py +0 -0
  38. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/src/carconnectivity_connectors/seatcupra/vehicle.py +0 -0
  39. {carconnectivity_connector_seatcupra-0.1a10 → carconnectivity_connector_seatcupra-0.1a12}/test/integration_test/carConnectivity.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: carconnectivity-connector-seatcupra
3
- Version: 0.1a10
3
+ Version: 0.1a12
4
4
  Summary: CarConnectivity connector for Seat and Cupra 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.9
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: carconnectivity>=0.4a4
40
+ Requires-Dist: carconnectivity>=0.4a6
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.4a4",
17
+ "carconnectivity>=0.4a6",
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-seatcupra
3
- Version: 0.1a10
3
+ Version: 0.1a12
4
4
  Summary: CarConnectivity connector for Seat and Cupra 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.9
38
38
  Description-Content-Type: text/markdown
39
39
  License-File: LICENSE
40
- Requires-Dist: carconnectivity>=0.4a4
40
+ Requires-Dist: carconnectivity>=0.4a6
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.4a4
1
+ carconnectivity>=0.4a6
2
2
  oauthlib~=3.2.2
3
3
  requests~=2.32.3
4
4
  jwt~=1.3.1
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.1a10'
20
+ __version__ = version = '0.1a12'
21
21
  __version_tuple__ = version_tuple = (0, 1)
@@ -77,6 +77,16 @@ class Connector(BaseConnector):
77
77
 
78
78
  self.connected: BooleanAttribute = BooleanAttribute(name="connected", parent=self, tags={'connector_custom'})
79
79
  self.interval: DurationAttribute = DurationAttribute(name="interval", parent=self, tags={'connector_custom'})
80
+
81
+ def __check_interval(attribute: GenericAttribute, value: Any) -> Any:
82
+ del attribute
83
+ if value is not None and value < timedelta(seconds=180):
84
+ raise ValueError('Intervall must be at least 180 seconds')
85
+ return value
86
+
87
+ self.interval._is_changeable = True # pylint: disable=protected-access
88
+ self.interval._add_on_set_hook(__check_interval) # pylint: disable=protected-access
89
+
80
90
  self.commands: Commands = Commands(parent=self)
81
91
 
82
92
  LOG.info("Loading seatcupra connector with config %s", config_remove_credentials(config))
@@ -159,6 +169,7 @@ class Connector(BaseConnector):
159
169
 
160
170
  def startup(self) -> None:
161
171
  self._background_thread = threading.Thread(target=self._background_loop, daemon=False)
172
+ self._background_thread.name = 'carconnectivity.connectors.seatcupra-background'
162
173
  self._background_thread.start()
163
174
 
164
175
  def _background_loop(self) -> None:
@@ -226,10 +237,10 @@ class Connector(BaseConnector):
226
237
  self.car_connectivity.garage.remove_vehicle(vehicle.id)
227
238
  vehicle.enabled = False
228
239
  self._stop_event.set()
240
+ self.session.close()
229
241
  if self._background_thread is not None:
230
242
  self._background_thread.join()
231
243
  self.persist()
232
- self.session.close()
233
244
  BaseConnector.shutdown(self)
234
245
 
235
246
  def fetch_all(self) -> None:
@@ -524,6 +535,10 @@ class Connector(BaseConnector):
524
535
  else:
525
536
  vehicle.doors.open_state._set_value(Doors.OpenState.OPEN, measured=captured_at) # pylint: disable=protected-access
526
537
  seen_window_ids: set[str] = set()
538
+ if 'sunRoof' in vehicle_status_data and vehicle_status_data['sunRoof'] is not None \
539
+ and 'windows' in vehicle_status_data and vehicle_status_data['windows'] is not None:
540
+ vehicle_status_data['windows']['sunRoof'] = vehicle_status_data['sunRoof']
541
+
527
542
  if 'windows' in vehicle_status_data and vehicle_status_data['windows'] is not None:
528
543
  all_windows_closed = True
529
544
  for window_id, window_status in vehicle_status_data['windows'].items():
@@ -550,7 +565,7 @@ class Connector(BaseConnector):
550
565
  for window_id in vehicle.windows.windows.keys() - seen_window_ids:
551
566
  vehicle.windows.windows[window_id].enabled = False
552
567
  log_extra_keys(LOG_API, f'/api/v2/vehicle-status/{vin}', vehicle_status_data, {'updatedAt', 'locked', 'lights', 'hood', 'trunk', 'doors',
553
- 'windows'})
568
+ 'windows', 'sunRoof'})
554
569
  return vehicle
555
570
 
556
571
  def fetch_vehicle_mycar_status(self, vehicle: SeatCupraVehicle, no_cache: bool = False) -> SeatCupraVehicle:
@@ -994,7 +1009,7 @@ class Connector(BaseConnector):
994
1009
  if img is None or self.active_config['max_age'] is None \
995
1010
  or (cache_date is not None and cache_date < (datetime.utcnow() - timedelta(seconds=self.active_config['max_age']))):
996
1011
  try:
997
- image_download_response = requests.get(image_url, stream=True, timeout=180)
1012
+ image_download_response = requests.get(image_url, stream=True, timeout=10)
998
1013
  if image_download_response.status_code == requests.codes['ok']:
999
1014
  img = Image.open(image_download_response.raw) # pyright: ignore[reportPossiblyUnboundVariable]
1000
1015
  if self.session.cache is not None:
@@ -1204,14 +1219,13 @@ class Connector(BaseConnector):
1204
1219
  command_dict = {'spin': spin}
1205
1220
  url = f'https://ola.prod.code.seat.cloud.vwgroup.com/v2/users/{self.session.user_id}/spin/verify'
1206
1221
  spin_verify_response: requests.Response = self.session.post(url, data=json.dumps(command_dict), allow_redirects=True)
1207
- if spin_verify_response.status_code != requests.codes['ok']:
1222
+ if spin_verify_response.status_code != requests.codes['created']:
1208
1223
  raise AuthenticationError(f'Could not fetch security token ({spin_verify_response.status_code}: {spin_verify_response.text})')
1209
1224
  data = spin_verify_response.json()
1210
1225
  if 'securityToken' in data:
1211
1226
  return data['securityToken']
1212
1227
  raise AuthenticationError('Could not fetch security token')
1213
1228
 
1214
-
1215
1229
  def __on_spin(self, spin_command: SpinCommand, command_arguments: Union[str, Dict[str, Any]]) \
1216
1230
  -> Union[str, Dict[str, Any]]:
1217
1231
  del spin_command
@@ -1234,7 +1248,7 @@ class Connector(BaseConnector):
1234
1248
  raise CommandError(f'Unknown command {command_arguments["command"]}')
1235
1249
  try:
1236
1250
  command_response: requests.Response = self.session.post(url, data=json.dumps(command_dict), allow_redirects=True)
1237
- if command_response.status_code != requests.codes['ok']:
1251
+ if command_response.status_code != requests.codes['created']:
1238
1252
  LOG.error('Could not execute spin command (%s: %s)', command_response.status_code, command_response.text)
1239
1253
  raise CommandError(f'Could not execute spin command ({command_response.status_code}: {command_response.text})')
1240
1254
  else: