frontend-mondvogel/source/backend.py

119 lines
2.3 KiB
Python
Raw Normal View History

2024-06-21 14:04:58 +02:00
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,
}
)