send error in streaming response

This commit is contained in:
Maxim Devaev 2021-07-30 07:30:22 +03:00
parent 7d7f4965de
commit 4a1f51bc30
2 changed files with 9 additions and 5 deletions

View File

@ -106,9 +106,9 @@ class MsdApi:
size = written = 0 size = written = 0
response: Optional[StreamResponse] = None response: Optional[StreamResponse] = None
async def stream_write_info() -> None: async def stream_write_info(err: Optional[Exception]=None) -> None:
assert response is not None assert response is not None
await stream_json(response, self.__make_write_info(name, size, written)) await stream_json(response, self.__make_write_info(name, size, written), err)
try: try:
async with htclient.download( async with htclient.download(
@ -141,7 +141,7 @@ class MsdApi:
except Exception as err: except Exception as err:
if response is not None: if response is not None:
await stream_write_info() await stream_write_info(err)
elif isinstance(err, aiohttp.ClientError): elif isinstance(err, aiohttp.ClientError):
return make_json_exception(err, 400) return make_json_exception(err, 400)
raise raise

View File

@ -178,8 +178,12 @@ async def start_streaming(request: Request, content_type: str) -> StreamResponse
return response return response
async def stream_json(response: StreamResponse, result: Dict) -> None: async def stream_json(response: StreamResponse, result: Dict, err: Optional[Exception]=None) -> None:
await response.write(json.dumps(result).encode("utf-8") + b"\r\n") await response.write(json.dumps({
"result": result,
"error": ("" if err is None else type(err).__name__),
"error_msg": ("" if err is None else str(err)),
}).encode("utf-8") + b"\r\n")
# ===== # =====