carconnectivity-connector-seatcupra 0.2a5__tar.gz → 0.4__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 (41) hide show
  1. carconnectivity_connector_seatcupra-0.4/CHANGELOG.md +54 -0
  2. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/PKG-INFO +2 -2
  3. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/doc/Config.md +2 -1
  4. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/pyproject.toml +1 -1
  5. carconnectivity_connector_seatcupra-0.4/setup_requirements.txt +6 -0
  6. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connector_seatcupra.egg-info/PKG-INFO +2 -2
  7. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connector_seatcupra.egg-info/requires.txt +1 -1
  8. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/_version.py +2 -2
  9. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/command_impl.py +6 -2
  10. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/connector.py +20 -4
  11. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/ui/connector_ui.py +2 -2
  12. carconnectivity_connector_seatcupra-0.2a5/CHANGELOG.md +0 -25
  13. carconnectivity_connector_seatcupra-0.2a5/setup_requirements.txt +0 -6
  14. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.flake8 +0 -0
  15. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/dependabot.yml +0 -0
  18. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/workflows/build.yml +0 -0
  19. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/workflows/build_and_publish.yml +0 -0
  20. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.github/workflows/codeql-analysis.yml +0 -0
  21. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/.gitignore +0 -0
  22. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/LICENSE +0 -0
  23. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/Makefile +0 -0
  24. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/README.md +0 -0
  25. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/setup.cfg +0 -0
  26. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connector_seatcupra.egg-info/SOURCES.txt +0 -0
  27. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connector_seatcupra.egg-info/dependency_links.txt +0 -0
  28. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connector_seatcupra.egg-info/top_level.txt +0 -0
  29. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/__init__.py +0 -0
  30. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/__init__.py +0 -0
  31. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/auth_util.py +0 -0
  32. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/helpers/blacklist_retry.py +0 -0
  33. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/my_cupra_session.py +0 -0
  34. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/openid_session.py +0 -0
  35. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/session_manager.py +0 -0
  36. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/auth/vw_web_session.py +0 -0
  37. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/capability.py +0 -0
  38. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/charging.py +0 -0
  39. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/climatization.py +0 -0
  40. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/src/carconnectivity_connectors/seatcupra/vehicle.py +0 -0
  41. {carconnectivity_connector_seatcupra-0.2a5 → carconnectivity_connector_seatcupra-0.4}/test/integration_test/carConnectivity.json +0 -0
@@ -0,0 +1,54 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [Unreleased]
6
+ - No unreleased changes so far
7
+
8
+ ## [0.4] - 2025-04-17
9
+ ### Fixed
10
+ - Bug in mode attribute that caused the connector to crash
11
+
12
+ ### Changed
13
+ - Updated dependencies
14
+ - stripping of leading and trailing spaces in commands
15
+
16
+ ### Added
17
+ - Precision for all attributes is now used when displaying values
18
+
19
+ ## [0.3] - 2025-04-02
20
+ ### Fixed
21
+ - Problem where the connector reported an error on commands that executed successfully
22
+ - Allowes to have multiple instances of this connector running
23
+
24
+ ### Changed
25
+ - Updated dependencies
26
+
27
+ ## [0.2] - 2025-03-20
28
+ ### Added
29
+ - Support for window heating attributes
30
+ - Support for window heating command
31
+ - Support for changing charging settings
32
+ - Support for adblue range
33
+
34
+ ## [0.1.2] - 2025-03-07
35
+ ### Fixed
36
+ - Fixed bug during refreshing tokens due to connection being reset on server side and client session timing out.
37
+
38
+ ## [0.1.1] - 2025-03-04
39
+ ### Fixed
40
+ - Fixed potential http error when parking position was fetched but due to error not available
41
+
42
+ ### Added
43
+ - Added connection state and vehicle state to the public API
44
+
45
+ ## [0.1] - 2025-03-02
46
+ Initial release, let's go and give this to the public to try out...
47
+
48
+ [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/compare/v0.4...HEAD
49
+ [0.4]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.4
50
+ [0.3]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.3
51
+ [0.2]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.2
52
+ [0.1.2]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1.2
53
+ [0.1.1]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1.1
54
+ [0.1]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-seatcupra
3
- Version: 0.2a5
3
+ Version: 0.4
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.5a4
40
+ Requires-Dist: carconnectivity>=0.7
41
41
  Requires-Dist: oauthlib~=3.2.2
42
42
  Requires-Dist: requests~=2.32.3
43
43
  Requires-Dist: jwt~=1.3.1
@@ -19,7 +19,8 @@ These are the valid options for the Seat Cupra Connector
19
19
  "spin": 1234, //S-Pin used for some special commands like locking/unlocking
20
20
  "netrc": "~/.netr", // netrc file if to be used for passwords
21
21
  "api_log_level": "debug", // Show debug information regarding the API
22
- "max_age": 300 //Cache requests to the server vor MAX_AGE seconds
22
+ "max_age": 300, //Cache requests to the server vor MAX_AGE seconds
23
+ "hide_vins": ["19XFB2F90CE040211", "1G2ZH35N074252067"] // Don't fetch these vins
23
24
  }
24
25
  }
25
26
  ],
@@ -14,7 +14,7 @@ authors = [
14
14
  { name = "Till Steinbach" }
15
15
  ]
16
16
  dependencies = [
17
- "carconnectivity>=0.5a4",
17
+ "carconnectivity>=0.7",
18
18
  "oauthlib~=3.2.2",
19
19
  "requests~=2.32.3",
20
20
  "jwt~=1.3.1"
@@ -0,0 +1,6 @@
1
+ flake8~=7.2.0
2
+ pylint~=3.3.6
3
+ bandit~=1.8.3
4
+
5
+ # For UI only
6
+ Flask~=3.1.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-seatcupra
3
- Version: 0.2a5
3
+ Version: 0.4
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.5a4
40
+ Requires-Dist: carconnectivity>=0.7
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.5a4
1
+ carconnectivity>=0.7
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.2a5'
21
- __version_tuple__ = version_tuple = (0, 2, 'a5')
20
+ __version__ = version = '0.4'
21
+ __version_tuple__ = version_tuple = (0, 4)
@@ -33,14 +33,18 @@ class SpinCommand(GenericCommand):
33
33
  def value(self, new_value: Optional[Union[str, Dict]]) -> None:
34
34
  # Execute early hooks before parsing the value
35
35
  new_value = self._execute_on_set_hook(new_value, early_hook=True)
36
- if isinstance(new_value, str):
36
+ if isinstance(new_value, SpinCommand.Command):
37
+ newvalue_dict = {}
38
+ newvalue_dict['command'] = new_value
39
+ new_value = newvalue_dict
40
+ elif isinstance(new_value, str):
37
41
  parser = ThrowingArgumentParser(prog='', add_help=False, exit_on_error=False)
38
42
  parser.add_argument('command', help='Command to execute', type=SpinCommand.Command,
39
43
  choices=list(SpinCommand.Command))
40
44
  parser.add_argument('--spin', dest='spin', help='Spin to be used instead of spin from config or .netrc', type=str, required=False,
41
45
  default=None)
42
46
  try:
43
- args = parser.parse_args(new_value.split(sep=' '))
47
+ args = parser.parse_args(new_value.strip().split(sep=' '))
44
48
  except argparse.ArgumentError as e:
45
49
  raise SetterError(f'Invalid format for SpinCommand: {e.message} {parser.format_usage()}') from e
46
50
 
@@ -316,7 +316,7 @@ class Connector(BaseConnector):
316
316
  and vehicle.position.position_type.enabled and vehicle.position.position_type.value == Position.PositionType.PARKING:
317
317
  vehicle.state._set_value(GenericVehicle.State.PARKED) # pylint: disable=protected-access
318
318
  else:
319
- vehicle.state._set_value(None) # pylint: disable=protected-access
319
+ vehicle.state._set_value(GenericVehicle.State.UNKNOWN) # pylint: disable=protected-access
320
320
 
321
321
  def fetch_vehicles(self) -> None:
322
322
  """
@@ -336,6 +336,9 @@ class Connector(BaseConnector):
336
336
  if 'vehicles' in data and data['vehicles'] is not None:
337
337
  for vehicle_dict in data['vehicles']:
338
338
  if 'vin' in vehicle_dict and vehicle_dict['vin'] is not None:
339
+ if vehicle_dict['vin'] in self.active_config['hide_vins']:
340
+ LOG.info('Vehicle %s filtered out due to configuration', vehicle_dict['vin'])
341
+ continue
339
342
  vin: str = vehicle_dict['vin']
340
343
  seen_vehicle_vins.add(vin)
341
344
  vehicle: Optional[GenericVehicle] = garage.get_vehicle(vin) # pyright: ignore[reportAssignmentType]
@@ -666,11 +669,13 @@ class Connector(BaseConnector):
666
669
  if 'levelPct' in vehicle_status_data['engines'][drive_id] and vehicle_status_data['engines'][drive_id]['levelPct'] is not None:
667
670
  # pylint: disable-next=protected-access
668
671
  drive.level._set_value(value=vehicle_status_data['engines'][drive_id]['levelPct'])
672
+ drive.level.precision = 1
669
673
  else:
670
674
  drive.level._set_value(None) # pylint: disable=protected-access
671
675
  if 'rangeKm' in vehicle_status_data['engines'][drive_id] and vehicle_status_data['engines'][drive_id]['rangeKm'] is not None:
672
676
  # pylint: disable-next=protected-access
673
677
  drive.range._set_value(value=vehicle_status_data['engines'][drive_id]['rangeKm'], unit=Length.KM)
678
+ drive.range.precision = 1
674
679
  total_range += vehicle_status_data['engines'][drive_id]['rangeKm']
675
680
  else:
676
681
  drive.range._set_value(None, unit=Length.KM) # pylint: disable=protected-access
@@ -678,6 +683,7 @@ class Connector(BaseConnector):
678
683
  'levelPct',
679
684
  'rangeKm'})
680
685
  vehicle.drives.total_range._set_value(total_range, unit=Length.KM) # pylint: disable=protected-access
686
+ vehicle.drives.total_range.precision = 1
681
687
  else:
682
688
  vehicle.drives.enabled = False
683
689
  if len(vehicle.drives.drives) > 0:
@@ -813,7 +819,9 @@ class Connector(BaseConnector):
813
819
  else:
814
820
  longitude = None
815
821
  vehicle.position.latitude._set_value(latitude) # pylint: disable=protected-access
822
+ vehicle.position.latitude.precision = 0.000001
816
823
  vehicle.position.longitude._set_value(longitude) # pylint: disable=protected-access
824
+ vehicle.position.longitude.precision = 0.000001
817
825
  vehicle.position.position_type._set_value(Position.PositionType.PARKING) # pylint: disable=protected-access
818
826
  log_extra_keys(LOG_API, 'parkingposition', data, {'lat', 'lon'})
819
827
  else:
@@ -844,6 +852,7 @@ class Connector(BaseConnector):
844
852
  if data is not None:
845
853
  if 'mileageKm' in data and data['mileageKm'] is not None:
846
854
  vehicle.odometer._set_value(data['mileageKm'], unit=Length.KM) # pylint: disable=protected-access
855
+ vehicle.odometer.precision = 1
847
856
  else:
848
857
  vehicle.odometer._set_value(None) # pylint: disable=protected-access
849
858
  log_extra_keys(LOG_API, f'https://ola.prod.code.seat.cloud.vwgroup.com/v1/vehicles/{vin}/mileage', data, {'mileageKm'})
@@ -866,22 +875,26 @@ class Connector(BaseConnector):
866
875
  if 'rangeName' in range_dict and range_dict['rangeName'] is not None and range_dict['rangeName'] == 'electricRangeKm' \
867
876
  and 'value' in range_dict and range_dict['value'] is not None:
868
877
  drive.range._set_value(range_dict['value'], unit=Length.KM) # pylint: disable=protected-access
878
+ drive.range.precision = 1
869
879
  break
870
880
  elif drive.type.enabled and drive.type.value == GenericDrive.Type.GASOLINE:
871
881
  for range_dict in data['ranges']:
872
882
  if 'rangeName' in range_dict and range_dict['rangeName'] is not None and range_dict['rangeName'] == 'gasolineRangeKm' \
873
883
  and 'value' in range_dict and range_dict['value'] is not None:
874
884
  drive.range._set_value(range_dict['value'], unit=Length.KM) # pylint: disable=protected-access
885
+ drive.range.precision = 1
875
886
  break
876
887
  elif drive.type.enabled and drive.type.value == GenericDrive.Type.DIESEL:
877
888
  for range_dict in data['ranges']:
878
889
  if 'rangeName' in range_dict and range_dict['rangeName'] is not None and range_dict['rangeName'] == 'dieselRangeKm' \
879
890
  and 'value' in range_dict and range_dict['value'] is not None:
880
891
  drive.range._set_value(range_dict['value'], unit=Length.KM) # pylint: disable=protected-access
892
+ drive.range.precision = 1
881
893
  elif 'rangeName' in range_dict and range_dict['rangeName'] is not None and range_dict['rangeName'] == 'adBlueKm' \
882
894
  and 'value' in range_dict and range_dict['value'] is not None:
883
895
  if isinstance(drive, DieselDrive):
884
896
  drive.adblue_range._set_value(range_dict['value'], unit=Length.KM) # pylint: disable=protected-access
897
+ drive.adblue_range.precision = 1
885
898
  log_extra_keys(LOG_API, f'https://ola.prod.code.seat.cloud.vwgroup.com/v1/vehicles/{vin}/ranges', data, {'ranges'})
886
899
  return vehicle
887
900
 
@@ -902,6 +915,7 @@ class Connector(BaseConnector):
902
915
  vehicle.maintenance.inspection_due_at._set_value(None) # pylint: disable=protected-access
903
916
  if 'inspectionDueKm' in data and data['inspectionDueKm'] is not None:
904
917
  vehicle.maintenance.inspection_due_after._set_value(data['inspectionDueKm'], unit=Length.KM) # pylint: disable=protected-access
918
+ vehicle.maintenance.inspection_due_after.precision = 1
905
919
  else:
906
920
  vehicle.maintenance.inspection_due_after._set_value(None) # pylint: disable=protected-access
907
921
  if 'oilServiceDueDays' in data and data['oilServiceDueDays'] is not None:
@@ -914,11 +928,13 @@ class Connector(BaseConnector):
914
928
  vehicle.maintenance.oil_service_due_at._set_value(None) # pylint: disable=protected-access
915
929
  if 'oilServiceDueKm' in data and data['oilServiceDueKm'] is not None:
916
930
  vehicle.maintenance.oil_service_due_after._set_value(data['oilServiceDueKm'], unit=Length.KM) # pylint: disable=protected-access
931
+ vehicle.maintenance.oil_service_due_after.precision = 1
917
932
  else:
918
933
  vehicle.maintenance.oil_service_due_after._set_value(None) # pylint: disable=protected-access
919
934
  log_extra_keys(LOG_API, f'/v1/vehicles/{vin}/maintenance', data, {'inspectionDueDays', 'inspectionDueKm', 'oilServiceDueDays', 'oilServiceDueKm'})
920
935
  else:
921
936
  vehicle.odometer._set_value(None) # pylint: disable=protected-access
937
+ vehicle.odometer.precision = 1
922
938
  return vehicle
923
939
 
924
940
  def fetch_climatisation(self, vehicle: SeatCupraVehicle, no_cache: bool = False) -> SeatCupraVehicle:
@@ -1327,7 +1343,7 @@ class Connector(BaseConnector):
1327
1343
  elif not allow_http_error or (allowed_errors is not None and status_response.status_code not in allowed_errors):
1328
1344
  raise RetrievalError(f'Could not fetch data even after re-authorization. Status Code was: {status_response.status_code}')
1329
1345
  elif not allow_http_error or (allowed_errors is not None and status_response.status_code not in allowed_errors):
1330
- raise RetrievalError(f'Could not fetch data. Status Code was: {status_response.status_code}')
1346
+ raise RetrievalError(f'Could not fetch data for {url}. Status Code was: {status_response.status_code}')
1331
1347
  except requests.exceptions.ConnectionError as connection_error:
1332
1348
  raise RetrievalError(f'Connection error: {connection_error}.'
1333
1349
  ' If this happens frequently, please check if other applications communicate with the Seat/Cupra server.') from connection_error
@@ -1516,7 +1532,7 @@ class Connector(BaseConnector):
1516
1532
 
1517
1533
  try:
1518
1534
  command_response: requests.Response = self.session.post(url, data='{}', allow_redirects=True)
1519
- if command_response.status_code not in (requests.codes['ok'], requests.codes['no_content']):
1535
+ if command_response.status_code not in (requests.codes['ok'], requests.codes['no_content'], requests.codes['created']):
1520
1536
  LOG.error('Could not execute wake command (%s: %s)', command_response.status_code, command_response.text)
1521
1537
  raise CommandError(f'Could not execute wake command ({command_response.status_code}: {command_response.text})')
1522
1538
  except requests.exceptions.ConnectionError as connection_error:
@@ -1565,7 +1581,7 @@ class Connector(BaseConnector):
1565
1581
  url = f'https://ola.prod.code.seat.cloud.vwgroup.com/v1/vehicles/{vin}/honk-and-flash'
1566
1582
  try:
1567
1583
  command_response: requests.Response = self.session.post(url, data=json.dumps(command_dict), allow_redirects=True)
1568
- if command_response.status_code not in (requests.codes['ok'], requests.codes['no_content']):
1584
+ if command_response.status_code not in (requests.codes['ok'], requests.codes['no_content'], requests.codes['created']):
1569
1585
  LOG.error('Could not execute honk or flash command (%s: %s)', command_response.status_code, command_response.text)
1570
1586
  raise CommandError(f'Could not execute honk or flash command ({command_response.status_code}: {command_response.text})')
1571
1587
  except requests.exceptions.ConnectionError as connection_error:
@@ -19,8 +19,8 @@ class ConnectorUI(BaseConnectorUI):
19
19
  A user interface class for the Seat/Cupra connector in the Car Connectivity application.
20
20
  """
21
21
  def __init__(self, connector: BaseConnector):
22
- blueprint: Optional[flask.Blueprint] = flask.Blueprint(name='seatcupra', import_name='carconnectivity-connector-seatcupra', url_prefix='/seatcupra',
23
- template_folder=os.path.dirname(__file__) + '/templates')
22
+ blueprint: Optional[flask.Blueprint] = flask.Blueprint(name=connector.id, import_name='carconnectivity-connector-seatcupra', url_prefix=f'/{connector.id}',
23
+ template_folder=os.path.dirname(__file__) + '/templates')
24
24
  super().__init__(connector, blueprint=blueprint)
25
25
 
26
26
  def get_nav_items(self) -> List[Dict[Literal['text', 'url', 'sublinks', 'divider'], Union[str, List]]]:
@@ -1,25 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to this project will be documented in this file.
4
-
5
- ## [Unreleased]
6
- - No unreleased changes so far
7
-
8
- ## [0.1.2] - 2025-03-07
9
- ### Fixed
10
- - Fixed bug during refreshing tokens due to connection being reset on server side and client session timing out.
11
-
12
- ## [0.1.1] - 2025-03-04
13
- ### Fixed
14
- - Fixed potential http error when parking position was fetched but due to error not available
15
-
16
- ### Added
17
- - Added connection state and vehicle state to the public API
18
-
19
- ## [0.1] - 2025-03-02
20
- Initial release, let's go and give this to the public to try out...
21
-
22
- [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/compare/v0.1.2...HEAD
23
- [0.1.2]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1.2
24
- [0.1.1]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1.1
25
- [0.1]: https://github.com/tillsteinbach/CarConnectivity-connector-seatcupra/releases/tag/v0.1
@@ -1,6 +0,0 @@
1
- flake8~=7.1.2
2
- pylint~=3.3.4
3
- bandit~=1.8.3
4
-
5
- # For UI only
6
- Flask~=3.1.0