tesla-fleet-api 0.5.0__tar.gz → 0.5.2__tar.gz

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 (25) hide show
  1. {tesla_fleet_api-0.5.0/tesla_fleet_api.egg-info → tesla_fleet_api-0.5.2}/PKG-INFO +3 -3
  2. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/setup.py +3 -3
  3. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/const.py +8 -9
  4. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/teslafleetapi.py +3 -1
  5. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/teslemetry.py +20 -12
  6. tesla_fleet_api-0.5.2/tesla_fleet_api/tessie.py +75 -0
  7. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/vehicle.py +2 -2
  8. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/vehiclespecific.py +5 -3
  9. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2/tesla_fleet_api.egg-info}/PKG-INFO +3 -3
  10. tesla_fleet_api-0.5.0/tesla_fleet_api/tessie.py +0 -27
  11. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/LICENSE +0 -0
  12. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/README.md +0 -0
  13. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/setup.cfg +0 -0
  14. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/__init__.py +0 -0
  15. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/charging.py +0 -0
  16. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/energy.py +0 -0
  17. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/energyspecific.py +0 -0
  18. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/exceptions.py +0 -0
  19. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/partner.py +0 -0
  20. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/teslafleetoauth.py +0 -0
  21. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api/user.py +0 -0
  22. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api.egg-info/SOURCES.txt +0 -0
  23. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api.egg-info/dependency_links.txt +0 -0
  24. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api.egg-info/requires.txt +0 -0
  25. {tesla_fleet_api-0.5.0 → tesla_fleet_api-0.5.2}/tesla_fleet_api.egg-info/top_level.txt +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tesla_fleet_api
3
- Version: 0.5.0
3
+ Version: 0.5.2
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
7
- Author-email: hello@teslemetry.com
8
- Classifier: Development Status :: 3 - Alpha
7
+ Author-email: admin@teslemetry.com
8
+ Classifier: Development Status :: 4 - Beta
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Operating System :: OS Independent
@@ -5,16 +5,16 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="tesla_fleet_api",
8
- version="0.5.0",
8
+ version="0.5.2",
9
9
  author="Brett Adams",
10
- author_email="hello@teslemetry.com",
10
+ author_email="admin@teslemetry.com",
11
11
  description="Tesla Fleet API library for Python",
12
12
  long_description=long_description,
13
13
  long_description_content_type="text/markdown",
14
14
  url="https://github.com/Teslemetry/tesla_fleet_api",
15
15
  packages=setuptools.find_packages(),
16
16
  classifiers=[
17
- "Development Status :: 3 - Alpha",
17
+ "Development Status :: 4 - Beta",
18
18
  "Programming Language :: Python :: 3",
19
19
  "License :: OSI Approved :: Apache Software License",
20
20
  "Operating System :: OS Independent",
@@ -3,6 +3,14 @@
3
3
  from enum import Enum
4
4
  import logging
5
5
 
6
+ VERSION = "0.5.2"
7
+ LOGGER = logging.getLogger(__package__)
8
+ SERVERS = {
9
+ "na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
10
+ "eu": "https://fleet-api.prd.eu.vn.cloud.tesla.com",
11
+ "cn": "https://fleet-api.prd.cn.vn.cloud.tesla.cn",
12
+ }
13
+
6
14
 
7
15
  class IntEnum(int, Enum):
8
16
  """Integer Enum."""
@@ -20,15 +28,6 @@ class Method(StrEnum):
20
28
  DELETE = "DELETE"
21
29
 
22
30
 
23
- LOGGER = logging.getLogger(__package__)
24
-
25
- SERVERS = {
26
- "na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
27
- "eu": "https://fleet-api.prd.eu.vn.cloud.tesla.com",
28
- "cn": "https://fleet-api.prd.cn.vn.cloud.tesla.cn",
29
- }
30
-
31
-
32
31
  class Trunk(StrEnum):
33
32
  """Trunk options"""
34
33
 
@@ -3,7 +3,7 @@ import aiohttp
3
3
  from json import dumps
4
4
  from .exceptions import raise_for_status, InvalidRegion, LibraryError, InvalidToken
5
5
  from typing import Any
6
- from .const import SERVERS, Method, LOGGER
6
+ from .const import SERVERS, Method, LOGGER, VERSION
7
7
  from .charging import Charging
8
8
  from .energy import Energy
9
9
  from .partner import Partner
@@ -64,6 +64,7 @@ class TeslaFleetApi:
64
64
  response = await (self.user.region()).get("response")
65
65
  if response:
66
66
  self.server = response["fleet_api_base_url"]
67
+ LOGGER.debug("Using server %s", self.server)
67
68
  return response["region"]
68
69
  except InvalidRegion:
69
70
  continue
@@ -100,6 +101,7 @@ class TeslaFleetApi:
100
101
  headers={
101
102
  "Authorization": f"Bearer {self.access_token}",
102
103
  "Content-Type": "application/json",
104
+ "X-Library": f"python tesla_fleet_api ${VERSION}",
103
105
  },
104
106
  json=json,
105
107
  params=params,
@@ -2,7 +2,7 @@ import aiohttp
2
2
  from aiolimiter import AsyncLimiter
3
3
  from typing import Any
4
4
  from .teslafleetapi import TeslaFleetApi
5
- from .const import Method
5
+ from .const import Method, LOGGER
6
6
 
7
7
  # Rate limit should be global, even if multiple instances are created
8
8
  rate_limit = AsyncLimiter(5, 10)
@@ -28,28 +28,36 @@ class Teslemetry(TeslaFleetApi):
28
28
 
29
29
  async def ping(self) -> bool:
30
30
  """Send a ping."""
31
- return await self._request(
32
- Method.GET,
33
- "api/ping",
34
- )
31
+ return (
32
+ await self._request(
33
+ Method.GET,
34
+ "api/ping",
35
+ )
36
+ ).get("response", False)
35
37
 
36
38
  async def test(self) -> bool:
37
39
  """Test API Authentication."""
38
- return await self._request(
39
- Method.GET,
40
- "api/test",
41
- )
40
+ return (
41
+ await self._request(
42
+ Method.GET,
43
+ "api/test",
44
+ )
45
+ ).get("response", False)
42
46
 
43
- async def metadata(self) -> bool:
47
+ async def metadata(self, use_region=True) -> dict[str, Any]:
44
48
  """Test API Authentication."""
45
- return await self._request(
49
+ resp = await self._request(
46
50
  Method.GET,
47
51
  "api/metadata",
48
52
  )
53
+ if use_region and "region" in resp:
54
+ self.region = resp["region"].lower()
55
+ self.server = f"https://{self.region}.teslemetry.com"
56
+ LOGGER.debug("Using server %s", self.server)
49
57
 
50
58
  async def find_server(self):
51
59
  """Find the server URL for the Tesla Fleet API."""
52
- raise NotImplementedError("Do not use this function for Teslemetry.")
60
+ await self.metadata(True)
53
61
 
54
62
  async def _request(
55
63
  self,
@@ -0,0 +1,75 @@
1
+ import aiohttp
2
+ from typing import Any
3
+ from .teslafleetapi import TeslaFleetApi
4
+ from .const import Method
5
+ from .vehiclespecific import VehicleSpecific
6
+
7
+
8
+ class Tessie(TeslaFleetApi):
9
+ def __init__(
10
+ self,
11
+ session: aiohttp.ClientSession,
12
+ access_token: str,
13
+ raise_for_status: bool = True,
14
+ ):
15
+ """Initialize the Tessie API."""
16
+ super().__init__(
17
+ session,
18
+ access_token,
19
+ server="https://api.tessie.com",
20
+ raise_for_status=raise_for_status,
21
+ partner_scope=False,
22
+ user_scope=False,
23
+ energy_scope=False,
24
+ )
25
+
26
+ async def find_server(self):
27
+ """Find the server URL for the Tesla Fleet API."""
28
+ raise NotImplementedError("Do not use this function for Tessie.")
29
+
30
+ async def vehicles(self, only_active: bool = False) -> Any:
31
+ """Get vehicles."""
32
+ return await self._request(
33
+ Method.GET, "vehicles", params={"only_active": only_active}
34
+ )
35
+
36
+ async def state(self, vin: str) -> Any:
37
+ """Get vehicle data."""
38
+ return await self._request(Method.GET, f"{vin}/state")
39
+
40
+ async def battery(self, vin: str) -> Any:
41
+ """Get battery data."""
42
+ return await self._request(Method.GET, f"{vin}/battery")
43
+
44
+ async def battery_health(
45
+ self,
46
+ vin: str,
47
+ start: int | None = None,
48
+ end: int | None = None,
49
+ distance_format: str | None = None,
50
+ ) -> Any:
51
+ """Get battery health data."""
52
+ return await self._request(
53
+ Method.GET,
54
+ f"{vin}/battery_health",
55
+ params={"from": start, "to": end, "distance_format": distance_format},
56
+ )
57
+
58
+ async def all_battery_health(
59
+ self,
60
+ start: int | None = None,
61
+ end: int | None = None,
62
+ distance_format: str | None = None,
63
+ only_active: bool = False,
64
+ ) -> Any:
65
+ """Get battery health data."""
66
+ return await self._request(
67
+ Method.GET,
68
+ "battery_health",
69
+ params={
70
+ "from": start,
71
+ "to": end,
72
+ "distance_format": distance_format,
73
+ "only_active": only_active,
74
+ },
75
+ )
@@ -189,7 +189,7 @@ class Vehicle:
189
189
  )
190
190
 
191
191
  async def navigation_gps_request(
192
- self, vehicle_tag: str | int, lat: float, lon: float, order: int
192
+ self, vehicle_tag: str | int, lat: float, lon: float, order: int | None = None
193
193
  ) -> dict[str, Any]:
194
194
  """Start navigation to given coordinates. Order can be used to specify order of multiple stops."""
195
195
  return await self._request(
@@ -209,7 +209,7 @@ class Vehicle:
209
209
  )
210
210
 
211
211
  async def navigation_sc_request(
212
- self, vehicle_tag: str | int, id: int, order: int
212
+ self, vehicle_tag: str | int, id: int, order: int | None = None
213
213
  ) -> dict[str, Any]:
214
214
  """Sends a location to the in-vehicle navigation system."""
215
215
  return await self._request(
@@ -114,10 +114,10 @@ class VehicleSpecific:
114
114
  return await self._parent.media_volume_down(self.vin)
115
115
 
116
116
  async def navigation_gps_request(
117
- self, lat: float, lon: float, order: int
117
+ self, lat: float, lon: float, order: int | None = None
118
118
  ) -> dict[str, Any]:
119
119
  """Start navigation to given coordinates. Order can be used to specify order of multiple stops."""
120
- self._parent.navigation_gps_request(self.vin, lat, lon, order)
120
+ return await self._parent.navigation_gps_request(self.vin, lat, lon, order)
121
121
 
122
122
  async def navigation_request(
123
123
  self, type: str, locale: str, timestamp_ms: str
@@ -127,7 +127,9 @@ class VehicleSpecific:
127
127
  self.vin, type, locale, timestamp_ms
128
128
  )
129
129
 
130
- async def navigation_sc_request(self, id: int, order: int) -> dict[str, Any]:
130
+ async def navigation_sc_request(
131
+ self, id: int, order: int | None = None
132
+ ) -> dict[str, Any]:
131
133
  """Sends a location to the in-vehicle navigation system."""
132
134
  return await self._parent.navigation_sc_request(self.vin, id, order)
133
135
 
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tesla_fleet_api
3
- Version: 0.5.0
3
+ Version: 0.5.2
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
7
- Author-email: hello@teslemetry.com
8
- Classifier: Development Status :: 3 - Alpha
7
+ Author-email: admin@teslemetry.com
8
+ Classifier: Development Status :: 4 - Beta
9
9
  Classifier: Programming Language :: Python :: 3
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Operating System :: OS Independent
@@ -1,27 +0,0 @@
1
- import aiohttp
2
- from typing import Any
3
- from .teslafleetapi import TeslaFleetApi
4
- from .const import Method
5
-
6
-
7
- class Tessie(TeslaFleetApi):
8
- def __init__(
9
- self,
10
- session: aiohttp.ClientSession,
11
- access_token: str,
12
- raise_for_status: bool = True,
13
- ):
14
- """Initialize the Tessie API."""
15
- super().__init__(
16
- session,
17
- access_token,
18
- server="https://api.tessie.com",
19
- raise_for_status=raise_for_status,
20
- partner_scope=False,
21
- user_scope=False,
22
- energy_scope=False,
23
- )
24
-
25
- async def find_server(self):
26
- """Find the server URL for the Tesla Fleet API."""
27
- raise NotImplementedError("Do not use this function for Teslemetry.")
File without changes