From 7ebd431f9bdd2988328b06f741325bb87d7c6ab3 Mon Sep 17 00:00:00 2001 From: Dan Plischke Date: Thu, 29 Aug 2024 16:58:54 +0200 Subject: [PATCH] align ping message with graphql-sse implementation (https://github.com/enisdenjo/graphql-sse/blob/e8bef032422a7d38a670dc6d18204c4f5dfab6c8/src/handler.ts#L516) --- ariadne/asgi/handlers/http.py | 4 ++-- tests/asgi/test_sse.py | 16 ++++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/ariadne/asgi/handlers/http.py b/ariadne/asgi/handlers/http.py index b06c5bef..5833597a 100644 --- a/ariadne/asgi/handlers/http.py +++ b/ariadne/asgi/handlers/http.py @@ -179,7 +179,7 @@ def __init__( self.send_timeout = send_timeout self.ping_interval = ping_interval or self.DEFAULT_PING_INTERVAL self.encoding = encoding or "utf-8" - self.body = None + self.body = None # type: ignore _headers: Dict[str, str] = {} if headers is not None: @@ -231,7 +231,7 @@ async def _ping(self, send: Send) -> None: await send( { "type": "http.response.body", - "body": self.encode_event(GraphQLServerSentEvent(event="next")), + "body": ":\r\n\r\n".encode(self.encoding), "more_body": True, } ) diff --git a/tests/asgi/test_sse.py b/tests/asgi/test_sse.py index 988a1ad2..27c8cf44 100644 --- a/tests/asgi/test_sse.py +++ b/tests/asgi/test_sse.py @@ -17,11 +17,15 @@ def get_sse_events(response: Response) -> List[Dict[str, Any]]: for event in response.text.split("\r\n\r\n"): if len(event.strip()) == 0: continue - event, data = event.split("\r\n", 1) - event = event.replace("event: ", "") - data = data.replace("data: ", "") - data = json.loads(data) if len(data) > 0 else None - events.append({"event": event, "data": data}) + if "\r\n" not in event: + # ping message + events.append({"event": "", "data": None}) + else: + event, data = event.split("\r\n", 1) + event = event.replace("event: ", "") + data = data.replace("data: ", "") + data = json.loads(data) if len(data) > 0 else None + events.append({"event": event, "data": data}) return events @@ -154,7 +158,7 @@ def test_ping_is_send_sse(sse_client): assert len(events) == 4 assert events[0]["event"] == "next" assert events[0]["data"]["data"] == {"testSlow": "slow"} - assert events[1]["event"] == "next" + assert events[1]["event"] == "" assert events[1]["data"] is None assert events[2]["event"] == "next" assert events[2]["data"]["data"] == {"testSlow": "slow"}