Skip to content

Commit 6feb410

Browse files
committed
Apply typing fixes from mypy
1 parent 7594887 commit 6feb410

File tree

15 files changed

+329
-303
lines changed

15 files changed

+329
-303
lines changed

src/saic_ismart_client_ng/api/base.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import logging
44
from abc import ABC
55
from dataclasses import asdict
6-
from typing import Type, T, Optional, Any
6+
from typing import Type, Optional, Any, TypeVar
77

88
import dacite
99
import httpx
@@ -19,12 +19,14 @@
1919

2020
logger = logging.getLogger(__name__)
2121

22+
T = TypeVar('T')
23+
2224

2325
class AbstractSaicApi(ABC):
2426
def __init__(
2527
self,
2628
configuration: SaicApiConfiguration,
27-
listener: SaicApiListener = None,
29+
listener: Optional[SaicApiListener] = None,
2830
):
2931
self.__configuration = configuration
3032
self.__api_client = SaicApiClient(configuration, listener=listener)
@@ -71,7 +73,7 @@ async def execute_api_call(
7173
params: Optional[QueryParamTypes] = None,
7274
headers: Optional[HeaderTypes] = None,
7375
allow_null_body: bool = False,
74-
) -> Optional[T]:
76+
) -> T:
7577
try:
7678
return await self.__execute_api_call(
7779
method,

src/saic_ismart_client_ng/api/message/schema.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515

1616
@dataclass
1717
class MessageEntity:
18-
content: str = None
19-
contentId: str = None
18+
content: Optional[str] = None
19+
contentId: Optional[str] = None
2020
contentIdList: list = field(default_factory=list)
21-
createTime: int = None
22-
messageId: Union[str, int] = None
23-
messageTime: str = None
24-
messageType: str = None
25-
readStatus: int = None
26-
sender: str = None
27-
showCheckButton: bool = None
28-
title: str = None
29-
vin: str = None
21+
createTime: Optional[int] = None
22+
messageId: Union[str, int, None] = None
23+
messageTime: Optional[str] = None
24+
messageType: Optional[str] = None
25+
readStatus: Optional[int] = None
26+
sender: Optional[str] = None
27+
showCheckButton: Optional[bool] = None
28+
title: Optional[str] = None
29+
vin: Optional[str] = None
3030

3131
@property
3232
def message_time(self) -> datetime.datetime:
@@ -57,13 +57,13 @@ def details(self) -> str:
5757

5858
@dataclass
5959
class MessageResp:
60-
alarmNumber: int = None
61-
commandNumber: int = None
60+
alarmNumber: Optional[int] = None
61+
commandNumber: Optional[int] = None
6262
messages: List[MessageEntity] = field(default_factory=list)
63-
newsNumber: int = None
63+
newsNumber: Optional[int] = None
6464
# notifications: List[Any] = None
65-
recordsNumber: int = None
66-
totalNumber: int = None
65+
recordsNumber: Optional[int] = None
66+
totalNumber: Optional[int] = None
6767

6868

6969
@dataclass

src/saic_ismart_client_ng/api/schema.py

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
from dataclasses import dataclass
33
from enum import Enum
4+
from typing import Optional
45

56
logger = logging.getLogger(__name__)
67

@@ -9,28 +10,28 @@
910
class LoginResp():
1011
@dataclass
1112
class LoginRespDetail():
12-
languageType: str = None,
13+
languageType: Optional[str] = None
1314

14-
access_token: str = None,
15-
account: str = None,
16-
avatar: str = None
17-
client_id: str = None,
18-
dept_id: str = None,
19-
detail: LoginRespDetail = None,
20-
expires_in: int = None,
21-
jti: str = None,
22-
languageType: str = None,
23-
license: str = None,
24-
oauth_id: str = None,
25-
post_id: str = None,
26-
refresh_token: str = None,
27-
role_id: str = None,
28-
role_name: str = None,
29-
scope: str = None,
30-
tenant_id: str = None,
31-
token_type: str = None,
32-
user_id: str = None,
33-
user_name: str = None,
15+
access_token: Optional[str] = None
16+
account: Optional[str] = None
17+
avatar: Optional[str] = None
18+
client_id: Optional[str] = None
19+
dept_id: Optional[str] = None
20+
detail: Optional[LoginRespDetail] = None
21+
expires_in: Optional[int] = None
22+
jti: Optional[str] = None
23+
languageType: Optional[str] = None
24+
license: Optional[str] = None
25+
oauth_id: Optional[str] = None
26+
post_id: Optional[str] = None
27+
refresh_token: Optional[str] = None
28+
role_id: Optional[str] = None
29+
role_name: Optional[str] = None
30+
scope: Optional[str] = None
31+
tenant_id: Optional[str] = None
32+
token_type: Optional[str] = None
33+
user_id: Optional[str] = None
34+
user_name: Optional[str] = None
3435

3536

3637
class GpsStatus(Enum):
@@ -46,22 +47,22 @@ class GpsPosition:
4647
class WayPoint:
4748
@dataclass
4849
class Position:
49-
altitude: int = None
50-
latitude: int = None
51-
longitude: int = None
50+
altitude: Optional[int] = None
51+
latitude: Optional[int] = None
52+
longitude: Optional[int] = None
5253

53-
hdop: int = None
54-
heading: int = None
55-
position: Position = None
56-
satellites: int = None
57-
speed: int = None
54+
hdop: Optional[int] = None
55+
heading: Optional[int] = None
56+
position: Optional[Position] = None
57+
satellites: Optional[int] = None
58+
speed: Optional[int] = None
5859

59-
gpsStatus: int = None
60-
timeStamp: int = None
61-
wayPoint: WayPoint = None
60+
gpsStatus: Optional[int] = None
61+
timeStamp: Optional[int] = None
62+
wayPoint: Optional[WayPoint] = None
6263

6364
@property
64-
def gps_status_decoded(self) -> GpsStatus | None:
65+
def gps_status_decoded(self) -> Optional[GpsStatus]:
6566
value = self.gpsStatus
6667
if value is None:
6768
return None

src/saic_ismart_client_ng/api/vehicle/alarm/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import List
2+
13
from saic_ismart_client_ng import SaicVehicleApi
24
from saic_ismart_client_ng.api.vehicle.alarm.schema import AlarmSwitchReq, AlarmSwitchResp, AlarmType, AlarmSwitch
35
from saic_ismart_client_ng.crypto_utils import sha256_hex_digest
@@ -14,7 +16,7 @@ async def get_alarm_switch(self, vin) -> AlarmSwitchResp:
1416
}
1517
)
1618

17-
async def set_alarm_switches(self, alarm_switches: [AlarmType], vin: str) -> None:
19+
async def set_alarm_switches(self, alarm_switches: List[AlarmType], vin: str) -> None:
1820
actual_switches = [
1921
AlarmSwitch(alarmType=alarm_type.value, alarmSwitch=1, functionSwitch=1)
2022
for alarm_type in alarm_switches

src/saic_ismart_client_ng/api/vehicle/alarm/schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from dataclasses import dataclass, field
22
from enum import Enum
3-
from typing import List
3+
from typing import List, Optional
44

55

66
class AlarmType(Enum):
@@ -11,9 +11,9 @@ class AlarmType(Enum):
1111

1212
@dataclass
1313
class AlarmSwitch:
14-
alarmType: int = None
15-
functionSwitch: int = None
16-
alarmSwitch: int = None
14+
alarmType: Optional[int] = None
15+
functionSwitch: Optional[int] = None
16+
alarmSwitch: Optional[int] = None
1717

1818

1919
@dataclass

src/saic_ismart_client_ng/api/vehicle/locks/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from saic_ismart_client_ng.api.vehicle.schema import VehicleControlReq, VehicleControlResp, RvcParams, \
66
RvcReqType, RvcParamsId
77
from saic_ismart_client_ng.crypto_utils import sha256_hex_digest
8+
from saic_ismart_client_ng.exceptions import SaicApiException
89

910

1011
class SaicVehicleLocksApi(SaicVehicleApi):
@@ -29,6 +30,8 @@ async def control_vehicle_locks(
2930
request_type = RvcReqType.CLOSE_LOCKS
3031
params = None
3132
else:
33+
if lock_id is None:
34+
raise SaicApiException("Can't unlock without lock_id")
3235
request_type = RvcReqType.OPEN_LOCKS
3336
params = [
3437
RvcParams(RvcParamsId.UNK_4, b'\x00'),

0 commit comments

Comments
 (0)