carconnectivity-plugin-database 0.4.2__tar.gz → 0.4.3__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_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/CHANGELOG.md +6 -1
- {carconnectivity_plugin_database-0.4.2/src/carconnectivity_plugin_database.egg-info → carconnectivity_plugin_database-0.4.3}/PKG-INFO +1 -1
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3/src/carconnectivity_plugin_database.egg-info}/PKG-INFO +1 -1
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/_version.py +3 -3
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/charging_agent.py +27 -15
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/climatization_agent.py +3 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/drive_state_agent.py +17 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/refuel_agent.py +30 -19
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/state_agent.py +11 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/trip_agent.py +14 -9
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/plugin.py +1 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.flake8 +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/dependabot.yml +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/workflows/build.yml +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/workflows/build_and_publish.yml +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.github/workflows/codeql-analysis.yml +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/.gitignore +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/LICENSE +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/Makefile +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/README.md +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/doc/Config.md +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/pyproject.toml +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/setup.cfg +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/setup_requirements.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_database/__init__.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_database/carconnectivity_database_base.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugin_database.egg-info/SOURCES.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugin_database.egg-info/dependency_links.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugin_database.egg-info/entry_points.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugin_database.egg-info/requires.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugin_database.egg-info/top_level.txt +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/__init__.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/agents/base_agent.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/__init__.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/alembic.ini +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/base.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/battery_temperature.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/carconnectivity_schema/README +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/carconnectivity_schema/__init__.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/carconnectivity_schema/env.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/carconnectivity_schema/script.py.mako +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/carconnectivity_schema/versions/__init__.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/charging_power.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/charging_rate.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/charging_session.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/charging_state.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/charging_station.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/climatization_state.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/connection_state.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/datetime_decorator.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/drive.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/drive_consumption.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/drive_level.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/drive_range.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/drive_range_full.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/location.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/migrations.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/outside_temperature.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/refuel_session.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/state.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/tag.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/timedelta_decorator.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/trip.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/model/vehicle.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/ui/database_edit.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/ui/plugin_ui.py +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/ui/templates/database/edit/overview.html +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/ui/templates/database/edit/vehicles.html +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/src/carconnectivity_plugins/database/ui/templates/database/status.html +0 -0
- {carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/test/integration_test/carConnectivity.json +0 -0
{carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/CHANGELOG.md
RENAMED
|
@@ -5,6 +5,10 @@ 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.4.3] - 2026-02-07
|
|
9
|
+
### Fixed
|
|
10
|
+
- Fixes a problem where the start position would not be correctly recorded
|
|
11
|
+
|
|
8
12
|
## [0.4.2] - 2026-01-23
|
|
9
13
|
### Fixed
|
|
10
14
|
- Improved reliability on recording trips and charging sessions
|
|
@@ -34,7 +38,8 @@ All notable changes to this project will be documented in this file.
|
|
|
34
38
|
## [0.1] - 2026-01-04
|
|
35
39
|
Initial release, let's go and give this to the public to try out...
|
|
36
40
|
|
|
37
|
-
[unreleased]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/compare/v0.4.
|
|
41
|
+
[unreleased]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/compare/v0.4.3...HEAD
|
|
42
|
+
[0.4.3]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/releases/tag/v0.4.3
|
|
38
43
|
[0.4.2]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/releases/tag/v0.4.2
|
|
39
44
|
[0.4.1]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/releases/tag/v0.4.1
|
|
40
45
|
[0.4]: https://github.com/tillsteinbach/CarConnectivity-plugin-database/releases/tag/v0.4
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.4.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 4,
|
|
31
|
+
__version__ = version = '0.4.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 4, 3)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g0d9350942'
|
|
@@ -173,6 +173,18 @@ class ChargingAgent(BaseAgent):
|
|
|
173
173
|
self.__on_battery_temperature_change(electric_drive.battery.temperature, Observable.ObserverEvent.UPDATED)
|
|
174
174
|
self.session_factory.remove()
|
|
175
175
|
|
|
176
|
+
def __del__(self) -> None:
|
|
177
|
+
self.carconnectivity_vehicle.charging.connector.connection_state.remove_observer(self.__on_connector_state_change)
|
|
178
|
+
self.carconnectivity_vehicle.charging.connector.lock_state.remove_observer(self.__on_connector_lock_state_change)
|
|
179
|
+
self.carconnectivity_vehicle.charging.state.remove_observer(self.__on_charging_state_change)
|
|
180
|
+
self.carconnectivity_vehicle.charging.rate.remove_observer(self.__on_charging_rate_change)
|
|
181
|
+
self.carconnectivity_vehicle.charging.power.remove_observer(self.__on_charging_power_change)
|
|
182
|
+
self.carconnectivity_vehicle.charging.type.remove_observer(self._on_charging_type_change)
|
|
183
|
+
electric_drive: Optional[ElectricDrive] = self.carconnectivity_vehicle.get_electric_drive()
|
|
184
|
+
if electric_drive is not None:
|
|
185
|
+
electric_drive.level.remove_observer(self._on_battery_level_change)
|
|
186
|
+
electric_drive.battery.temperature.remove_observer(self.__on_battery_temperature_change)
|
|
187
|
+
|
|
176
188
|
# pylint: disable=too-many-branches, too-many-statements
|
|
177
189
|
def __on_charging_state_change(self, element: EnumAttribute[Charging.ChargingState], flags: Observable.ObserverEvent) -> None:
|
|
178
190
|
del flags
|
|
@@ -628,21 +640,21 @@ class ChargingAgent(BaseAgent):
|
|
|
628
640
|
self.database_plugin.healthy._set_value(value=False) # pylint: disable=protected-access
|
|
629
641
|
else:
|
|
630
642
|
LOG.info("Starting new charging session for vehicle %s due to connector locked state on startup", self.vehicle.vin)
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
643
|
+
new_session: ChargingSession = ChargingSession(vin=self.vehicle.vin, plug_locked_date=element.last_changed)
|
|
644
|
+
try:
|
|
645
|
+
session.add(new_session)
|
|
646
|
+
self._update_session_odometer(session, new_session)
|
|
647
|
+
self._update_session_position(session, new_session)
|
|
648
|
+
session.commit()
|
|
649
|
+
LOG.debug('Added new charging session for vehicle %s to database', self.vehicle.vin)
|
|
650
|
+
self.last_charging_session = new_session
|
|
651
|
+
except IntegrityError as err:
|
|
652
|
+
session.rollback()
|
|
653
|
+
LOG.error('IntegrityError while adding charging session for vehicle %s to database: %s', self.vehicle.vin, err)
|
|
654
|
+
except DatabaseError as err:
|
|
655
|
+
session.rollback()
|
|
656
|
+
LOG.error('DatabaseError while adding charging session for vehicle %s to database: %s', self.vehicle.vin, err)
|
|
657
|
+
self.database_plugin.healthy._set_value(value=False) # pylint: disable=protected-access
|
|
646
658
|
elif self.last_charging_session is not None and not self.last_charging_session.was_locked():
|
|
647
659
|
try:
|
|
648
660
|
self.last_charging_session.plug_locked_date = element.last_changed
|
|
@@ -76,6 +76,9 @@ class ClimatizationAgent(BaseAgent):
|
|
|
76
76
|
self.__on_state_change(self.carconnectivity_vehicle.climatization.state, Observable.ObserverEvent.UPDATED)
|
|
77
77
|
self.session_factory.remove()
|
|
78
78
|
|
|
79
|
+
def __del__(self) -> None:
|
|
80
|
+
self.carconnectivity_vehicle.climatization.state.remove_observer(self.__on_state_change)
|
|
81
|
+
|
|
79
82
|
def __on_state_change(self, element: EnumAttribute[Climatization.ClimatizationState], flags: Observable.ObserverEvent) -> None:
|
|
80
83
|
del flags
|
|
81
84
|
if element.enabled:
|
|
@@ -155,6 +155,23 @@ class DriveStateAgent(BaseAgent):
|
|
|
155
155
|
self.__on_range_estimated_full_change(self.carconnectivity_drive.range_estimated_full, Observable.ObserverEvent.UPDATED)
|
|
156
156
|
session_factory.remove()
|
|
157
157
|
|
|
158
|
+
def __del__(self) -> None:
|
|
159
|
+
self.carconnectivity_drive.type.remove_observer(self.__on_type_change)
|
|
160
|
+
self.carconnectivity_drive.range_wltp.remove_observer(self.__on_range_wltp_change)
|
|
161
|
+
|
|
162
|
+
if isinstance(self.carconnectivity_drive, ElectricDrive):
|
|
163
|
+
self.carconnectivity_drive.battery.total_capacity.remove_observer(self.__on_electric_total_capacity_change)
|
|
164
|
+
self.carconnectivity_drive.battery.available_capacity.remove_observer(self.__on_electric_available_capacity_change)
|
|
165
|
+
self.carconnectivity_drive.consumption.remove_observer(self.__on_electric_consumption_change)
|
|
166
|
+
|
|
167
|
+
elif isinstance(self.carconnectivity_drive, CombustionDrive):
|
|
168
|
+
self.carconnectivity_drive.fuel_tank.available_capacity.remove_observer(self.__on_fuel_available_capacity_change)
|
|
169
|
+
self.carconnectivity_drive.consumption.remove_observer(self.__on_fuel_consumption_change)
|
|
170
|
+
|
|
171
|
+
self.carconnectivity_drive.level.remove_observer(self.__on_level_change)
|
|
172
|
+
self.carconnectivity_drive.range.remove_observer(self.__on_range_change)
|
|
173
|
+
self.carconnectivity_drive.range_estimated_full.remove_observer(self.__on_range_estimated_full_change)
|
|
174
|
+
|
|
158
175
|
def __on_level_change(self, element: LevelAttribute, flags: Observable.ObserverEvent) -> None:
|
|
159
176
|
del flags
|
|
160
177
|
if element.enabled:
|
|
@@ -81,6 +81,10 @@ class RefuelAgent(BaseAgent):
|
|
|
81
81
|
|
|
82
82
|
self.carconnectivity_vehicle.position.longitude.add_observer(self.__on_longitude_change, Observable.ObserverEvent.UPDATED)
|
|
83
83
|
|
|
84
|
+
def __del__(self) -> None:
|
|
85
|
+
self.carconnectivity_drive.level.remove_observer(self.__on_level_change)
|
|
86
|
+
self.carconnectivity_vehicle.position.longitude.remove_observer(self.__on_longitude_change)
|
|
87
|
+
|
|
84
88
|
def __on_level_change(self, element: LevelAttribute, flags: Observable.ObserverEvent) -> None:
|
|
85
89
|
del flags
|
|
86
90
|
if element.enabled and element.value is not None:
|
|
@@ -141,22 +145,29 @@ class RefuelAgent(BaseAgent):
|
|
|
141
145
|
self.database_plugin.healthy._set_value(value=False) # pylint: disable=protected-access
|
|
142
146
|
if refuel_session.location is None and self.carconnectivity_vehicle.position.enabled \
|
|
143
147
|
and refuel_session.session_position_latitude is not None and refuel_session.session_position_longitude is not None:
|
|
144
|
-
|
|
145
|
-
if
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
148
|
+
location_services: Optional[list[BaseService]] = self.database_plugin.car_connectivity.get_services_for(ServiceType.LOCATION_GAS_STATION)
|
|
149
|
+
if location_services is None or len(location_services) == 0:
|
|
150
|
+
LOG.debug('No LocationService available to resolve location from position for refuel session')
|
|
151
|
+
return
|
|
152
|
+
location_result: Optional[CarConnectivityLocation] = None
|
|
153
|
+
for location_service in location_services:
|
|
154
|
+
if location_service is not None and isinstance(location_service, LocationService):
|
|
155
|
+
location_result = location_service.gas_station_from_lat_lon(
|
|
156
|
+
latitude=refuel_session.session_position_latitude,
|
|
157
|
+
longitude=refuel_session.session_position_longitude,
|
|
158
|
+
radius=150,
|
|
159
|
+
location=None)
|
|
160
|
+
if location_result is not None:
|
|
161
|
+
break
|
|
162
|
+
if location_result is not None:
|
|
163
|
+
LOG.debug('Resolved location from position (%s, %s)', refuel_session.session_position_latitude,
|
|
164
|
+
refuel_session.session_position_longitude)
|
|
165
|
+
location: Location = Location.from_carconnectivity_location(location=location_result)
|
|
166
|
+
try:
|
|
167
|
+
location = session.merge(location)
|
|
168
|
+
refuel_session.location = location
|
|
169
|
+
except DatabaseError as err:
|
|
170
|
+
session.rollback()
|
|
171
|
+
LOG.error('DatabaseError while merging location for refuel session of vehicle %s in database: %s',
|
|
172
|
+
self.carconnectivity_vehicle.vin.value, err)
|
|
173
|
+
self.database_plugin.healthy._set_value(value=False) # pylint: disable=protected-access
|
|
@@ -89,6 +89,17 @@ class StateAgent(BaseAgent):
|
|
|
89
89
|
on_transaction_end=True)
|
|
90
90
|
self.session_factory.remove()
|
|
91
91
|
|
|
92
|
+
def __del__(self) -> None:
|
|
93
|
+
self.carconnectivity_vehicle.state.remove_observer(self.__on_state_change)
|
|
94
|
+
self.carconnectivity_vehicle.connection_state.remove_observer(self.__on_connection_state_change)
|
|
95
|
+
self.carconnectivity_vehicle.outside_temperature.remove_observer(self.__on_outside_temperature_change)
|
|
96
|
+
self.carconnectivity_vehicle.name.remove_observer(self.__on_name_change)
|
|
97
|
+
self.carconnectivity_vehicle.manufacturer.remove_observer(self.__on_manufacturer_change)
|
|
98
|
+
self.carconnectivity_vehicle.model.remove_observer(self.__on_model_change)
|
|
99
|
+
self.carconnectivity_vehicle.model_year.remove_observer(self.__on_model_year_change)
|
|
100
|
+
self.carconnectivity_vehicle.type.remove_observer(self.__on_type_change)
|
|
101
|
+
self.carconnectivity_vehicle.license_plate.remove_observer(self.__on_license_plate_change)
|
|
102
|
+
|
|
92
103
|
def __on_state_change(self, element: EnumAttribute[GenericVehicle.State], flags: Observable.ObserverEvent) -> None:
|
|
93
104
|
del flags
|
|
94
105
|
if element.enabled:
|
|
@@ -14,6 +14,7 @@ from sqlalchemy.orm.exc import ObjectDeletedError
|
|
|
14
14
|
from carconnectivity.observable import Observable
|
|
15
15
|
from carconnectivity.vehicle import GenericVehicle
|
|
16
16
|
from carconnectivity.utils.timeout_lock import TimeoutLock
|
|
17
|
+
from carconnectivity.location import Location as CarConnectivityLocation
|
|
17
18
|
|
|
18
19
|
from carconnectivity_plugins.database.agents.base_agent import BaseAgent
|
|
19
20
|
from carconnectivity_plugins.database.model.trip import Trip
|
|
@@ -95,6 +96,12 @@ class TripAgent(BaseAgent):
|
|
|
95
96
|
on_transaction_end=True)
|
|
96
97
|
self._on_position_location_change(self.carconnectivity_vehicle.position.location.uid, Observable.ObserverEvent.UPDATED)
|
|
97
98
|
|
|
99
|
+
def __del__(self) -> None:
|
|
100
|
+
self.carconnectivity_vehicle.state.remove_observer(self.__on_state_change)
|
|
101
|
+
self.carconnectivity_vehicle.position.latitude.remove_observer(self._on_position_latitude_change)
|
|
102
|
+
self.carconnectivity_vehicle.position.longitude.remove_observer(self._on_position_longitude_change)
|
|
103
|
+
self.carconnectivity_vehicle.position.location.uid.remove_observer(self._on_position_location_change)
|
|
104
|
+
|
|
98
105
|
# pylint: disable-next=too-many-branches,too-many-statements
|
|
99
106
|
def __on_state_change(self, element: EnumAttribute[GenericVehicle.State], flags: Observable.ObserverEvent) -> None:
|
|
100
107
|
del flags
|
|
@@ -131,7 +138,7 @@ class TripAgent(BaseAgent):
|
|
|
131
138
|
self.carconnectivity_vehicle.odometer.value is not None:
|
|
132
139
|
new_trip.start_odometer = self.carconnectivity_vehicle.odometer.in_locale(locale=self.database_plugin.locale)[0]
|
|
133
140
|
if not self._update_trip_position(session=session, trip=new_trip, start=True):
|
|
134
|
-
# if now no position is available try the last known position
|
|
141
|
+
# if now no position is available try the last known position
|
|
135
142
|
if self.last_parked_position_latitude is not None and self.last_parked_position_longitude is not None:
|
|
136
143
|
self._update_trip_position(session=session, trip=new_trip, start=True,
|
|
137
144
|
latitude=self.last_parked_position_latitude,
|
|
@@ -188,11 +195,9 @@ class TripAgent(BaseAgent):
|
|
|
188
195
|
del flags
|
|
189
196
|
if element.enabled and element.value is not None:
|
|
190
197
|
location_object: GenericObject = element.parent
|
|
191
|
-
if isinstance(location_object,
|
|
198
|
+
if isinstance(location_object, CarConnectivityLocation):
|
|
192
199
|
self.last_parked_location = Location.from_carconnectivity_location(location=location_object)
|
|
193
|
-
|
|
194
|
-
else:
|
|
195
|
-
self.last_parked_location = None
|
|
200
|
+
self._on_location_change()
|
|
196
201
|
|
|
197
202
|
def _on_position_change(self) -> None:
|
|
198
203
|
# Check if there is a finished trip that lacks destination position. We allow 5min after destination_date to set the position.
|
|
@@ -240,7 +245,7 @@ class TripAgent(BaseAgent):
|
|
|
240
245
|
if self.trip is not None and self.trip.destination_date is not None and self.trip.destination_location is None \
|
|
241
246
|
and self.last_parked_position_time is not None \
|
|
242
247
|
and self.last_parked_position_time < (self.trip.destination_date + timedelta(minutes=5)):
|
|
243
|
-
location: Location =
|
|
248
|
+
location: Location = self.last_parked_location
|
|
244
249
|
try:
|
|
245
250
|
location = session.merge(location)
|
|
246
251
|
self.trip.destination_location = location
|
|
@@ -256,7 +261,7 @@ class TripAgent(BaseAgent):
|
|
|
256
261
|
latitude: Optional[float] = None, longitude: Optional[float] = None, location: Optional[Location] = None) -> bool:
|
|
257
262
|
if self.carconnectivity_vehicle is None:
|
|
258
263
|
raise ValueError("Vehicle's carconnectivity_vehicle attribute is None")
|
|
259
|
-
if latitude or longitude is None:
|
|
264
|
+
if latitude is None or longitude is None:
|
|
260
265
|
if self.carconnectivity_vehicle.position.enabled and self.carconnectivity_vehicle.position.latitude.enabled \
|
|
261
266
|
and self.carconnectivity_vehicle.position.longitude.enabled \
|
|
262
267
|
and self.carconnectivity_vehicle.position.latitude.value is not None \
|
|
@@ -267,8 +272,8 @@ class TripAgent(BaseAgent):
|
|
|
267
272
|
if start:
|
|
268
273
|
if trip.start_position_latitude is None and trip.start_position_longitude is None:
|
|
269
274
|
try:
|
|
270
|
-
trip.start_position_latitude =
|
|
271
|
-
trip.start_position_longitude =
|
|
275
|
+
trip.start_position_latitude = latitude
|
|
276
|
+
trip.start_position_longitude = longitude
|
|
272
277
|
session.commit()
|
|
273
278
|
except DatabaseError as err:
|
|
274
279
|
session.rollback()
|
|
@@ -148,6 +148,7 @@ class Plugin(BasePlugin): # pylint: disable=too-many-instance-attributes
|
|
|
148
148
|
self.scoped_session_factory.remove()
|
|
149
149
|
|
|
150
150
|
def shutdown(self) -> None:
|
|
151
|
+
self.car_connectivity.garage.remove_observer(self.__on_add_vehicle)
|
|
151
152
|
self._stop_event.set()
|
|
152
153
|
if self._background_thread is not None:
|
|
153
154
|
self._background_thread.join()
|
|
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
|
{carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/doc/Config.md
RENAMED
|
File without changes
|
{carconnectivity_plugin_database-0.4.2 → carconnectivity_plugin_database-0.4.3}/pyproject.toml
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
|
|
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
|
|
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
|