tesla-fleet-api 1.0.1__py3-none-any.whl → 1.0.3__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.
@@ -1,15 +1,13 @@
1
- from .tesla.fleet import TeslaFleetApi
2
- from .tesla.bluetooth import TeslaBluetooth
3
- from .tesla.oauth import TeslaFleetOAuth
4
- from .tesla.opensource import TeslaFleetOpenSource
5
- from .teslemetry.teslemetry import Teslemetry
6
- from .tessie.tessie import Tessie
1
+ from tesla_fleet_api.tesla.fleet import TeslaFleetApi
2
+ from tesla_fleet_api.tesla.bluetooth import TeslaBluetooth
3
+ from tesla_fleet_api.tesla.oauth import TeslaFleetOAuth
4
+ from tesla_fleet_api.teslemetry.teslemetry import Teslemetry
5
+ from tesla_fleet_api.tessie.tessie import Tessie
7
6
 
8
7
  __all__ = [
9
8
  "TeslaFleetApi",
10
9
  "TeslaBluetooth",
11
10
  "TeslaFleetOAuth",
12
- "TeslaFleetOpenSource",
13
11
  "Teslemetry",
14
12
  "Tessie",
15
13
  ]
tesla_fleet_api/const.py CHANGED
@@ -3,7 +3,7 @@
3
3
  from enum import Enum
4
4
  import logging
5
5
 
6
- VERSION = "1.0.1"
6
+ VERSION = "1.0.3"
7
7
  LOGGER = logging.getLogger(__package__)
8
8
  SERVERS = {
9
9
  "na": "https://fleet-api.prd.na.vn.cloud.tesla.com",
@@ -159,3 +159,17 @@ class TeslaEnergyPeriod(StrEnum):
159
159
  MONTH = "month"
160
160
  YEAR = "year"
161
161
  LIFETIME = "lifetime"
162
+
163
+ class BluetoothVehicleData(StrEnum):
164
+ CHARGE_STATE = "GetChargeState"
165
+ CLIMATE_STATE = "GetClimateState"
166
+ DRIVE_STATE = "GetDriveState"
167
+ LOCATION_STATE = "GetLocationState"
168
+ CLOSURES_STATE = "GetClosuresState"
169
+ CHARGE_SCHEDULE_STATE = "GetChargeScheduleState"
170
+ PRECONDITIONING_SCHEDULE_STATE = "GetPreconditioningScheduleState"
171
+ TIRE_PRESSURE_STATE = "GetTirePressureState"
172
+ MEDIA_STATE = "GetMediaState"
173
+ MEDIA_DETAIL_STATE = "GetMediaDetailState"
174
+ SOFTWARE_UPDATE_STATE = "GetSoftwareUpdateState"
175
+ PARENTAL_CONTROLS_STATE = "GetParentalControlsState"
@@ -1,5 +1,5 @@
1
1
  import aiohttp
2
- from .const import LOGGER
2
+ from tesla_fleet_api.const import LOGGER
3
3
 
4
4
 
5
5
  class TeslaFleetError(BaseException):
@@ -656,6 +656,26 @@ class TeslaFleetMessageFaultResponseSizeExceedsMTU(TeslaFleetMessageFault):
656
656
  message = "Client's request was received, but response size exceeded MTU"
657
657
  code = 25
658
658
 
659
+ class TeslaFleetMessageFaultRepeatedCounter(TeslaFleetMessageFault):
660
+ """The vehicle has seen this counter value before. Reset the counter and try again"""
661
+
662
+ message = "The vehicle has seen this counter value before. Reset the counter and try again"
663
+ code = 26
664
+
665
+
666
+ class TeslaFleetMessageFaultInvalidKeyHandle(TeslaFleetMessageFault):
667
+ """The key handle is not valid. The key may have been revoked or expired"""
668
+
669
+ message = "The key handle is not valid. The key may have been revoked or expired"
670
+ code = 27
671
+
672
+
673
+ class TeslaFleetMessageFaultRequiresResponseEncryption(TeslaFleetMessageFault):
674
+ """The response requires encryption but encryption was not requested"""
675
+
676
+ message = "The response requires encryption but encryption was not requested"
677
+ code = 28
678
+
659
679
 
660
680
  MESSAGE_FAULTS = [
661
681
  None,
@@ -684,9 +704,9 @@ MESSAGE_FAULTS = [
684
704
  TeslaFleetMessageFaultCommandRequiresAccountCredentials,
685
705
  TeslaFleetMessageFaultFieldExceedsMTU,
686
706
  TeslaFleetMessageFaultResponseSizeExceedsMTU,
687
- None,
688
- None,
689
- None,
707
+ TeslaFleetMessageFaultRepeatedCounter,
708
+ TeslaFleetMessageFaultInvalidKeyHandle,
709
+ TeslaFleetMessageFaultRequiresResponseEncryption,
690
710
  ]
691
711
 
692
712
  class SignedMessageInformationFault(TeslaFleetError):
@@ -856,6 +876,9 @@ SIGNED_MESSAGE_INFORMATION_FAULTS = [
856
876
  class WhitelistOperationStatus(TeslaFleetError):
857
877
  message = "Whitelist operation failed"
858
878
 
879
+ def __init__(self, message):
880
+ self.message = message
881
+
859
882
  class WhitelistOperationUndocumentedError(WhitelistOperationStatus):
860
883
  message = "Undocumented whitelist operation error"
861
884
  code = 1
@@ -944,6 +967,14 @@ class WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode(W
944
967
  message = "Service key attempting to add service tech outside service mode"
945
968
  code = 22
946
969
 
970
+ # No idea what 23 & 24 are
971
+
972
+ class WhitelistOperationServiceAuthorizationRequestTimedOut(WhitelistOperationStatus):
973
+ # This is observed but not documented
974
+ message = "Authorization request timed out"
975
+ code = 25
976
+
977
+
947
978
  WHITELIST_OPERATION_STATUS = [
948
979
  None,
949
980
  WhitelistOperationUndocumentedError,
@@ -967,7 +998,10 @@ WHITELIST_OPERATION_STATUS = [
967
998
  WhitelistOperationAttemptingToAddKeyWithoutRole,
968
999
  WhitelistOperationAttemptingToAddKeyWithServiceRole,
969
1000
  WhitelistOperationNonServiceKeyAttemptingToAddServiceTech,
970
- WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode
1001
+ WhitelistOperationServiceKeyAttemptingToAddServiceTechOutsideServiceMode,
1002
+ WhitelistOperationStatus,
1003
+ WhitelistOperationStatus,
1004
+ WhitelistOperationServiceAuthorizationRequestTimedOut
971
1005
  ]
972
1006
 
973
1007
 
@@ -1,8 +1,8 @@
1
1
  """Tesla Fleet API classes."""
2
2
 
3
- from .fleet import TeslaFleetApi
4
- from .bluetooth import TeslaBluetooth
5
- from .oauth import TeslaFleetOAuth
3
+ from tesla_fleet_api.tesla.fleet import TeslaFleetApi
4
+ from tesla_fleet_api.tesla.bluetooth import TeslaBluetooth
5
+ from tesla_fleet_api.tesla.oauth import TeslaFleetOAuth
6
6
 
7
7
  __all__ = [
8
8
  "TeslaFleetApi",
@@ -2,8 +2,11 @@
2
2
 
3
3
  import hashlib
4
4
  import re
5
- from .tesla import Tesla
6
- from .vehicle.bluetooth import VehicleBluetooth
5
+ from bleak.backends.device import BLEDevice
6
+ from cryptography.hazmat.primitives.asymmetric import ec
7
+
8
+ from tesla_fleet_api.tesla.tesla import Tesla
9
+ from tesla_fleet_api.tesla.vehicle.bluetooth import VehicleBluetooth
7
10
 
8
11
  class TeslaBluetooth(Tesla):
9
12
  """Class describing a Tesla Bluetooth connection."""
@@ -31,8 +34,12 @@ class Vehicles(dict[str, VehicleBluetooth]):
31
34
  def __init__(self, parent: TeslaBluetooth):
32
35
  self._parent = parent
33
36
 
34
- def createBluetooth(self, vin: str) -> VehicleBluetooth:
37
+ def create(self, vin: str) -> VehicleBluetooth:
38
+ """Creates a specific vehicle."""
39
+ return self.createBluetooth(vin)
40
+
41
+ def createBluetooth(self, vin: str, key: ec.EllipticCurvePrivateKey | None = None, device: None | str | BLEDevice = None) -> VehicleBluetooth:
35
42
  """Creates a specific vehicle."""
36
- vehicle = VehicleBluetooth(self._parent, vin)
43
+ vehicle = VehicleBluetooth(self._parent, vin, key, device)
37
44
  self[vin] = vehicle
38
45
  return vehicle
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ..const import Method
2
+ from tesla_fleet_api.const import Method
3
3
 
4
4
 
5
5
  class Charging:
@@ -1,9 +1,9 @@
1
1
  from __future__ import annotations
2
2
  from typing import Any, TYPE_CHECKING
3
- from ..const import Method, EnergyOperationMode, EnergyExportMode, TeslaEnergyPeriod
3
+ from tesla_fleet_api.const import Method, EnergyOperationMode, EnergyExportMode, TeslaEnergyPeriod
4
4
 
5
5
  if TYPE_CHECKING:
6
- from . import TeslaFleetApi
6
+ from tesla_fleet_api.tesla.fleet import TeslaFleetApi
7
7
 
8
8
  class EnergySite:
9
9
  """Class describing the Tesla Fleet API partner endpoints"""
@@ -4,14 +4,14 @@ from json import dumps
4
4
  from typing import Any, Awaitable
5
5
  import aiohttp
6
6
 
7
- from .tesla import Tesla
8
- from ..exceptions import raise_for_status, InvalidRegion, LibraryError, ResponseError
9
- from ..const import SERVERS, Method, LOGGER, VERSION
10
- from .charging import Charging
11
- from .energysite import EnergySites
12
- from .partner import Partner
13
- from .user import User
14
- from .vehicle.vehicles import Vehicles
7
+ from tesla_fleet_api.tesla.tesla import Tesla
8
+ from tesla_fleet_api.exceptions import raise_for_status, InvalidRegion, LibraryError, ResponseError
9
+ from tesla_fleet_api.const import SERVERS, Method, LOGGER, VERSION
10
+ from tesla_fleet_api.tesla.charging import Charging
11
+ from tesla_fleet_api.tesla.energysite import EnergySites
12
+ from tesla_fleet_api.tesla.partner import Partner
13
+ from tesla_fleet_api.tesla.user import User
14
+ from tesla_fleet_api.tesla.vehicle.vehicles import Vehicles
15
15
 
16
16
 
17
17
  # Based on https://developer.tesla.com/docs/fleet-api
@@ -2,8 +2,8 @@ from typing import Any
2
2
  import aiohttp
3
3
  import time
4
4
 
5
- from . import TeslaFleetApi
6
- from ..const import Scope, SERVERS, Method
5
+ from tesla_fleet_api.tesla import TeslaFleetApi
6
+ from tesla_fleet_api.const import Scope, SERVERS, Method
7
7
 
8
8
 
9
9
  class TeslaFleetOAuth(TeslaFleetApi):
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ..const import Method
2
+ from tesla_fleet_api.const import Method
3
3
 
4
4
 
5
5
  class Partner:
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ..const import Method
2
+ from tesla_fleet_api.const import Method
3
3
 
4
4
 
5
5
  class User:
@@ -1,9 +1,9 @@
1
1
  """Tesla Fleet API classes."""
2
2
 
3
- from .vehicles import Vehicles
4
- from .fleet import VehicleFleet
5
- from .bluetooth import VehicleBluetooth
6
- from .signed import VehicleSigned
3
+ from tesla_fleet_api.tesla.vehicle.vehicles import Vehicles
4
+ from tesla_fleet_api.tesla.vehicle.fleet import VehicleFleet
5
+ from tesla_fleet_api.tesla.vehicle.bluetooth import VehicleBluetooth
6
+ from tesla_fleet_api.tesla.vehicle.signed import VehicleSigned
7
7
 
8
8
  __all__ = [
9
9
  "Vehicles",