Skip to content

Commit 26d0ec9

Browse files
committed
fix request tracker
1 parent 6282ab5 commit 26d0ec9

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

weconnect/elements/generic_status.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ def update(self, fromDict: Dict[str, Any], ignoreAttributes: Optional[List[str]]
9494
if 'requestId' in request:
9595
for knownRequest in self.requests:
9696
if knownRequest.requestId.enabled and knownRequest.requestId.value == request['requestId']:
97-
request.update(fromDict=request)
97+
knownRequest.update(fromDict=request)
9898
updated = True
9999
elif 'operation' in request:
100100
for knownRequest in self.requests:
101101
if knownRequest.operation.enabled and knownRequest.operation.value.value == request['operation']:
102-
request.update(fromDict=request)
102+
knownRequest.update(fromDict=request)
103103
updated = True
104104

105105
if not updated:
@@ -145,7 +145,6 @@ def __init__(
145145

146146
def update(self, fromDict: Dict[str, Any]) -> None: # noqa: C901
147147
LOG.debug('Update Status Target from dict')
148-
149148
self.status.fromDict(fromDict, 'status')
150149
self.operation.fromDict(fromDict, 'operation')
151150
self.body.fromDict(fromDict, 'body')

weconnect/elements/helpers/request_tracker.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import TYPE_CHECKING, Tuple
22
from datetime import datetime, timedelta
33
from threading import Timer
4+
import logging
45

56
if TYPE_CHECKING:
67
from weconnect.elements.vehicle import Vehicle
@@ -9,6 +10,9 @@
910
from weconnect.domain import Domain
1011

1112

13+
LOG = logging.getLogger("weconnect")
14+
15+
1216
class RequestTracker:
1317
def __init__(self, vehicle: 'Vehicle') -> None:
1418
self.vehicle: 'Vehicle' = vehicle
@@ -23,6 +27,7 @@ def clear(self) -> None:
2327
def trackRequest(self, id: str, domain: Domain, minTime: int, maxTime: int) -> None:
2428
minDate = datetime.now() + timedelta(seconds=minTime)
2529
maxDate = datetime.now() + timedelta(seconds=maxTime)
30+
LOG.debug('Track requests for id %s in %s at lesat until %s, at most until %s every 5 seconds', id, domain.value, minDate, maxDate)
2631
if domain not in self.requests:
2732
self.requests[domain] = [(id, minDate, maxDate)]
2833
else:
@@ -34,6 +39,7 @@ def trackRequest(self, id: str, domain: Domain, minTime: int, maxTime: int) -> N
3439
self.__timer.start()
3540

3641
def update(self) -> None: # noqa: C901
42+
LOG.debug('request tracking update status for %d domains', len(self.requests))
3743
self.vehicle.updateStatus(force=True, selective=self.requests)
3844
openRequests = []
3945
for domain, statuses in self.vehicle.domains.items():
@@ -47,17 +53,20 @@ def update(self) -> None: # noqa: C901
4753

4854
if maxDate < datetime.now():
4955
requests.remove(request)
56+
LOG.debug('request tracking for id %s timed out', id)
5057
else:
5158
for openRequest in openRequests:
5259
if openRequest.requestId.value == id:
5360
if openRequest.status.value not in (GenericStatus.Request.Status.IN_PROGRESS,
5461
GenericStatus.Request.Status.QUEUED,
5562
GenericStatus.Request.Status.DELAYED):
5663
requests.remove(request)
64+
LOG.debug('request tracking for id %s finished with status %s', id, openRequest.status.value)
5765
request = (id, datetime.now(), maxDate)
5866
if not requests:
5967
self.requests.pop(domain)
6068

61-
self.__timer = Timer(5, self.update)
62-
self.__timer.daemon = True
63-
self.__timer.start()
69+
if self.requests: # Restart timer if there are still requests left
70+
self.__timer = Timer(5, self.update)
71+
self.__timer.daemon = True
72+
self.__timer.start()

0 commit comments

Comments
 (0)