22
33from collections .abc import Awaitable , Callable
44from json import dumps
5- from typing import TYPE_CHECKING , Any
5+ from typing import TYPE_CHECKING , Any , cast
66
77import aiohttp
88
2222 from tesla_fleet_api .tesla .energysite import EnergySites
2323 from tesla_fleet_api .tesla .partner import Partner
2424 from tesla_fleet_api .tesla .user import User
25- from tesla_fleet_api .tesla .vehicle .vehicles import Vehicles
2625
2726
2827def _normalize_query_value (value : Any ) -> Any :
@@ -44,7 +43,7 @@ class TeslaFleetApi(Tesla):
4443 energySites : "EnergySites"
4544 user : "User"
4645 partner : "Partner"
47- vehicles : "Vehicles[TeslaFleetApi]"
46+ vehicles : Any
4847
4948 def __init__ (
5049 self ,
@@ -91,10 +90,16 @@ async def find_server(self) -> str:
9190 try :
9291 region_response = await self .user .region ()
9392 response = region_response .get ("response" )
94- if response :
95- self .server = response ["fleet_api_base_url" ]
93+ if isinstance (response , dict ):
94+ fleet_api_base_url = response .get ("fleet_api_base_url" )
95+ region = response .get ("region" )
96+ if not isinstance (fleet_api_base_url , str ) or not isinstance (
97+ region , str
98+ ):
99+ continue
100+ self .server = fleet_api_base_url
96101 LOGGER .debug ("Using server %s" , self .server )
97- return response [ " region" ]
102+ return region
98103 except InvalidRegion :
99104 continue
100105 raise LibraryError ("Could not find a valid Tesla API server." )
@@ -168,8 +173,10 @@ async def _request(
168173 raise ResponseError (status = resp .status , data = await resp .text ())
169174
170175 data = await resp .json ()
176+ if not isinstance (data , dict ):
177+ raise ResponseError (status = resp .status , data = str (data ))
171178 LOGGER .debug ("Response JSON: %s" , data )
172- return data
179+ return cast ( dict [ str , Any ], data )
173180
174181 async def status (self ) -> str :
175182 """This endpoint returns the string "ok" if the API is operating normally. No HTTP headers are required."""
@@ -221,9 +228,14 @@ async def partner_login(
221228 ) as resp :
222229 if resp .ok :
223230 token_data = await resp .json ()
231+ if not isinstance (token_data , dict ):
232+ raise ResponseError (status = resp .status , data = str (token_data ))
233+ access_token = token_data .get ("access_token" )
234+ if not isinstance (access_token , str ):
235+ raise ValueError ("Partner login response did not include access_token" )
224236 # Set the access token for subsequent API calls
225- self ._access_token = token_data [ " access_token" ]
226- return token_data
237+ self ._access_token = access_token
238+ return cast ( dict [ str , Any ], token_data )
227239 else :
228240 error_data = await resp .json ()
229241 raise ValueError (f"Partner login failed: { error_data } " )
0 commit comments