Skip to content

Commit 7cae7e3

Browse files
committed
0.5.4: Allow empty responses in message list
1 parent 6ff597c commit 7cae7e3

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tool.poetry]
22
name = "saic_ismart_client_ng"
33
homepage = "https://github.com/SAIC-iSmart-API/saic-python-client-ng"
4-
version = "0.5.3"
4+
version = "0.5.4"
55
description = "SAIC next gen client library (MG iSMART)"
66
authors = [
77
"Giovanni Condello <[email protected]>",

src/saic_ismart_client_ng/api/base.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ async def execute_api_call(
7070
out_type: Optional[Type[T]] = None,
7171
params: Optional[QueryParamTypes] = None,
7272
headers: Optional[HeaderTypes] = None,
73+
allow_null_body: bool = False,
7374
) -> Optional[T]:
7475
try:
7576
return await self.__execute_api_call(
@@ -79,7 +80,8 @@ async def execute_api_call(
7980
form_body=form_body,
8081
out_type=out_type,
8182
params=params,
82-
headers=headers
83+
headers=headers,
84+
allow_null_body=allow_null_body
8385
)
8486
except SaicApiException as e:
8587
raise e
@@ -96,12 +98,13 @@ async def __execute_api_call(
9698
out_type: Optional[Type[T]] = None,
9799
params: Optional[QueryParamTypes] = None,
98100
headers: Optional[HeaderTypes] = None,
101+
allow_null_body: bool = False,
99102
) -> Optional[T]:
100103
url = f"{self.__configuration.base_uri}{path[1:] if path.startswith('/') else path}"
101104
json_body = asdict(body) if body else None
102105
req = httpx.Request(method, url, params=params, headers=headers, data=form_body, json=json_body)
103106
response = await self.__api_client.send(req)
104-
return await self.__deserialize(req, response, out_type)
107+
return await self.__deserialize(req, response, out_type, allow_null_body)
105108

106109
async def execute_api_call_with_event_id(
107110
self,
@@ -139,7 +142,8 @@ async def __deserialize(
139142
self,
140143
request: httpx.Request,
141144
response: httpx.Response,
142-
data_class: Optional[Type[T]]
145+
data_class: Optional[Type[T]],
146+
allow_null_body: bool
143147
) -> Optional[T]:
144148

145149
try:
@@ -187,6 +191,8 @@ async def __deserialize(
187191
return json_data['data']
188192
else:
189193
return dacite.from_dict(data_class, json_data['data'])
194+
elif allow_null_body:
195+
return None
190196
else:
191197
raise SaicApiException(f"Failed to deserialize response, missing 'data' field: {response.text}")
192198

src/saic_ismart_client_ng/api/message/__init__.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55

66

77
class SaicMessageApi(AbstractSaicApi):
8-
async def get_alarm_list(self, *, page_num: int, page_size: int) -> MessageResp:
8+
async def get_alarm_list(self, *, page_num: int, page_size: int) -> Optional[MessageResp]:
99
return await self.get_message_list(page_num=page_num, page_size=page_size, message_group='ALARM')
1010

11-
async def get_command_list(self, *, page_num: int, page_size: int) -> MessageResp:
11+
async def get_command_list(self, *, page_num: int, page_size: int) -> Optional[MessageResp]:
1212
return await self.get_message_list(page_num=page_num, page_size=page_size, message_group='COMMAND')
1313

14-
async def get_news_list(self, *, page_num: int, page_size: int) -> MessageResp:
14+
async def get_news_list(self, *, page_num: int, page_size: int) -> Optional[MessageResp]:
1515
return await self.get_message_list(page_num=page_num, page_size=page_size, message_group='NEWS')
1616

17-
async def get_message_list(self, *, page_num: int, page_size: int, message_group: str) -> MessageResp:
17+
async def get_message_list(self, *, page_num: int, page_size: int, message_group: str) -> Optional[MessageResp]:
1818
return await self.execute_api_call(
1919
"GET",
2020
"/message/list",
@@ -23,7 +23,8 @@ async def get_message_list(self, *, page_num: int, page_size: int, message_group
2323
"pageSize": page_size,
2424
"messageGroup": message_group,
2525
},
26-
out_type=MessageResp
26+
out_type=MessageResp,
27+
allow_null_body=True
2728
)
2829

2930
async def delete_all_alarms(self):
@@ -55,9 +56,10 @@ async def update_message_status(self, data: UpateMessageRequest):
5556
body=data,
5657
)
5758

58-
async def get_unread_messages_count(self) -> MessageResp:
59+
async def get_unread_messages_count(self) -> Optional[MessageResp]:
5960
return await self.execute_api_call(
6061
"GET",
6162
"/message/unreadCount",
62-
out_type=MessageResp
63+
out_type=MessageResp,
64+
allow_null_body=True
6365
)

0 commit comments

Comments
 (0)