tesla-fleet-api 0.7.0__tar.gz → 0.7.2__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {tesla_fleet_api-0.7.0/tesla_fleet_api.egg-info → tesla_fleet_api-0.7.2}/PKG-INFO +1 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/setup.py +1 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/__init__.py +1 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/const.py +1 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/exceptions.py +6 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/teslafleetapi.py +17 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2/tesla_fleet_api.egg-info}/PKG-INFO +1 -1
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/LICENSE +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/README.md +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/setup.cfg +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/charging.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/energy.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/energyspecific.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/partner.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/teslafleetoauth.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/teslafleetopensource.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/teslemetry.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/tessie.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/user.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/vehicle.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api/vehiclespecific.py +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api.egg-info/SOURCES.txt +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api.egg-info/dependency_links.txt +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api.egg-info/requires.txt +0 -0
- {tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api.egg-info/top_level.txt +0 -0
@@ -363,7 +363,12 @@ async def raise_for_status(resp: aiohttp.ClientResponse) -> None:
|
|
363
363
|
elif resp.status == 424:
|
364
364
|
raise InvalidResponse(data)
|
365
365
|
elif resp.status == 429:
|
366
|
-
raise RateLimited(
|
366
|
+
raise RateLimited(
|
367
|
+
{
|
368
|
+
"reset": resp.headers.get("RateLimit-Reset"),
|
369
|
+
"after": resp.headers.get("Retry-After"),
|
370
|
+
}
|
371
|
+
)
|
367
372
|
elif resp.status == 451:
|
368
373
|
raise ResourceUnavailableForLegalReasons(data)
|
369
374
|
elif resp.status == 499:
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""Tesla Fleet API for Python."""
|
2
2
|
|
3
3
|
from json import dumps
|
4
|
-
from typing import Any
|
4
|
+
from typing import Any, Awaitable
|
5
5
|
import aiohttp
|
6
6
|
|
7
7
|
from .exceptions import raise_for_status, InvalidRegion, LibraryError, ResponseError
|
@@ -22,6 +22,7 @@ class TeslaFleetApi:
|
|
22
22
|
server: str | None = None
|
23
23
|
session: aiohttp.ClientSession
|
24
24
|
headers: dict[str, str]
|
25
|
+
refresh_hook: Awaitable | None
|
25
26
|
|
26
27
|
def __init__(
|
27
28
|
self,
|
@@ -34,11 +35,13 @@ class TeslaFleetApi:
|
|
34
35
|
partner_scope: bool = True,
|
35
36
|
user_scope: bool = True,
|
36
37
|
vehicle_scope: bool = True,
|
38
|
+
refresh_hook: Awaitable | None = None,
|
37
39
|
):
|
38
40
|
"""Initialize the Tesla Fleet API."""
|
39
41
|
|
40
42
|
self.session = session
|
41
43
|
self.access_token = access_token
|
44
|
+
self.refresh_hook = refresh_hook
|
42
45
|
|
43
46
|
if server is not None:
|
44
47
|
self.server = server
|
@@ -90,6 +93,11 @@ class TeslaFleetApi:
|
|
90
93
|
if method == Method.GET and json is not None:
|
91
94
|
raise ValueError("GET requests cannot have a body.")
|
92
95
|
|
96
|
+
# Call a pre-request hook if provided
|
97
|
+
if self.refresh_hook is not None:
|
98
|
+
if access_token := await self.refresh_hook():
|
99
|
+
self.access_token = access_token
|
100
|
+
|
93
101
|
LOGGER.debug("Sending request to %s", path)
|
94
102
|
|
95
103
|
# Remove None values from params and json
|
@@ -114,8 +122,16 @@ class TeslaFleetApi:
|
|
114
122
|
LOGGER.debug("Response Status: %s", resp.status)
|
115
123
|
if "x-txid" in resp.headers:
|
116
124
|
LOGGER.debug("Response TXID: %s", resp.headers["x-txid"])
|
125
|
+
if "RateLimit-Reset" in resp.headers:
|
126
|
+
LOGGER.debug(
|
127
|
+
"Rate limit reset: %s", resp.headers.get("RateLimit-Reset")
|
128
|
+
)
|
129
|
+
if "Retry-After" in resp.headers:
|
130
|
+
LOGGER.debug("Retry after: %s", resp.headers.get("Retry-After"))
|
131
|
+
|
117
132
|
if not resp.ok:
|
118
133
|
await raise_for_status(resp)
|
134
|
+
|
119
135
|
if not resp.content_type.lower().startswith("application/json"):
|
120
136
|
LOGGER.debug("Response type is: %s", resp.content_type)
|
121
137
|
raise ResponseError(status=resp.status, data=await resp.text())
|
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
|
{tesla_fleet_api-0.7.0 → tesla_fleet_api-0.7.2}/tesla_fleet_api.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|