tesla-fleet-api 0.9.9__py3-none-any.whl → 1.0.0__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.
Files changed (49) hide show
  1. tesla_fleet_api/__init__.py +7 -22
  2. tesla_fleet_api/const.py +1 -225
  3. tesla_fleet_api/exceptions.py +117 -0
  4. tesla_fleet_api/tesla/__init__.py +11 -0
  5. tesla_fleet_api/tesla/bluetooth.py +33 -0
  6. tesla_fleet_api/{charging.py → tesla/charging.py} +1 -1
  7. tesla_fleet_api/{energy.py → tesla/energysite.py} +41 -33
  8. tesla_fleet_api/{teslafleetapi.py → tesla/fleet.py} +8 -53
  9. tesla_fleet_api/{teslafleetoauth.py → tesla/oauth.py} +3 -4
  10. tesla_fleet_api/{partner.py → tesla/partner.py} +1 -1
  11. tesla_fleet_api/tesla/tesla.py +52 -0
  12. tesla_fleet_api/{user.py → tesla/user.py} +1 -1
  13. tesla_fleet_api/teslemetry/__init__.py +5 -0
  14. tesla_fleet_api/{teslemetry.py → teslemetry/teslemetry.py} +16 -25
  15. tesla_fleet_api/teslemetry/vehicle.py +73 -0
  16. tesla_fleet_api/tessie/__init__.py +5 -0
  17. tesla_fleet_api/{tessie.py → tessie/tessie.py} +17 -9
  18. tesla_fleet_api/tessie/vehicle.py +41 -0
  19. {tesla_fleet_api-0.9.9.dist-info → tesla_fleet_api-1.0.0.dist-info}/METADATA +3 -2
  20. tesla_fleet_api-1.0.0.dist-info/RECORD +24 -0
  21. tesla_fleet_api/energyspecific.py +0 -125
  22. tesla_fleet_api/pb2/__init__.py +0 -0
  23. tesla_fleet_api/pb2/__init__.pyi +0 -9
  24. tesla_fleet_api/pb2/car_server_pb2.py +0 -175
  25. tesla_fleet_api/pb2/car_server_pb2.pyi +0 -904
  26. tesla_fleet_api/pb2/common_pb2.py +0 -33
  27. tesla_fleet_api/pb2/common_pb2.pyi +0 -130
  28. tesla_fleet_api/pb2/errors_pb2.py +0 -17
  29. tesla_fleet_api/pb2/errors_pb2.pyi +0 -32
  30. tesla_fleet_api/pb2/keys_pb2.py +0 -15
  31. tesla_fleet_api/pb2/keys_pb2.pyi +0 -21
  32. tesla_fleet_api/pb2/managed_charging_pb2.py +0 -15
  33. tesla_fleet_api/pb2/managed_charging_pb2.pyi +0 -17
  34. tesla_fleet_api/pb2/signatures_pb2.py +0 -35
  35. tesla_fleet_api/pb2/signatures_pb2.pyi +0 -152
  36. tesla_fleet_api/pb2/universal_message_pb2.py +0 -30
  37. tesla_fleet_api/pb2/universal_message_pb2.pyi +0 -148
  38. tesla_fleet_api/pb2/vcsec_pb2.py +0 -79
  39. tesla_fleet_api/pb2/vcsec_pb2.pyi +0 -482
  40. tesla_fleet_api/pb2/vehicle_pb2.py +0 -125
  41. tesla_fleet_api/pb2/vehicle_pb2.pyi +0 -1183
  42. tesla_fleet_api/teslafleetopensource.py +0 -61
  43. tesla_fleet_api/vehicle.py +0 -878
  44. tesla_fleet_api/vehiclesigned.py +0 -1127
  45. tesla_fleet_api/vehiclespecific.py +0 -505
  46. tesla_fleet_api-0.9.9.dist-info/RECORD +0 -42
  47. {tesla_fleet_api-0.9.9.dist-info → tesla_fleet_api-1.0.0.dist-info}/LICENSE +0 -0
  48. {tesla_fleet_api-0.9.9.dist-info → tesla_fleet_api-1.0.0.dist-info}/WHEEL +0 -0
  49. {tesla_fleet_api-0.9.9.dist-info → tesla_fleet_api-1.0.0.dist-info}/top_level.txt +0 -0
@@ -1,61 +0,0 @@
1
- import aiohttp
2
- import time
3
- import secrets
4
- import hashlib
5
- import base64
6
-
7
- from .teslafleetoauth import TeslaFleetOAuth
8
- from .const import Scope, SERVERS
9
-
10
-
11
- class TeslaFleetOpenSource(TeslaFleetOAuth):
12
- """Tesla Fleet Open Source OAuth API."""
13
-
14
- code_verifier: str
15
- code_challenge: str
16
-
17
- def __init__(
18
- self,
19
- session: aiohttp.ClientSession,
20
- client_id: str,
21
- redirect_uri: str,
22
- ):
23
- self.code_verifier = secrets.token_urlsafe(32)
24
-
25
- # Hash the code_verifier using SHA-256
26
- hashed_verifier = hashlib.sha256(self.code_verifier.encode()).digest()
27
- # Encode the hash using URL-safe Base64 encoding, without padding
28
- self.code_challenge = (
29
- base64.urlsafe_b64encode(hashed_verifier).decode().replace("=", "")
30
- )
31
-
32
- super().__init__(session, client_id, redirect_uri=redirect_uri)
33
-
34
- def get_login_url(self, scopes: list[Scope], state: str = "login") -> str:
35
- """Get the login URL without a client secret."""
36
-
37
- return (
38
- super().get_login_url(scopes, state)
39
- + f"&code_challenge={self.code_challenge}"
40
- )
41
-
42
- async def get_refresh_token(self, code: str) -> None:
43
- """Get the refresh token."""
44
- async with self.session.post(
45
- "https://auth.tesla.com/oauth2/v3/token",
46
- data={
47
- "grant_type": "authorization_code",
48
- "client_id": self.client_id,
49
- "code": code,
50
- "audience": self.server,
51
- "redirect_uri": self.redirect_uri,
52
- "code_verifier": self.code_verifier,
53
- },
54
- ) as resp:
55
- if resp.ok:
56
- data = await resp.json()
57
- self.refresh_token = data["refresh_token"]
58
- self.access_token = data["access_token"]
59
- self.expires = int(time.time()) + data["expires_in"]
60
- region = code.split("_")[0].lower()
61
- self.server = SERVERS.get(region)