tesla-fleet-api 0.7.1__py3-none-any.whl → 0.7.3__py3-none-any.whl
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.
- tesla_fleet_api/__init__.py +1 -0
- tesla_fleet_api/const.py +1 -1
- tesla_fleet_api/ratecalculator.py +60 -0
- tesla_fleet_api/teslafleetapi.py +2 -1
- {tesla_fleet_api-0.7.1.dist-info → tesla_fleet_api-0.7.3.dist-info}/METADATA +1 -1
- {tesla_fleet_api-0.7.1.dist-info → tesla_fleet_api-0.7.3.dist-info}/RECORD +9 -8
- {tesla_fleet_api-0.7.1.dist-info → tesla_fleet_api-0.7.3.dist-info}/WHEEL +1 -1
- {tesla_fleet_api-0.7.1.dist-info → tesla_fleet_api-0.7.3.dist-info}/LICENSE +0 -0
- {tesla_fleet_api-0.7.1.dist-info → tesla_fleet_api-0.7.3.dist-info}/top_level.txt +0 -0
tesla_fleet_api/__init__.py
CHANGED
tesla_fleet_api/const.py
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
"""Rate Calculator helper"""
|
2
|
+
|
3
|
+
import time
|
4
|
+
|
5
|
+
DAY = 24 * 60 * 60
|
6
|
+
|
7
|
+
|
8
|
+
class RateCalculator:
|
9
|
+
"""Calculate the consumption and remaining rate of a rate limit."""
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
limit: int,
|
14
|
+
period: int = 86400,
|
15
|
+
min_wait: int = 0,
|
16
|
+
max_wait: int | None = None,
|
17
|
+
factor: int = 5,
|
18
|
+
) -> None:
|
19
|
+
"""Initialize the rate calculator."""
|
20
|
+
self.limit: int = limit
|
21
|
+
self.period: int = period
|
22
|
+
self.history: list[int] = []
|
23
|
+
self.start = time.time()
|
24
|
+
self.min_wait = min_wait
|
25
|
+
self.max_wait = max_wait if max_wait is not None else period
|
26
|
+
self.factor = factor
|
27
|
+
|
28
|
+
def constrain(self, value: float) -> float:
|
29
|
+
"""Constrain a value between min and max."""
|
30
|
+
return max(self.min_wait, min(self.max_wait, value))
|
31
|
+
|
32
|
+
def consume(self, timestamp: int | None = None) -> None:
|
33
|
+
"""Consume a unit of the rate limit."""
|
34
|
+
now = timestamp or int(time.time() + 1)
|
35
|
+
self.history.append(now)
|
36
|
+
|
37
|
+
def calculate(self, timestamp: int | None = None) -> float:
|
38
|
+
"""Return the ideal delay to avoid rate limiting."""
|
39
|
+
|
40
|
+
count = len(self.history)
|
41
|
+
if count == 0:
|
42
|
+
return self.min_wait
|
43
|
+
|
44
|
+
now = timestamp or int(time.time())
|
45
|
+
|
46
|
+
while self.history and self.history[0] < now - self.period:
|
47
|
+
self.history.pop(0)
|
48
|
+
|
49
|
+
remaining = self.limit - count
|
50
|
+
|
51
|
+
if remaining <= 0:
|
52
|
+
# The wait until a request is available
|
53
|
+
return self.constrain(self.history[abs(remaining)] + self.period - now)
|
54
|
+
|
55
|
+
return self.constrain(self.period / remaining / self.factor)
|
56
|
+
|
57
|
+
@property
|
58
|
+
def count(self) -> int:
|
59
|
+
"""Return the number of requests in the current period."""
|
60
|
+
return len(self.history)
|
tesla_fleet_api/teslafleetapi.py
CHANGED
@@ -95,7 +95,8 @@ class TeslaFleetApi:
|
|
95
95
|
|
96
96
|
# Call a pre-request hook if provided
|
97
97
|
if self.refresh_hook is not None:
|
98
|
-
await self.refresh_hook()
|
98
|
+
if access_token := await self.refresh_hook():
|
99
|
+
self.access_token = access_token
|
99
100
|
|
100
101
|
LOGGER.debug("Sending request to %s", path)
|
101
102
|
|
@@ -1,11 +1,12 @@
|
|
1
|
-
tesla_fleet_api/__init__.py,sha256
|
1
|
+
tesla_fleet_api/__init__.py,sha256=qGS4Qfp0uHaeK8UXOQVYjZ9rs_iR-CJ6rfCMLswphKA,667
|
2
2
|
tesla_fleet_api/charging.py,sha256=N_mc8axrXj3iduqLj_jCt4Vx86tHqe3xqQT4R1R7HvU,1689
|
3
|
-
tesla_fleet_api/const.py,sha256=
|
3
|
+
tesla_fleet_api/const.py,sha256=U4i4bRs9pZxTtEtOsA7_Azj0uY5bhTRqeNm5VmBrD_Y,9277
|
4
4
|
tesla_fleet_api/energy.py,sha256=yOKNPyXWKMT7Z9a5RqdNksHokLRo657SWjly1bP2_Qs,5827
|
5
5
|
tesla_fleet_api/energyspecific.py,sha256=zggN-q0tf6EH_57bM4EuQ-IdcemKP0o-xv__LArRNnA,4147
|
6
6
|
tesla_fleet_api/exceptions.py,sha256=0-qeJUfyUGUcm2R3_W4OuGImgshY92ApSixl_CRM8ak,11171
|
7
7
|
tesla_fleet_api/partner.py,sha256=1vIBUaxKLIfqcC0X6VXZN0dMAzj_CLNPUMjA6QVqZ1k,1223
|
8
|
-
tesla_fleet_api/
|
8
|
+
tesla_fleet_api/ratecalculator.py,sha256=4lz8yruUeouHXh_3ezsXX-CTpIegp1T1J4VuRV_qdHA,1791
|
9
|
+
tesla_fleet_api/teslafleetapi.py,sha256=EJyfUq5X-rx7ruR6hKlSMLXLERLj2SBxT-YemiCIHcs,5490
|
9
10
|
tesla_fleet_api/teslafleetoauth.py,sha256=OY9yRQuokYo3ts0C8Qb6Z-o9NNAGHbX9F5mHfAh50fo,4121
|
10
11
|
tesla_fleet_api/teslafleetopensource.py,sha256=TJfVPcqJlA1b3kMoGuLr-g5Gn8UDyYsTZhjvGY1MtIk,2007
|
11
12
|
tesla_fleet_api/teslemetry.py,sha256=kcZG7O9tsBt0BoUyCUSU9j9yCbN1qJDL1iUUo4DFESs,2167
|
@@ -13,8 +14,8 @@ tesla_fleet_api/tessie.py,sha256=4dBYxe1G2v9JvJGRbb01wXrAmvWT4jOfV4f_VQE_vkE,230
|
|
13
14
|
tesla_fleet_api/user.py,sha256=TZE2oh-n5zrhKXmGRuiNL9voKVODD7rBhGE_IObYVGA,1179
|
14
15
|
tesla_fleet_api/vehicle.py,sha256=KFFotHSmzaC4MhIlU8hoG7SVvPiV3_FC__uJf8BG_G0,31412
|
15
16
|
tesla_fleet_api/vehiclespecific.py,sha256=Nr4zZzfmIuw3RFYjQEX6c_xtYZgztMsN5ohVn-YEH0I,20600
|
16
|
-
tesla_fleet_api-0.7.
|
17
|
-
tesla_fleet_api-0.7.
|
18
|
-
tesla_fleet_api-0.7.
|
19
|
-
tesla_fleet_api-0.7.
|
20
|
-
tesla_fleet_api-0.7.
|
17
|
+
tesla_fleet_api-0.7.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
18
|
+
tesla_fleet_api-0.7.3.dist-info/METADATA,sha256=KBkJZD7_o6mq96thoH_ghzr6TCAUfSqlhU-1PzGULEo,3821
|
19
|
+
tesla_fleet_api-0.7.3.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
|
20
|
+
tesla_fleet_api-0.7.3.dist-info/top_level.txt,sha256=jeNbog_1saXBFrGpom9WyPWmilxsyP3szL_G7JLWQfM,16
|
21
|
+
tesla_fleet_api-0.7.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|