tesla-fleet-api 1.0.13__py3-none-any.whl → 1.0.15__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/__init__.py +5 -0
- tesla_fleet_api/const.py +0 -1
- tesla_fleet_api/tesla/__init__.py +4 -2
- tesla_fleet_api/tesla/fleet.py +2 -2
- tesla_fleet_api/tesla/vehicle/__init__.py +2 -0
- tesla_fleet_api/teslemetry/__init__.py +2 -1
- tesla_fleet_api/teslemetry/teslemetry.py +5 -7
- tesla_fleet_api/tessie/__init__.py +2 -1
- tesla_fleet_api/tessie/tessie.py +6 -5
- {tesla_fleet_api-1.0.13.dist-info → tesla_fleet_api-1.0.15.dist-info}/METADATA +1 -1
- {tesla_fleet_api-1.0.13.dist-info → tesla_fleet_api-1.0.15.dist-info}/RECORD +14 -15
- tesla_fleet_api/ratecalculator.py +0 -60
- {tesla_fleet_api-1.0.13.dist-info → tesla_fleet_api-1.0.15.dist-info}/LICENSE +0 -0
- {tesla_fleet_api-1.0.13.dist-info → tesla_fleet_api-1.0.15.dist-info}/WHEEL +0 -0
- {tesla_fleet_api-1.0.13.dist-info → tesla_fleet_api-1.0.15.dist-info}/top_level.txt +0 -0
tesla_fleet_api/__init__.py
CHANGED
tesla_fleet_api/const.py
CHANGED
@@ -4,10 +4,10 @@ from tesla_fleet_api.tesla.fleet import TeslaFleetApi
|
|
4
4
|
from tesla_fleet_api.tesla.bluetooth import TeslaBluetooth
|
5
5
|
from tesla_fleet_api.tesla.oauth import TeslaFleetOAuth
|
6
6
|
from tesla_fleet_api.tesla.charging import Charging
|
7
|
-
from tesla_fleet_api.tesla.energysite import EnergySites
|
7
|
+
from tesla_fleet_api.tesla.energysite import EnergySites, EnergySite
|
8
8
|
from tesla_fleet_api.tesla.partner import Partner
|
9
9
|
from tesla_fleet_api.tesla.user import User
|
10
|
-
from tesla_fleet_api.tesla.vehicle import Vehicles, VehiclesBluetooth, VehicleFleet, VehicleSigned, VehicleBluetooth
|
10
|
+
from tesla_fleet_api.tesla.vehicle import Vehicles, VehiclesBluetooth, VehicleFleet, VehicleSigned, VehicleBluetooth, Vehicle
|
11
11
|
|
12
12
|
__all__ = [
|
13
13
|
"TeslaFleetApi",
|
@@ -15,9 +15,11 @@ __all__ = [
|
|
15
15
|
"TeslaFleetOAuth",
|
16
16
|
"Charging",
|
17
17
|
"EnergySites",
|
18
|
+
"EnergySite",
|
18
19
|
"Partner",
|
19
20
|
"User",
|
20
21
|
"Vehicles",
|
22
|
+
"Vehicle",
|
21
23
|
"VehiclesBluetooth",
|
22
24
|
"VehicleFleet",
|
23
25
|
"VehicleSigned",
|
tesla_fleet_api/tesla/fleet.py
CHANGED
@@ -6,8 +6,8 @@ import aiohttp
|
|
6
6
|
|
7
7
|
from tesla_fleet_api.tesla.tesla import Tesla
|
8
8
|
from tesla_fleet_api.exceptions import raise_for_status, InvalidRegion, LibraryError, ResponseError
|
9
|
-
from tesla_fleet_api.const import SERVERS, Method, LOGGER
|
10
|
-
|
9
|
+
from tesla_fleet_api.const import SERVERS, Method, LOGGER
|
10
|
+
from tesla_fleet_api import __version__ as VERSION
|
11
11
|
|
12
12
|
# Based on https://developer.tesla.com/docs/fleet-api
|
13
13
|
class TeslaFleetApi(Tesla):
|
@@ -4,10 +4,12 @@ from tesla_fleet_api.tesla.vehicle.vehicles import Vehicles, VehiclesBluetooth
|
|
4
4
|
from tesla_fleet_api.tesla.vehicle.fleet import VehicleFleet
|
5
5
|
from tesla_fleet_api.tesla.vehicle.bluetooth import VehicleBluetooth
|
6
6
|
from tesla_fleet_api.tesla.vehicle.signed import VehicleSigned
|
7
|
+
from tesla_fleet_api.tesla.vehicle.vehicle import Vehicle
|
7
8
|
|
8
9
|
__all__ = [
|
9
10
|
"Vehicles",
|
10
11
|
"VehiclesBluetooth",
|
12
|
+
"Vehicle",
|
11
13
|
"VehicleFleet",
|
12
14
|
"VehicleBluetooth",
|
13
15
|
"VehicleSigned",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from tesla_fleet_api.teslemetry.teslemetry import Teslemetry
|
2
2
|
from tesla_fleet_api.tesla.charging import Charging
|
3
|
-
from tesla_fleet_api.tesla.energysite import EnergySites
|
3
|
+
from tesla_fleet_api.tesla.energysite import EnergySites, EnergySite
|
4
4
|
from tesla_fleet_api.tesla.user import User
|
5
5
|
from tesla_fleet_api.teslemetry.vehicles import TeslemetryVehicles as Vehicles, TeslemetryVehicle as Vehicle
|
6
6
|
|
@@ -8,6 +8,7 @@ __all__ = [
|
|
8
8
|
"Teslemetry",
|
9
9
|
"Charging",
|
10
10
|
"EnergySites",
|
11
|
+
"EnergySite",
|
11
12
|
"User",
|
12
13
|
"Vehicles",
|
13
14
|
"Vehicle",
|
@@ -2,9 +2,6 @@ from typing import Any
|
|
2
2
|
|
3
3
|
import aiohttp
|
4
4
|
|
5
|
-
from tesla_fleet_api.tesla.charging import Charging
|
6
|
-
from tesla_fleet_api.tesla.energysite import EnergySites
|
7
|
-
from tesla_fleet_api.tesla.user import User
|
8
5
|
from tesla_fleet_api.teslemetry.vehicles import TeslemetryVehicles
|
9
6
|
from tesla_fleet_api.const import LOGGER, Method
|
10
7
|
from tesla_fleet_api.tesla import TeslaFleetApi
|
@@ -12,6 +9,7 @@ from tesla_fleet_api.tesla import TeslaFleetApi
|
|
12
9
|
class Teslemetry(TeslaFleetApi):
|
13
10
|
|
14
11
|
server = "https://api.teslemetry.com"
|
12
|
+
Vehicles = TeslemetryVehicles
|
15
13
|
|
16
14
|
def __init__(
|
17
15
|
self,
|
@@ -23,10 +21,10 @@ class Teslemetry(TeslaFleetApi):
|
|
23
21
|
self.session = session
|
24
22
|
self.access_token = access_token
|
25
23
|
|
26
|
-
self.charging = Charging(self)
|
27
|
-
self.energySites = EnergySites(self)
|
28
|
-
self.user = User(self)
|
29
|
-
self.vehicles =
|
24
|
+
self.charging = self.Charging(self)
|
25
|
+
self.energySites = self.EnergySites(self)
|
26
|
+
self.user = self.User(self)
|
27
|
+
self.vehicles = self.Vehicles(self)
|
30
28
|
|
31
29
|
async def ping(self) -> dict[str, bool]:
|
32
30
|
"""Send a ping."""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from tesla_fleet_api.tessie.tessie import Tessie
|
2
2
|
from tesla_fleet_api.tesla.charging import Charging
|
3
|
-
from tesla_fleet_api.tesla.energysite import EnergySites
|
3
|
+
from tesla_fleet_api.tesla.energysite import EnergySites, EnergySite
|
4
4
|
from tesla_fleet_api.tesla.user import User
|
5
5
|
from tesla_fleet_api.tessie.vehicles import TessieVehicles as Vehicles, TessieVehicle as Vehicle
|
6
6
|
|
@@ -8,6 +8,7 @@ __all__ = [
|
|
8
8
|
"Tessie",
|
9
9
|
"Charging",
|
10
10
|
"EnergySites",
|
11
|
+
"EnergySite",
|
11
12
|
"User",
|
12
13
|
"Vehicles",
|
13
14
|
"Vehicle",
|
tesla_fleet_api/tessie/tessie.py
CHANGED
@@ -11,6 +11,7 @@ from tesla_fleet_api.tessie.vehicles import TessieVehicles
|
|
11
11
|
class Tessie(TeslaFleetApi):
|
12
12
|
|
13
13
|
server="https://api.tessie.com"
|
14
|
+
Vehicles = TessieVehicles
|
14
15
|
|
15
16
|
def __init__(
|
16
17
|
self,
|
@@ -22,10 +23,10 @@ class Tessie(TeslaFleetApi):
|
|
22
23
|
self.session = session
|
23
24
|
self.access_token = access_token
|
24
25
|
|
25
|
-
self.charging = Charging(self)
|
26
|
-
self.energySites = EnergySites(self)
|
27
|
-
self.user = User(self)
|
28
|
-
self.vehicles =
|
26
|
+
self.charging = self.Charging(self)
|
27
|
+
self.energySites = self.EnergySites(self)
|
28
|
+
self.user = self.User(self)
|
29
|
+
self.vehicles = self.Vehicles(self)
|
29
30
|
|
30
31
|
async def scopes(self) -> list[str]:
|
31
32
|
"""Get user scopes."""
|
@@ -39,7 +40,7 @@ class Tessie(TeslaFleetApi):
|
|
39
40
|
"""Find the server URL for the Tesla Fleet API."""
|
40
41
|
raise NotImplementedError("Do not use this function for Tessie.")
|
41
42
|
|
42
|
-
async def
|
43
|
+
async def list_vehicles(self, only_active: bool = False) -> Any:
|
43
44
|
"""Get vehicles."""
|
44
45
|
return await self._request(
|
45
46
|
Method.GET, "vehicles", params={"only_active": only_active}
|
@@ -1,17 +1,16 @@
|
|
1
|
-
tesla_fleet_api/__init__.py,sha256=
|
2
|
-
tesla_fleet_api/const.py,sha256=
|
1
|
+
tesla_fleet_api/__init__.py,sha256=RvG6SPNWla8OcNsp9xQZBUHoGxWoU2NnnxQdd0lsXyg,475
|
2
|
+
tesla_fleet_api/const.py,sha256=cu9jvvFTLOw56bL78lIPWJKlb35T9CYACI5pBT6DBQI,3881
|
3
3
|
tesla_fleet_api/exceptions.py,sha256=GvjJBR77xGt2g3vhiAxcNtysj-e1Me7F-9PwO9dyzOo,35430
|
4
|
-
tesla_fleet_api/
|
5
|
-
tesla_fleet_api/tesla/__init__.py,sha256=1XjIJWgHsYHLw9qgiVRh4FrHVOH9V8tGF0hE92PQhX8,769
|
4
|
+
tesla_fleet_api/tesla/__init__.py,sha256=ahqqQigZbXfysOpo28qUudUfWrQfKRpD_1az368Sjr0,823
|
6
5
|
tesla_fleet_api/tesla/bluetooth.py,sha256=lyPRVf1YdcElrYBsKOMCaLwMPE9rO7Iw1a6nE7VUZ94,2369
|
7
6
|
tesla_fleet_api/tesla/charging.py,sha256=D7I7cAf-3-95sIjyP6wpVqCq9Cppj6U-VPFQGpQQ8bs,1704
|
8
7
|
tesla_fleet_api/tesla/energysite.py,sha256=vStffklBQfQNAO_1wrHLFu7BlBCTVVbLh7_IrAUL3wg,6131
|
9
|
-
tesla_fleet_api/tesla/fleet.py,sha256=
|
8
|
+
tesla_fleet_api/tesla/fleet.py,sha256=3pPwPM4LNm5glZxQzS0DieOYVljp0laXaQxVagw258U,5429
|
10
9
|
tesla_fleet_api/tesla/oauth.py,sha256=aWBsWmnM-QxzaU8W9TXVNxGsYn_LraXnpexwdE8wOqo,4104
|
11
10
|
tesla_fleet_api/tesla/partner.py,sha256=e-l6sEP6-IupjFEQieSUjhhvRXF3aL4ebPNahcGFRCE,1238
|
12
11
|
tesla_fleet_api/tesla/tesla.py,sha256=Gs8-L3OsEMhs1N_vdDx-E46bOHKGowXTBxmRiP8NKh4,2391
|
13
12
|
tesla_fleet_api/tesla/user.py,sha256=w8rwiAOIFjuDus8M0RpZ0wucJtw8kYFKtJfYVk7Ekr0,1194
|
14
|
-
tesla_fleet_api/tesla/vehicle/__init__.py,sha256=
|
13
|
+
tesla_fleet_api/tesla/vehicle/__init__.py,sha256=DKQA9lIAGcya5cHj4AsNc04pcQSVHn18htTrsvN_fRs,498
|
15
14
|
tesla_fleet_api/tesla/vehicle/bluetooth.py,sha256=rMxKOrc8T3Wz_sbuGYFot4ffCbOVP2jFSCd5tVuSWv0,21035
|
16
15
|
tesla_fleet_api/tesla/vehicle/commands.py,sha256=L3apfGwry-IBuSSLbuoPPjW_q4new2xTr6Iy_kUa2pA,51268
|
17
16
|
tesla_fleet_api/tesla/vehicle/fleet.py,sha256=K9BVZj6CChJSDSMFroa7Cz0KrsYWj32ILtQumarkLaU,32080
|
@@ -38,14 +37,14 @@ tesla_fleet_api/tesla/vehicle/proto/vcsec_pb2.py,sha256=PDv9TfiXnNs6sQ0D5vBrsSSP
|
|
38
37
|
tesla_fleet_api/tesla/vehicle/proto/vcsec_pb2.pyi,sha256=cyK1uyRtDjRVqVlyl5uRQYY1RhFlWSJheLg3PGfs-_s,28524
|
39
38
|
tesla_fleet_api/tesla/vehicle/proto/vehicle_pb2.py,sha256=bqyFJM-1qZ7W9XKREINhYZx8yXAudmq6W8_Pdfkhbkk,44711
|
40
39
|
tesla_fleet_api/tesla/vehicle/proto/vehicle_pb2.pyi,sha256=sAUW_9aVB8NqJCnhZjXMLfqfePLVZv_7PfSKZKEBaQA,74251
|
41
|
-
tesla_fleet_api/teslemetry/__init__.py,sha256=
|
42
|
-
tesla_fleet_api/teslemetry/teslemetry.py,sha256=
|
40
|
+
tesla_fleet_api/teslemetry/__init__.py,sha256=BFi16_y-1wRF8XhtgHsYM22eT8T1hTAGJ10S3Q9rWHI,464
|
41
|
+
tesla_fleet_api/teslemetry/teslemetry.py,sha256=pDMeb7QcjdQv7UU6O44WPDBWusZzvtyGjmhWW5r7bsw,2979
|
43
42
|
tesla_fleet_api/teslemetry/vehicles.py,sha256=IJMRKb3jrW9ZSdJrCQ5wOYYZGVbFvSVza24Zpdh4d_0,2067
|
44
|
-
tesla_fleet_api/tessie/__init__.py,sha256=
|
45
|
-
tesla_fleet_api/tessie/tessie.py,sha256=
|
43
|
+
tesla_fleet_api/tessie/__init__.py,sha256=8HiaMLz1RueRoT5PSF1Y7iRr0-RV6ujgOH2RBSSUFk4,436
|
44
|
+
tesla_fleet_api/tessie/tessie.py,sha256=UByX0BmDcqLPiW8ofNuGmMcjXvaWRn3taC68Ji80Yf8,2666
|
46
45
|
tesla_fleet_api/tessie/vehicles.py,sha256=Cdp0pt2Z8bzK5T9wQ8_KubGSZ3Gevx1Q18kqJqEUxfs,1011
|
47
|
-
tesla_fleet_api-1.0.
|
48
|
-
tesla_fleet_api-1.0.
|
49
|
-
tesla_fleet_api-1.0.
|
50
|
-
tesla_fleet_api-1.0.
|
51
|
-
tesla_fleet_api-1.0.
|
46
|
+
tesla_fleet_api-1.0.15.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
47
|
+
tesla_fleet_api-1.0.15.dist-info/METADATA,sha256=td8AWGYdz8eJ-6BwoY4OHOScSonFjsAqcM0zvhQ3KuA,6960
|
48
|
+
tesla_fleet_api-1.0.15.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
|
49
|
+
tesla_fleet_api-1.0.15.dist-info/top_level.txt,sha256=jeNbog_1saXBFrGpom9WyPWmilxsyP3szL_G7JLWQfM,16
|
50
|
+
tesla_fleet_api-1.0.15.dist-info/RECORD,,
|
@@ -1,60 +0,0 @@
|
|
1
|
-
"""Rate Calculator helper"""
|
2
|
-
|
3
|
-
import time
|
4
|
-
|
5
|
-
DAY = 24 * 60 * 60
|
6
|
-
|
7
|
-
|
8
|
-
class RateCalculator:
|
9
|
-
"""Calculate the consumption and remaining rate of a rate limit."""
|
10
|
-
|
11
|
-
def __init__(
|
12
|
-
self,
|
13
|
-
limit: int,
|
14
|
-
period: int = 86400,
|
15
|
-
min_wait: int = 0,
|
16
|
-
max_wait: int | None = None,
|
17
|
-
factor: int = 5,
|
18
|
-
) -> None:
|
19
|
-
"""Initialize the rate calculator."""
|
20
|
-
self.limit: int = limit
|
21
|
-
self.period: int = period
|
22
|
-
self.history: list[int] = []
|
23
|
-
self.start = time.time()
|
24
|
-
self.min_wait = min_wait
|
25
|
-
self.max_wait = max_wait if max_wait is not None else period
|
26
|
-
self.factor = factor
|
27
|
-
|
28
|
-
def constrain(self, value: float) -> float:
|
29
|
-
"""Constrain a value between min and max."""
|
30
|
-
return max(self.min_wait, min(self.max_wait, value))
|
31
|
-
|
32
|
-
def consume(self, timestamp: int | None = None) -> None:
|
33
|
-
"""Consume a unit of the rate limit."""
|
34
|
-
now = timestamp or int(time.time() + 1)
|
35
|
-
self.history.append(now)
|
36
|
-
|
37
|
-
def calculate(self, timestamp: int | None = None) -> float:
|
38
|
-
"""Return the ideal delay to avoid rate limiting."""
|
39
|
-
|
40
|
-
count = len(self.history)
|
41
|
-
if count == 0:
|
42
|
-
return self.min_wait
|
43
|
-
|
44
|
-
now = timestamp or int(time.time())
|
45
|
-
|
46
|
-
while self.history and self.history[0] < now - self.period:
|
47
|
-
self.history.pop(0)
|
48
|
-
|
49
|
-
remaining = self.limit - count
|
50
|
-
|
51
|
-
if remaining <= 0:
|
52
|
-
# The wait until a request is available
|
53
|
-
return self.constrain(self.history[abs(remaining)] + self.period - now)
|
54
|
-
|
55
|
-
return self.constrain(self.period / remaining / self.factor)
|
56
|
-
|
57
|
-
@property
|
58
|
-
def count(self) -> int:
|
59
|
-
"""Return the number of requests in the current period."""
|
60
|
-
return len(self.history)
|
File without changes
|
File without changes
|
File without changes
|