tesla-fleet-api 0.7.0__py3-none-any.whl → 0.7.1__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/const.py CHANGED
@@ -3,7 +3,7 @@
3
3
  from enum import Enum
4
4
  import logging
5
5
 
6
- VERSION = "0.7.0"
6
+ VERSION = "0.7.1"
7
7
  LOGGER = logging.getLogger(__package__)
8
8
  SERVERS = {
9
9
  "na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
@@ -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(data)
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,10 @@ 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
+ await self.refresh_hook()
99
+
93
100
  LOGGER.debug("Sending request to %s", path)
94
101
 
95
102
  # Remove None values from params and json
@@ -114,8 +121,16 @@ class TeslaFleetApi:
114
121
  LOGGER.debug("Response Status: %s", resp.status)
115
122
  if "x-txid" in resp.headers:
116
123
  LOGGER.debug("Response TXID: %s", resp.headers["x-txid"])
124
+ if "RateLimit-Reset" in resp.headers:
125
+ LOGGER.debug(
126
+ "Rate limit reset: %s", resp.headers.get("RateLimit-Reset")
127
+ )
128
+ if "Retry-After" in resp.headers:
129
+ LOGGER.debug("Retry after: %s", resp.headers.get("Retry-After"))
130
+
117
131
  if not resp.ok:
118
132
  await raise_for_status(resp)
133
+
119
134
  if not resp.content_type.lower().startswith("application/json"):
120
135
  LOGGER.debug("Response type is: %s", resp.content_type)
121
136
  raise ResponseError(status=resp.status, data=await resp.text())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tesla_fleet_api
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: Tesla Fleet API library for Python
5
5
  Home-page: https://github.com/Teslemetry/tesla_fleet_api
6
6
  Author: Brett Adams
@@ -1,11 +1,11 @@
1
1
  tesla_fleet_api/__init__.py,sha256=-OhrvoMVLeo13dDCjsltCacLxPqe2UODvSgHFdjyteA,639
2
2
  tesla_fleet_api/charging.py,sha256=N_mc8axrXj3iduqLj_jCt4Vx86tHqe3xqQT4R1R7HvU,1689
3
- tesla_fleet_api/const.py,sha256=oHOrKlioHra7rwxN0vNjw-ogFxmwuluUduYbX2aEbM8,9277
3
+ tesla_fleet_api/const.py,sha256=fMx1jUvELzTRrgoTN_OlN-eiQX0ets8E5pIQ8K8mPVQ,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
- tesla_fleet_api/exceptions.py,sha256=BcvJyjY4qM2-Rf7ZMA94xPIN6ebKit89E7qattMmbr8,11018
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/teslafleetapi.py,sha256=S-7TH47aTuCi1LV4fLCxtvcCxuA0vyGC04XYBKHYG_4,4853
8
+ tesla_fleet_api/teslafleetapi.py,sha256=725WSE3eeHwTvVY0pXqEiZNP4M5n2Op0c3q5cJIkPeY,5421
9
9
  tesla_fleet_api/teslafleetoauth.py,sha256=OY9yRQuokYo3ts0C8Qb6Z-o9NNAGHbX9F5mHfAh50fo,4121
10
10
  tesla_fleet_api/teslafleetopensource.py,sha256=TJfVPcqJlA1b3kMoGuLr-g5Gn8UDyYsTZhjvGY1MtIk,2007
11
11
  tesla_fleet_api/teslemetry.py,sha256=kcZG7O9tsBt0BoUyCUSU9j9yCbN1qJDL1iUUo4DFESs,2167
@@ -13,8 +13,8 @@ tesla_fleet_api/tessie.py,sha256=4dBYxe1G2v9JvJGRbb01wXrAmvWT4jOfV4f_VQE_vkE,230
13
13
  tesla_fleet_api/user.py,sha256=TZE2oh-n5zrhKXmGRuiNL9voKVODD7rBhGE_IObYVGA,1179
14
14
  tesla_fleet_api/vehicle.py,sha256=KFFotHSmzaC4MhIlU8hoG7SVvPiV3_FC__uJf8BG_G0,31412
15
15
  tesla_fleet_api/vehiclespecific.py,sha256=Nr4zZzfmIuw3RFYjQEX6c_xtYZgztMsN5ohVn-YEH0I,20600
16
- tesla_fleet_api-0.7.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
- tesla_fleet_api-0.7.0.dist-info/METADATA,sha256=xJ4Byt3bVHwF_50-6-_WmqP9Z3OkTtiGKwS46UHltog,3821
18
- tesla_fleet_api-0.7.0.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
19
- tesla_fleet_api-0.7.0.dist-info/top_level.txt,sha256=jeNbog_1saXBFrGpom9WyPWmilxsyP3szL_G7JLWQfM,16
20
- tesla_fleet_api-0.7.0.dist-info/RECORD,,
16
+ tesla_fleet_api-0.7.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
17
+ tesla_fleet_api-0.7.1.dist-info/METADATA,sha256=nazwokUo30zFvNPt79tKCs9Kx0nbrEf3LR0Htv_9QNA,3821
18
+ tesla_fleet_api-0.7.1.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
19
+ tesla_fleet_api-0.7.1.dist-info/top_level.txt,sha256=jeNbog_1saXBFrGpom9WyPWmilxsyP3szL_G7JLWQfM,16
20
+ tesla_fleet_api-0.7.1.dist-info/RECORD,,