import typing as _typing import json as _json import requests as _requests from helpers import * from conf import * from log import * def backend_api_call_generic( session_key, http_method, action_path, data ): log_info( "backend_api_call", { "with_session_key": (not (session_key is None)), "http_method": http_method, "path": action_path, } ) target = string_coin( "{{scheme}}://{{host}}:{{port}}{{path_base}}{{path_action}}", { "scheme": conf_get()["api"]["scheme"], "host": conf_get()["api"]["host"], "port": ("%u" % conf_get()["api"]["port"]), "path_base": conf_get()["api"]["path"], "path_action": action_path, } ) if (http_method == "GET"): response_raw = _requests.get( target, headers = { "X-Session-Key": session_key, } ) 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, }, json = data ) return _json.loads(response_raw.text) elif (http_method == "DELETE"): response_raw = _requests.delete( target, headers = { "X-Session-Key": session_key, }, json = data ) return _json.loads(response_raw.text) else: raise NotImplementedError("unhandled HTTP method: %s" % http_method) def backend_api_call_session_begin( ) -> str: return backend_api_call_generic( None, "POST", "/session/begin", { "name": conf_get()["account"]["name"], "password": conf_get()["account"]["password"], } ) def backend_api_call_session_end( session_key ): return backend_api_call_generic( session_key, "DELETE", "/session/end", None ) def backend_api_call_member_list( session_key : str ): return backend_api_call_generic( session_key, "GET", "/member/list", None ) 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", { "membership_number": membership_number, "name_real_value": name_real_value, "email_address_private": email_address_private, "notification_target_url_template": notification_target_url_template, } )