Skip to content

Commit 2916c9c

Browse files
committed
Fix China region support in OAuth
1 parent 64defa8 commit 2916c9c

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

tesla_fleet_api/tesla/fleet.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Tesla Fleet API for Python."""
22

33
from json import dumps
4-
from typing import Any, Awaitable, Callable
4+
from typing import Any, Awaitable, Callable, Literal
55
import aiohttp
66

77
from tesla_fleet_api.tesla.tesla import Tesla
@@ -14,7 +14,6 @@ class TeslaFleetApi(Tesla):
1414
"""Class describing the Tesla Fleet API."""
1515

1616
access_token: str | None = None
17-
region: str | None = None
1817
server: str | None = None
1918
session: aiohttp.ClientSession
2019
headers: dict[str, str]
@@ -24,7 +23,7 @@ def __init__(
2423
self,
2524
session: aiohttp.ClientSession,
2625
access_token: str | None = None,
27-
region: str | None = None,
26+
region: Literal["na", "eu", "cn"] | None = None,
2827
server: str | None = None,
2928
charging_scope: bool = True,
3029
energy_scope: bool = True,
@@ -41,10 +40,11 @@ def __init__(
4140

4241
if server is not None:
4342
self.server = server
44-
elif region is not None:
45-
if region not in SERVERS:
46-
raise ValueError(f"Region must be one of {', '.join(SERVERS.keys())}")
43+
elif region in SERVERS:
44+
self.region = region
4745
self.server = SERVERS.get(region)
46+
else:
47+
raise ValueError(f"Region must be one of {', '.join(SERVERS.keys())}")
4848

4949
LOGGER.debug("Using server %s", self.server)
5050

tesla_fleet_api/tesla/oauth.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from typing import Any
1+
from pickle import INT
2+
from typing import Any, Literal
23
import aiohttp
34
import time
45

@@ -17,14 +18,13 @@ class TeslaFleetOAuth(TeslaFleetApi):
1718
def __init__(
1819
self,
1920
session: aiohttp.ClientSession,
21+
region: Literal["na", "eu", "cn"],
2022
client_id: str,
2123
client_secret: str | None = None,
2224
redirect_uri: str | None = None,
2325
access_token: str | None = None,
2426
refresh_token: str | None = None,
2527
expires: int = 0,
26-
region: str | None = None,
27-
server: str | None = None,
2828
):
2929
self.client_id = client_id
3030
self._client_secret = client_secret
@@ -37,14 +37,18 @@ def __init__(
3737
session,
3838
access_token="",
3939
region=region,
40-
server=server,
4140
)
4241

4342
def get_login_url(self, scopes: list[Scope], state: str = "login") -> str:
4443
"""Get the login URL."""
4544
if self.redirect_uri is None:
4645
raise ValueError("Redirect URI is missing")
47-
return f"https://auth.tesla.com/oauth2/v3/authorize?response_type=code&client_id={self.client_id}&redirect_uri={self.redirect_uri}&scope={'+'.join(scopes)}&state={state}"
46+
if self.region == "cn":
47+
domain = "auth.tesla.cn"
48+
else:
49+
domain = "auth.tesla.com"
50+
51+
return f"https://{domain}/oauth2/v3/authorize?response_type=code&client_id={self.client_id}&redirect_uri={self.redirect_uri}&scope={'+'.join(scopes)}&state={state}"
4852

4953
async def get_refresh_token(self, code: str) -> None:
5054
"""Get the refresh token."""
@@ -56,7 +60,6 @@ async def get_refresh_token(self, code: str) -> None:
5660
raise ValueError("Redirect URI is missing")
5761

5862
if self.server is None:
59-
self.region = code.split("_")[0].lower()
6063
self.server = SERVERS.get(self.region)
6164

6265
async with self.session.post(

0 commit comments

Comments
 (0)