From 9832ec7e20bcdfef1af25542bd8b480224340d1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fra=C3=9F?= Date: Fri, 21 Jun 2024 14:26:57 +0200 Subject: [PATCH] [mod] api --- source/backend.py | 56 +++++++++++++++++++++++++++-------------------- source/main.py | 10 ++++----- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/source/backend.py b/source/backend.py index b32be78..c9c360a 100644 --- a/source/backend.py +++ b/source/backend.py @@ -7,16 +7,19 @@ from conf import * from log import * +_session_key = None + + def backend_api_call_generic( - session_key, http_method, action_path, data ): + global _session_key log_info( "backend_api_call", { - "with_session_key": (not (session_key is None)), + "with_session_key": (not (_session_key is None)), "http_method": http_method, "path": action_path, } @@ -31,41 +34,50 @@ def backend_api_call_generic( "path_action": action_path, } ) + headers_common = ( + {} + if (_session_key is None) else + {"X-Session-Key": _session_key} + ) if (http_method == "GET"): response_raw = _requests.get( target, - headers = { - "X-Session-Key": session_key, - } + headers = ( + headers_common + ) ) - return _json.loads(response_raw.text) elif (http_method == "POST"): response_raw = _requests.post( target, - headers = { - "Content-Type": "application/json", - "X-Session-Key": session_key, - }, + headers = ( + headers_common + | + { + "Content-Type": "application/json", + } + ), json = data ) - return _json.loads(response_raw.text) elif (http_method == "DELETE"): response_raw = _requests.delete( target, - headers = { - "X-Session-Key": session_key, - }, + headers = ( + headers_common + ), json = data ) - return _json.loads(response_raw.text) else: raise NotImplementedError("unhandled HTTP method: %s" % http_method) + if ((response_raw.status_code < 200) or (response_raw.status_code >= 300)): + raise ValueError("irregular HTTP response status code: %u" % response_raw.status_code) + else: + return _json.loads(response_raw.text) def backend_api_call_session_begin( -) -> str: - return backend_api_call_generic( - None, +): + global _session_key + session_key = backend_api_call_generic( "POST", "/session/begin", { @@ -73,13 +85,13 @@ def backend_api_call_session_begin( "password": conf_get()["account"]["password"], } ) + _session_key = session_key + return None def backend_api_call_session_end( - session_key ): return backend_api_call_generic( - session_key, "DELETE", "/session/end", None @@ -87,10 +99,8 @@ def backend_api_call_session_end( def backend_api_call_member_list( - session_key : str ): return backend_api_call_generic( - session_key, "GET", "/member/list", None @@ -98,14 +108,12 @@ def backend_api_call_member_list( def backend_api_call_member_project( - session_key : str, membership_number : _typing.Optional[str], name_real_value : str, email_address_private : _typing.Optional[str], notification_target_url_template : _typing.Optional[str] ): return backend_api_call_generic( - session_key, "POST", "/member/project", { diff --git a/source/main.py b/source/main.py index f719ac5..1958579 100644 --- a/source/main.py +++ b/source/main.py @@ -88,11 +88,10 @@ def main(): elif (args.action == "conf-expose"): _sys.stdout.write(_json.dumps(conf_get(), indent = "\t") + "\n") elif (args.action == "member-list"): - session_key = backend_api_call_session_begin() + backend_api_call_session_begin() data = backend_api_call_member_list( - session_key ) - backend_api_call_session_end(session_key) + backend_api_call_session_end() _sys.stdout.write(_json.dumps(data, indent = "\t") + "\n") elif (args.action == "member-project"): if ( @@ -113,15 +112,14 @@ def main(): } ) else: - session_key = backend_api_call_session_begin() + backend_api_call_session_begin() member_id = backend_api_call_member_project( - session_key, args.membership_number, args.name, args.email_address, None ) - backend_api_call_session_end(session_key) + backend_api_call_session_end() _sys.stdout.write(_json.dumps(member_id, indent = "\t") + "\n") else: raise NotImplementedError()