From b00b4d606ac2340882d68be202552809a16c98ab Mon Sep 17 00:00:00 2001 From: Anthony Mahanna Date: Fri, 29 Dec 2023 18:50:22 -0500 Subject: [PATCH 1/2] new: `Database. echo_request()` --- arango/database.py | 21 +++++++++++++++++++++ docs/admin.rst | 3 +++ tests/test_database.py | 6 ++++++ 3 files changed, 30 insertions(+) diff --git a/arango/database.py b/arango/database.py index e33bd5ae..01087a11 100644 --- a/arango/database.py +++ b/arango/database.py @@ -543,6 +543,27 @@ def response_handler(resp: Response) -> Json: return self._execute(request, response_handler) + def echo_request(self, body: Any) -> Result[Json]: + """Echo a request. + + Returns an object with the servers request information. + + :param body: The body of the request. Can be of any type + and is simply forwarded. + :return: The echo response. + :rtype: dict + :raise arango.exceptions.ServerEchoError: If retrieval fails. + """ + request = Request(method="post", endpoint="/_admin/echo", data=body) + + def response_handler(resp: Response) -> Json: + if not resp.is_success: + raise ServerEchoError(resp, request) + result: Json = resp.body + return result + + return self._execute(request, response_handler) + def shutdown(self, soft: bool = False) -> Result[bool]: # pragma: no cover """Initiate server shutdown sequence. diff --git a/docs/admin.rst b/docs/admin.rst index 744b44b3..926c668d 100644 --- a/docs/admin.rst +++ b/docs/admin.rst @@ -54,6 +54,9 @@ database. # Echo the last request. sys_db.echo() + # Echo a request + sys_db.echo_request('request goes here') + # Reload the routing collection. sys_db.reload_routing() diff --git a/tests/test_database.py b/tests/test_database.py index da6307a4..8d9e2c90 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -166,6 +166,12 @@ def test_database_misc_methods(sys_db, db, bad_db, cluster): bad_db.echo() assert err.value.error_code in {11, 1228} + # Test echo (forward request) + body = "request goes here" + echo = db.echo_request(body) + assert isinstance(echo, dict) + assert echo["requestBody"] == body + # Test read_log with default parameters # Deprecated in 3.8.0 # TODO: Remove in future release From 5d272f44087e477ce8776130c8b1c7b2f6bf1e22 Mon Sep 17 00:00:00 2001 From: Anthony Mahanna Date: Thu, 25 Jan 2024 10:41:20 -0500 Subject: [PATCH 2/2] remove: `echo_request` --- arango/database.py | 36 ++++++++++++------------------------ docs/admin.rst | 2 +- tests/test_database.py | 2 +- 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/arango/database.py b/arango/database.py index 01087a11..a1fe8dc3 100644 --- a/arango/database.py +++ b/arango/database.py @@ -526,35 +526,23 @@ def response_handler(resp: Response) -> datetime: return self._execute(request, response_handler) - def echo(self) -> Result[Json]: - """Return details of the last request (e.g. headers, payload). - - :return: Details of the last request. - :rtype: dict - :raise arango.exceptions.ServerEchoError: If retrieval fails. - """ - request = Request(method="get", endpoint="/_admin/echo") - - def response_handler(resp: Response) -> Json: - if not resp.is_success: - raise ServerEchoError(resp, request) - result: Json = resp.body - return result - - return self._execute(request, response_handler) - - def echo_request(self, body: Any) -> Result[Json]: - """Echo a request. - - Returns an object with the servers request information. + def echo(self, body: Optional[Any] = None) -> Result[Json]: + """Return details of the last request (e.g. headers, payload), + or echo the given request body. :param body: The body of the request. Can be of any type - and is simply forwarded. - :return: The echo response. + and is simply forwarded. If not set, the details of the last + request are returned. + :type body: dict | list | str | int | float | None + :return: Details of the last request. :rtype: dict :raise arango.exceptions.ServerEchoError: If retrieval fails. """ - request = Request(method="post", endpoint="/_admin/echo", data=body) + request = ( + Request(method="get", endpoint="/_admin/echo") + if body is None + else Request(method="post", endpoint="/_admin/echo", data=body) + ) def response_handler(resp: Response) -> Json: if not resp.is_success: diff --git a/docs/admin.rst b/docs/admin.rst index 926c668d..dc3dc030 100644 --- a/docs/admin.rst +++ b/docs/admin.rst @@ -55,7 +55,7 @@ database. sys_db.echo() # Echo a request - sys_db.echo_request('request goes here') + sys_db.echo('request goes here') # Reload the routing collection. sys_db.reload_routing() diff --git a/tests/test_database.py b/tests/test_database.py index 8d9e2c90..29e0e336 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -168,7 +168,7 @@ def test_database_misc_methods(sys_db, db, bad_db, cluster): # Test echo (forward request) body = "request goes here" - echo = db.echo_request(body) + echo = db.echo(body) assert isinstance(echo, dict) assert echo["requestBody"] == body