carconnectivity-connector-skoda 0.5a2__tar.gz → 0.7__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 (42) hide show
  1. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/CHANGELOG.md +29 -1
  2. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/PKG-INFO +4 -3
  3. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/doc/Config.md +2 -1
  4. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/pyproject.toml +1 -1
  5. carconnectivity_connector_skoda-0.7/setup_requirements.txt +6 -0
  6. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connector_skoda.egg-info/PKG-INFO +4 -3
  7. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connector_skoda.egg-info/requires.txt +1 -1
  8. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/_version.py +2 -2
  9. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/command_impl.py +6 -2
  10. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/connector.py +20 -4
  11. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/mqtt_client.py +1 -1
  12. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/ui/connector_ui.py +2 -2
  13. carconnectivity_connector_skoda-0.5a2/setup_requirements.txt +0 -6
  14. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.flake8 +0 -0
  15. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/dependabot.yml +0 -0
  18. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/workflows/build.yml +0 -0
  19. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/workflows/build_and_publish.yml +0 -0
  20. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.github/workflows/codeql-analysis.yml +0 -0
  21. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/.gitignore +0 -0
  22. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/LICENSE +0 -0
  23. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/Makefile +0 -0
  24. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/README.md +0 -0
  25. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/setup.cfg +0 -0
  26. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connector_skoda.egg-info/SOURCES.txt +0 -0
  27. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connector_skoda.egg-info/dependency_links.txt +0 -0
  28. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connector_skoda.egg-info/top_level.txt +0 -0
  29. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/__init__.py +0 -0
  30. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/__init__.py +0 -0
  31. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/auth_util.py +0 -0
  32. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/helpers/blacklist_retry.py +0 -0
  33. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/my_skoda_session.py +0 -0
  34. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/openid_session.py +0 -0
  35. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/session_manager.py +0 -0
  36. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/auth/skoda_web_session.py +0 -0
  37. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/capability.py +0 -0
  38. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/charging.py +0 -0
  39. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/climatization.py +0 -0
  40. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/error.py +0 -0
  41. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/src/carconnectivity_connectors/skoda/vehicle.py +0 -0
  42. {carconnectivity_connector_skoda-0.5a2 → carconnectivity_connector_skoda-0.7}/test/integration_test/carConnectivity.json +0 -0
@@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
5
5
  ## [Unreleased]
6
6
  - No unreleased changes so far
7
7
 
8
+ ## [0.7] - 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.6] - 2025-04-02
20
+ ### Fixed
21
+ - Only fetch range when measurement capability is available (fix for older cars)
22
+ - Allowes to have multiple instances of this connector running
23
+
24
+ ### Changed
25
+ - Updated dependencies
26
+
27
+ ## [0.5] - 2025-03-20
28
+ ### Added
29
+ - Support for window heating attributes
30
+ - Support for window heating command
31
+ - SUpport for changing charging settings
32
+
8
33
  ## [0.4.1] - 2025-03-04
9
34
  ### Fixed
10
35
  - Fixed potential http error when parking position was fetched but due to error not available
@@ -37,7 +62,10 @@ All notable changes to this project will be documented in this file.
37
62
  Initial release, let's go and give this to the public to try out...
38
63
  The API is not yet implemented completely but most functions already work
39
64
 
40
- [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/compare/v0.4.1...HEAD
65
+ [unreleased]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/compare/v0.7...HEAD
66
+ [0.7]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.7
67
+ [0.6]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.6
68
+ [0.5]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.5
41
69
  [0.4.1]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.4.1
42
70
  [0.4]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.4
43
71
  [0.3]: https://github.com/tillsteinbach/CarConnectivity-connector-skoda/releases/tag/v0.3
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.5a2
3
+ Version: 0.7
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -37,11 +37,12 @@ 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.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
44
44
  Requires-Dist: paho-mqtt~=2.1.0
45
+ Dynamic: license-file
45
46
 
46
47
 
47
48
 
@@ -19,7 +19,8 @@ These are the valid options for the MySkoda 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
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: carconnectivity-connector-skoda
3
- Version: 0.5a2
3
+ Version: 0.7
4
4
  Summary: CarConnectivity connector for Skoda services
5
5
  Author: Till Steinbach
6
6
  License: MIT License
@@ -37,11 +37,12 @@ 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.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
44
44
  Requires-Dist: paho-mqtt~=2.1.0
45
+ Dynamic: license-file
45
46
 
46
47
 
47
48
 
@@ -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.5a2'
21
- __version_tuple__ = version_tuple = (0, 5)
20
+ __version__ = version = '0.7'
21
+ __version_tuple__ = version_tuple = (0, 7)
@@ -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
 
@@ -328,6 +328,9 @@ class Connector(BaseConnector):
328
328
  if 'vehicles' in data and data['vehicles'] is not None:
329
329
  for vehicle_dict in data['vehicles']:
330
330
  if 'vin' in vehicle_dict and vehicle_dict['vin'] is not None:
331
+ if vehicle_dict['vin'] in self.active_config['hide_vins']:
332
+ LOG.info('Vehicle %s filtered out due to configuration', vehicle_dict['vin'])
333
+ continue
331
334
  seen_vehicle_vins.add(vehicle_dict['vin'])
332
335
  vehicle: Optional[SkodaVehicle] = garage.get_vehicle(vehicle_dict['vin']) # pyright: ignore[reportAssignmentType]
333
336
  if not vehicle:
@@ -374,8 +377,9 @@ class Connector(BaseConnector):
374
377
  vehicle_to_update: Optional[GenericVehicle] = garage.get_vehicle(vin)
375
378
  if vehicle_to_update is not None and isinstance(vehicle_to_update, SkodaVehicle) and vehicle_to_update.is_managed_by_connector(self):
376
379
  vehicle_to_update = self.fetch_vehicle_status(vehicle_to_update)
377
- vehicle_to_update = self.fetch_driving_range(vehicle_to_update)
378
380
  if vehicle_to_update.capabilities is not None and vehicle_to_update.capabilities.enabled:
381
+ if vehicle_to_update.capabilities.has_capability('MEASUREMENTS', check_status_ok=True):
382
+ vehicle_to_update = self.fetch_driving_range(vehicle_to_update)
379
383
  if vehicle_to_update.capabilities.has_capability('READINESS', check_status_ok=True):
380
384
  vehicle_to_update = self.fetch_connection_status(vehicle_to_update)
381
385
  if vehicle_to_update.capabilities.has_capability('PARKING_POSITION', check_status_ok=True):
@@ -400,13 +404,16 @@ class Connector(BaseConnector):
400
404
  SkodaVehicle: The Skoda vehicle object with the updated state.
401
405
  """
402
406
  if vehicle is not None:
403
- if vehicle.in_motion is not None and vehicle.in_motion.enabled and vehicle.in_motion.value:
407
+ if vehicle.connection_state is not None and vehicle.connection_state.enabled \
408
+ and vehicle.connection_state.value == GenericVehicle.ConnectionState.OFFLINE:
409
+ vehicle.state._set_value(GenericVehicle.State.OFFLINE)
410
+ elif vehicle.in_motion is not None and vehicle.in_motion.enabled and vehicle.in_motion.value:
404
411
  vehicle.state._set_value(GenericVehicle.State.IGNITION_ON) # pylint: disable=protected-access
405
412
  elif vehicle.position is not None and vehicle.position.enabled and vehicle.position.position_type is not None \
406
413
  and vehicle.position.position_type.enabled and vehicle.position.position_type.value == Position.PositionType.PARKING:
407
414
  vehicle.state._set_value(GenericVehicle.State.PARKED) # pylint: disable=protected-access
408
415
  else:
409
- vehicle.state._set_value(None) # pylint: disable=protected-access
416
+ vehicle.state._set_value(GenericVehicle.State.UNKNOWN) # pylint: disable=protected-access
410
417
  return vehicle
411
418
 
412
419
  def fetch_charging(self, vehicle: SkodaElectricVehicle, no_cache: bool = False) -> SkodaElectricVehicle:
@@ -494,10 +501,12 @@ class Connector(BaseConnector):
494
501
  cruising_range_in_km: float = data['status']['battery']['remainingCruisingRangeInMeters'] / 1000
495
502
  # pylint: disable-next=protected-access
496
503
  drive.range._set_value(value=cruising_range_in_km, measured=captured_at, unit=Length.KM)
504
+ drive.range.precision = 1
497
505
  if 'stateOfChargeInPercent' in data['status']['battery'] \
498
506
  and data['status']['battery']['stateOfChargeInPercent'] is not None:
499
507
  # pylint: disable-next=protected-access
500
508
  drive.level._set_value(value=data['status']['battery']['stateOfChargeInPercent'], measured=captured_at)
509
+ drive.level.precision = 1
501
510
  log_extra_keys(LOG_API, 'status', data['status']['battery'], {'remainingCruisingRangeInMeters',
502
511
  'stateOfChargeInPercent'})
503
512
  break
@@ -699,7 +708,9 @@ class Connector(BaseConnector):
699
708
  else:
700
709
  longitude = None
701
710
  vehicle.position.latitude._set_value(latitude) # pylint: disable=protected-access
711
+ vehicle.position.latitude.precision = 0.000001
702
712
  vehicle.position.longitude._set_value(longitude) # pylint: disable=protected-access
713
+ vehicle.position.longitude.precision = 0.000001
703
714
  vehicle.position.position_type._set_value(Position.PositionType.PARKING) # pylint: disable=protected-access
704
715
  else:
705
716
  vehicle.position.latitude._set_value(None) # pylint: disable=protected-access
@@ -752,6 +763,7 @@ class Connector(BaseConnector):
752
763
  raise APIError('Could not fetch maintenance, capturedAt missing')
753
764
  if 'mileageInKm' in data and data['mileageInKm'] is not None:
754
765
  vehicle.odometer._set_value(value=data['mileageInKm'], measured=captured_at, unit=Length.KM) # pylint: disable=protected-access
766
+ vehicle.odometer.precision = 1
755
767
  else:
756
768
  vehicle.odometer._set_value(None) # pylint: disable=protected-access
757
769
  if 'inspectionDueInDays' in data and data['inspectionDueInDays'] is not None:
@@ -1270,6 +1282,7 @@ class Connector(BaseConnector):
1270
1282
  if 'totalRangeInKm' in range_data and range_data['totalRangeInKm'] is not None:
1271
1283
  # pylint: disable-next=protected-access
1272
1284
  vehicle.drives.total_range._set_value(value=range_data['totalRangeInKm'], measured=captured_at, unit=Length.KM)
1285
+ vehicle.drives.total_range.precision = 1
1273
1286
  else:
1274
1287
  vehicle.drives.total_range._set_value(None, measured=captured_at, unit=Length.KM) # pylint: disable=protected-access
1275
1288
 
@@ -1302,15 +1315,18 @@ class Connector(BaseConnector):
1302
1315
  and range_data[f'{drive_id}EngineRange']['currentSoCInPercent'] is not None:
1303
1316
  # pylint: disable-next=protected-access
1304
1317
  drive.level._set_value(value=range_data[f'{drive_id}EngineRange']['currentSoCInPercent'], measured=captured_at)
1318
+ drive.level.precision = 1
1305
1319
  elif 'currentFuelLevelInPercent' in range_data[f'{drive_id}EngineRange'] \
1306
1320
  and range_data[f'{drive_id}EngineRange']['currentFuelLevelInPercent'] is not None:
1307
1321
  # pylint: disable-next=protected-access
1308
1322
  drive.level._set_value(value=range_data[f'{drive_id}EngineRange']['currentFuelLevelInPercent'], measured=captured_at)
1323
+ drive.level.precision = 1
1309
1324
  else:
1310
1325
  drive.level._set_value(None, measured=captured_at) # pylint: disable=protected-access
1311
1326
  if 'remainingRangeInKm' in range_data[f'{drive_id}EngineRange'] and range_data[f'{drive_id}EngineRange']['remainingRangeInKm'] is not None:
1312
1327
  # pylint: disable-next=protected-access
1313
1328
  drive.range._set_value(value=range_data[f'{drive_id}EngineRange']['remainingRangeInKm'], measured=captured_at, unit=Length.KM)
1329
+ drive.range.precision = 1
1314
1330
  else:
1315
1331
  drive.range._set_value(None, measured=captured_at, unit=Length.KM) # pylint: disable=protected-access
1316
1332
 
@@ -1464,7 +1480,7 @@ class Connector(BaseConnector):
1464
1480
  elif not allow_http_error or (allowed_errors is not None and status_response.status_code not in allowed_errors):
1465
1481
  raise RetrievalError(f'Could not fetch data even after re-authorization. Status Code was: {status_response.status_code}')
1466
1482
  elif not allow_http_error or (allowed_errors is not None and status_response.status_code not in allowed_errors):
1467
- raise RetrievalError(f'Could not fetch data. Status Code was: {status_response.status_code}')
1483
+ raise RetrievalError(f'Could not fetch data for {url}. Status Code was: {status_response.status_code}')
1468
1484
  except requests.exceptions.ConnectionError as connection_error:
1469
1485
  raise RetrievalError(f'Connection error: {connection_error}.'
1470
1486
  ' If this happens frequently, please check if other applications communicate with the Skoda server.') from connection_error
@@ -480,7 +480,7 @@ class SkodaMQTTClient(Client): # pylint: disable=too-many-instance-attributes
480
480
  old_charging_state: Optional[Charging.ChargingState] = charging_state
481
481
  if 'mode' in data['data'] and data['data']['mode'] is not None \
482
482
  and vehicle.charging is not None and isinstance(vehicle.charging.settings, SkodaCharging.Settings):
483
- if data['data']['mode'] in SkodaCharging.SkodaChargeMode:
483
+ if data['data']['mode'] in [item.value for item in SkodaCharging.SkodaChargeMode]:
484
484
  skoda_charging_mode = SkodaCharging.SkodaChargeMode(data['data']['mode'])
485
485
  else:
486
486
  LOG_API.info('Unkown charging mode %s not in %s', data['data']['mode'], str(SkodaCharging.SkodaChargeMode))
@@ -19,8 +19,8 @@ class ConnectorUI(BaseConnectorUI):
19
19
  A user interface class for the Skoda connector in the Car Connectivity application.
20
20
  """
21
21
  def __init__(self, connector: BaseConnector):
22
- blueprint: Optional[flask.Blueprint] = flask.Blueprint(name='skoda', import_name='carconnectivity-connector-skoda', url_prefix='/skoda',
23
- template_folder=os.path.dirname(__file__) + '/templates')
22
+ blueprint: Optional[flask.Blueprint] = flask.Blueprint(name=connector.id, import_name='carconnectivity-connector-skoda', 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,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