Skip to content

Commit 10a74ae

Browse files
add event-stream support
1 parent 68dce90 commit 10a74ae

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

packages/service-library/src/servicelib/aiohttp/rest_responses.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
from models_library.rest_error import ErrorGet, ErrorItemType
88

99
from ..aiohttp.status import HTTP_200_OK
10-
from ..mimetype_constants import MIMETYPE_APPLICATION_JSON
10+
from ..common_headers import (
11+
CACHE_CONTROL,
12+
CACHE_CONTROL_NO_CACHE,
13+
CONNECTION,
14+
CONNECTION_KEEP_ALIVE,
15+
)
16+
from ..mimetype_constants import MIMETYPE_APPLICATION_JSON, MIMETYPE_TEXT_EVENT_STREAM
1117
from ..rest_constants import RESPONSE_MODEL_POLICY
1218
from ..rest_responses import is_enveloped
1319
from ..status_codes_utils import get_code_description, get_code_display_name, is_error
@@ -36,6 +42,17 @@ def create_data_response(data: Any, *, status: int = HTTP_200_OK) -> web.Respons
3642
return web.json_response(enveloped_payload, dumps=json_dumps, status=status)
3743

3844

45+
def create_event_stream_response(event_generator: Any) -> web.Response:
46+
return web.Response(
47+
body=event_generator(),
48+
headers={
49+
CACHE_CONTROL: CACHE_CONTROL_NO_CACHE,
50+
CONNECTION: CONNECTION_KEEP_ALIVE,
51+
},
52+
content_type=MIMETYPE_TEXT_EVENT_STREAM,
53+
)
54+
55+
3956
MAX_STATUS_MESSAGE_LENGTH: Final[int] = 100
4057

4158

packages/service-library/src/servicelib/common_headers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
from typing import Final
22

3+
# HTTP Headers
4+
CACHE_CONTROL: Final[str] = "Cache-Control"
5+
CONNECTION: Final[str] = "Connection"
6+
7+
# HTTP Header Values
8+
CACHE_CONTROL_NO_CACHE: Final[str] = "no-cache"
9+
CONNECTION_KEEP_ALIVE: Final[str] = "keep-alive"
10+
11+
# Custom Headers
312
UNDEFINED_DEFAULT_SIMCORE_USER_AGENT_VALUE: Final[str] = "undefined"
413
X_DYNAMIC_SIDECAR_REQUEST_DNS: Final[str] = "X-Dynamic-Sidecar-Request-DNS"
514
X_DYNAMIC_SIDECAR_REQUEST_SCHEME: Final[str] = "X-Dynamic-Sidecar-Request-Scheme"

packages/service-library/src/servicelib/mimetype_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
88
SEE https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
99
"""
10+
1011
from typing import Final
1112

1213
# NOTE: mimetypes (https://docs.python.org/3/library/mimetypes.html) is already a module in python
1314

1415
MIMETYPE_APPLICATION_JSON: Final[str] = "application/json"
1516
MIMETYPE_APPLICATION_ND_JSON: Final[str] = "application/x-ndjson"
1617
MIMETYPE_APPLICATION_ZIP: Final[str] = "application/zip"
18+
MIMETYPE_TEXT_EVENT_STREAM: Final[str] = "text/event-stream"
1719
MIMETYPE_TEXT_HTML: Final[str] = "text/html"
1820
MIMETYPE_TEXT_PLAIN: Final[str] = "text/plain"

0 commit comments

Comments
 (0)