Skip to content

Commit f663499

Browse files
committed
add ping direct in client
1 parent 1e64286 commit f663499

File tree

2 files changed

+36
-44
lines changed

2 files changed

+36
-44
lines changed

eventsourcingdb/client.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
from types import TracebackType
44
from typing import TypeVar
55

6+
from http import HTTPStatus
7+
import json
8+
69
from .abstract_base_client import AbstractBaseClient
10+
from .errors.server_error import ServerError
711
from .event.event import Event
812
from .event.event_candidate import EventCandidate
913
from .event.event_context import EventContext
@@ -30,7 +34,7 @@ def __init__(
3034
):
3135
self.__http_client = HttpClient(base_url=base_url, api_token=api_token)
3236

33-
async def __aenter__(self):
37+
async def __aenter__(self) -> "Client":
3438
await self.__http_client.__aenter__()
3539
return self
3640

@@ -53,7 +57,37 @@ def http_client(self) -> HttpClient:
5357
return self.__http_client
5458

5559
async def ping(self) -> None:
56-
return await ping(self)
60+
OK_RESPONSE = "OK"
61+
STATUS_OK = "ok"
62+
63+
SPECVERSION_FIELD = "specversion"
64+
TYPE_FIELD = "type"
65+
PING_RECEIVED_TYPE = "io.eventsourcingdb.api.ping-received"
66+
67+
response = await self.http_client.get("/api/v1/ping")
68+
response_body = bytes.decode(await response.body.read(), encoding="utf-8")
69+
70+
if response.status_code != HTTPStatus.OK:
71+
raise ServerError(f"Received unexpected response: {response_body}")
72+
73+
if response_body == OK_RESPONSE:
74+
return
75+
76+
try:
77+
response_json = json.loads(response_body)
78+
except json.JSONDecodeError as exc:
79+
raise ServerError(f"Received unexpected response: {response_body}") from exc
80+
81+
if (
82+
isinstance(response_json, dict)
83+
and SPECVERSION_FIELD in response_json
84+
and TYPE_FIELD in response_json
85+
and response_json.get(TYPE_FIELD) == PING_RECEIVED_TYPE
86+
):
87+
return
88+
89+
raise ServerError(f"Received unexpected response: {response_body}")
90+
5791

5892
async def verify_api_token(self) -> None:
5993
raise NotImplementedError("verify_api_token is not implemented yet.")

eventsourcingdb/handlers/ping.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)