carconnectivity-connector-seatcupra 0.1a4__tar.gz → 0.1a6__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.
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/PKG-INFO +2 -2
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/pyproject.toml +1 -1
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connector_seatcupra.egg-info/PKG-INFO +2 -2
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connector_seatcupra.egg-info/requires.txt +1 -1
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/_version.py +1 -1
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/connector.py +75 -7
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/vehicle.py +1 -1
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.flake8 +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/dependabot.yml +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/workflows/build.yml +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/workflows/build_and_publish.yml +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.github/workflows/codeql-analysis.yml +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.gitignore +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/CHANGELOG.md +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/LICENSE +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/Makefile +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/README.md +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/doc/Config.md +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/setup.cfg +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/setup_requirements.txt +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connector_seatcupra.egg-info/SOURCES.txt +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connector_seatcupra.egg-info/dependency_links.txt +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connector_seatcupra.egg-info/top_level.txt +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/__init__.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/__init__.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/auth_util.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/helpers/blacklist_retry.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/my_cupra_session.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/openid_session.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/session_manager.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/auth/vw_web_session.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/capability.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/charging.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/climatization.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/command_impl.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/src/carconnectivity_connectors/seatcupra/ui/connector_ui.py +0 -0
- {carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/test/integration_test/carConnectivity.json +0 -0
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: carconnectivity-connector-seatcupra
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.1a6
|
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.
|
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,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: carconnectivity-connector-seatcupra
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.1a6
|
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.
|
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
|
@@ -259,6 +259,8 @@ class Connector(BaseConnector):
|
|
259
259
|
vehicle_to_update = self.fetch_charging(vehicle_to_update)
|
260
260
|
if vehicle_to_update.capabilities.has_capability('parkingPosition'):
|
261
261
|
vehicle_to_update = self.fetch_parking_position(vehicle_to_update)
|
262
|
+
if vehicle_to_update.capabilities.has_capability('vehicleHealthInspection'):
|
263
|
+
vehicle_to_update = self.fetch_maintenance(vehicle_to_update)
|
262
264
|
|
263
265
|
def fetch_vehicles(self) -> None:
|
264
266
|
"""
|
@@ -737,6 +739,42 @@ class Connector(BaseConnector):
|
|
737
739
|
vehicle.odometer._set_value(None) # pylint: disable=protected-access
|
738
740
|
return vehicle
|
739
741
|
|
742
|
+
def fetch_maintenance(self, vehicle: SeatCupraVehicle, no_cache: bool = False) -> SeatCupraVehicle:
|
743
|
+
vin = vehicle.vin.value
|
744
|
+
if vin is None:
|
745
|
+
raise APIError('VIN is missing')
|
746
|
+
url = f'https://ola.prod.code.seat.cloud.vwgroup.com/v1/vehicles/{vin}/maintenance'
|
747
|
+
data: Dict[str, Any] | None = self._fetch_data(url=url, session=self.session, no_cache=no_cache)
|
748
|
+
if data is not None:
|
749
|
+
if 'inspectionDueDays' in data and data['inspectionDueDays'] is not None:
|
750
|
+
inspection_due: timedelta = timedelta(days=data['inspectionDueDays'])
|
751
|
+
inspection_date: datetime = datetime.now(tz=timezone.utc) + inspection_due
|
752
|
+
inspection_date = inspection_date.replace(hour=0, minute=0, second=0, microsecond=0)
|
753
|
+
# pylint: disable-next=protected-access
|
754
|
+
vehicle.maintenance.inspection_due_at._set_value(value=inspection_date)
|
755
|
+
else:
|
756
|
+
vehicle.maintenance.inspection_due_at._set_value(None) # pylint: disable=protected-access
|
757
|
+
if 'inspectionDueKm' in data and data['inspectionDueKm'] is not None:
|
758
|
+
vehicle.maintenance.inspection_due_after._set_value(data['inspectionDueKm'], unit=Length.KM) # pylint: disable=protected-access
|
759
|
+
else:
|
760
|
+
vehicle.maintenance.inspection_due_after._set_value(None) # pylint: disable=protected-access
|
761
|
+
if 'oilServiceDueDays' in data and data['oilServiceDueDays'] is not None:
|
762
|
+
oil_service_due: timedelta = timedelta(days=data['oilServiceDueDays'])
|
763
|
+
oil_service_date: datetime = datetime.now(tz=timezone.utc) + oil_service_due
|
764
|
+
oil_service_date = oil_service_date.replace(hour=0, minute=0, second=0, microsecond=0)
|
765
|
+
# pylint: disable-next=protected-access
|
766
|
+
vehicle.maintenance.oil_service_due_at._set_value(value=oil_service_date)
|
767
|
+
else:
|
768
|
+
vehicle.maintenance.oil_service_due_at._set_value(None) # pylint: disable=protected-access
|
769
|
+
if 'oilServiceDueKm' in data and data['oilServiceDueKm'] is not None:
|
770
|
+
vehicle.maintenance.oil_service_due_after._set_value(data['oilServiceDueKm'], unit=Length.KM) # pylint: disable=protected-access
|
771
|
+
else:
|
772
|
+
vehicle.maintenance.oil_service_due_after._set_value(None) # pylint: disable=protected-access
|
773
|
+
log_extra_keys(LOG_API, f'/v1/vehicles/{vin}/maintenance', data, {'inspectionDueDays', 'inspectionDueKm', 'oilServiceDueDays', 'oilServiceDueKm'})
|
774
|
+
else:
|
775
|
+
vehicle.odometer._set_value(None) # pylint: disable=protected-access
|
776
|
+
return vehicle
|
777
|
+
|
740
778
|
def fetch_climatisation(self, vehicle: SeatCupraVehicle, no_cache: bool = False) -> SeatCupraVehicle:
|
741
779
|
"""
|
742
780
|
Fetches the mileage of the given vehicle and updates its mileage attributes.
|
@@ -1050,9 +1088,19 @@ class Connector(BaseConnector):
|
|
1050
1088
|
raise CommandError('VIN in object hierarchy missing')
|
1051
1089
|
if 'command' not in command_arguments:
|
1052
1090
|
raise CommandError('Command argument missing')
|
1091
|
+
command_dict: Dict = {}
|
1053
1092
|
if command_arguments['command'] == ChargingStartStopCommand.Command.START:
|
1054
1093
|
url = f'https://ola.prod.code.seat.cloud.vwgroup.com/vehicles/{vin}/charging/requests/start'
|
1055
|
-
|
1094
|
+
if isinstance(vehicle, SeatCupraElectricVehicle) and vehicle.charging is not None and vehicle.charging.settings is not None \
|
1095
|
+
and vehicle.charging.settings.maximum_current is not None and vehicle.charging.settings.maximum_current.enabled \
|
1096
|
+
and vehicle.charging.settings.maximum_current.value is not None:
|
1097
|
+
if vehicle.charging.settings.maximum_current.value <= 6:
|
1098
|
+
command_dict['maxChargeCurrentAC'] = 'reduced'
|
1099
|
+
else:
|
1100
|
+
command_dict['maxChargeCurrentAC'] = 'maximum'
|
1101
|
+
else:
|
1102
|
+
command_dict['maxChargeCurrentAC'] = 'maximum'
|
1103
|
+
command_response: requests.Response = self.session.post(url, json=command_dict, allow_redirects=True)
|
1056
1104
|
elif command_arguments['command'] == ChargingStartStopCommand.Command.STOP:
|
1057
1105
|
url = f'https://ola.prod.code.seat.cloud.vwgroup.com/vehicles/{vin}/charging/requests/stop'
|
1058
1106
|
command_response: requests.Response = self.session.post(url, data='{}', allow_redirects=True)
|
@@ -1078,15 +1126,35 @@ class Connector(BaseConnector):
|
|
1078
1126
|
if 'command' not in command_arguments:
|
1079
1127
|
raise CommandError('Command argument missing')
|
1080
1128
|
command_dict = {}
|
1081
|
-
command_str: Optional[str] = None
|
1082
1129
|
if command_arguments['command'] == ClimatizationStartStopCommand.Command.START:
|
1083
|
-
|
1130
|
+
url = f'https://ola.prod.code.seat.cloud.vwgroup.com/v2/vehicles/{vin}/climatisation/start'
|
1131
|
+
if vehicle.climatization.settings is None:
|
1132
|
+
raise CommandError('Could not control climatisation, there are no climatisation settings for the vehicle available.')
|
1133
|
+
if 'target_temperature' in command_arguments:
|
1134
|
+
# Round target temperature to nearest 0.5
|
1135
|
+
command_dict['targetTemperature'] = round(command_arguments['target_temperature'] * 2) / 2
|
1136
|
+
elif vehicle.climatization.settings.target_temperature is not None and vehicle.climatization.settings.target_temperature.enabled \
|
1137
|
+
and vehicle.climatization.settings.target_temperature.value is not None:
|
1138
|
+
temperature_value = vehicle.climatization.settings.target_temperature.value
|
1139
|
+
if vehicle.climatization.settings.target_temperature.unit == Temperature.C:
|
1140
|
+
command_dict['targetTemperatureUnit'] = 'celsius'
|
1141
|
+
elif vehicle.climatization.settings.target_temperature.unit == Temperature.F:
|
1142
|
+
command_dict['targetTemperatureUnit'] = 'farenheit'
|
1143
|
+
else:
|
1144
|
+
command_dict['targetTemperatureUnit'] = 'celsius'
|
1145
|
+
if temperature_value is not None:
|
1146
|
+
command_dict['targetTemperature'] = round(temperature_value * 2) / 2
|
1147
|
+
if 'target_temperature_unit' in command_arguments:
|
1148
|
+
if command_arguments['target_temperature_unit'] == Temperature.C:
|
1149
|
+
command_dict['targetTemperatureUnit'] = 'celsius'
|
1150
|
+
elif command_arguments['target_temperature_unit'] == Temperature.F:
|
1151
|
+
command_dict['targetTemperatureUnit'] = 'farenheit'
|
1152
|
+
else:
|
1153
|
+
command_dict['targetTemperatureUnit'] = 'celsius'
|
1084
1154
|
elif command_arguments['command'] == ClimatizationStartStopCommand.Command.STOP:
|
1085
|
-
|
1155
|
+
url: str = f'https://ola.prod.code.seat.cloud.vwgroup.com/vehicles/{vin}/climatisation/requests/stop'
|
1086
1156
|
else:
|
1087
1157
|
raise CommandError(f'Unknown command {command_arguments["command"]}')
|
1088
|
-
|
1089
|
-
url: str = f'https://ola.prod.code.seat.cloud.vwgroup.com/vehicles/{vin}/climatisation/requests/{command_str}'
|
1090
1158
|
command_response: requests.Response = self.session.post(url, data=json.dumps(command_dict), allow_redirects=True)
|
1091
1159
|
if command_response.status_code not in [requests.codes['ok'], requests.codes['created']]:
|
1092
1160
|
LOG.error('Could not start/stop air conditioning (%s: %s)', command_response.status_code, command_response.text)
|
@@ -1104,7 +1172,7 @@ class Connector(BaseConnector):
|
|
1104
1172
|
if self.active_config['spin'] is None:
|
1105
1173
|
raise CommandError('S-PIN is missing, please add S-PIN to your configuration or .netrc file')
|
1106
1174
|
if 'spin' in command_arguments:
|
1107
|
-
command_dict['
|
1175
|
+
command_dict['spin'] = command_arguments['spin']
|
1108
1176
|
else:
|
1109
1177
|
if self.active_config['spin'] is None or self.active_config['spin'] == '':
|
1110
1178
|
raise CommandError('S-PIN is missing, please add S-PIN to your configuration or .netrc file')
|
@@ -41,7 +41,7 @@ class SeatCupraVehicle(GenericVehicle): # pylint: disable=too-many-instance-att
|
|
41
41
|
self._car_images = origin._car_images
|
42
42
|
else:
|
43
43
|
super().__init__(vin=vin, garage=garage, managing_connector=managing_connector)
|
44
|
-
self.climatization = SeatCupraClimatization(origin=self.climatization)
|
44
|
+
self.climatization = SeatCupraClimatization(vehicle=self, origin=self.climatization)
|
45
45
|
self.capabilities: Capabilities = Capabilities(vehicle=self)
|
46
46
|
if SUPPORT_IMAGES:
|
47
47
|
self._car_images: Dict[str, Image.Image] = {}
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.flake8
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/.gitignore
RENAMED
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/CHANGELOG.md
RENAMED
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/LICENSE
RENAMED
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/Makefile
RENAMED
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/README.md
RENAMED
File without changes
|
File without changes
|
{carconnectivity_connector_seatcupra-0.1a4 → carconnectivity_connector_seatcupra-0.1a6}/setup.cfg
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|