11from typing import TYPE_CHECKING , Tuple
22from datetime import datetime , timedelta
33from threading import Timer
4+ import logging
45
56if TYPE_CHECKING :
67 from weconnect .elements .vehicle import Vehicle
910from weconnect .domain import Domain
1011
1112
13+ LOG = logging .getLogger ("weconnect" )
14+
15+
1216class 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