back-end communication set up, base screen implemented

This commit is contained in:
2026-01-09 17:30:28 +01:00
parent 362a83b2e3
commit e3672c4b14
6 changed files with 156 additions and 93 deletions
+52
View File
@@ -0,0 +1,52 @@
from justgetit.constants import *
import httpx
import json
import toga
class BackEnd():
"""
This is the interface for the backend.
Its a bit over the top to subclass it from a widget, but this way it has access to the app
"""
application = None
def __init__(self, app):
self.application = app
async def post(self, endpoint, parameters, callback):
"""
Call the server, always with a POST, for a specific endpoint and the parameters
in the body
:param endpoint: the endpoint without /api/ (no slashes)
:param parameters: A dict with the parameters for the call
:param callback: def in the calling function to return to
"""
self.status = 0
self.payload = None
if len(endpoint)>2:
try:
async with httpx.AsyncClient() as client:
response = await client.post(f"{API}/{endpoint}", data=parameters)
self.payload = response.json()
self.status = int(self.payload['status'])
print(f" payload {self.payload}")
except httpx.RequestError as exc:
self.status = -2
# status 2 means we are in offline mode
if self.status == -2:
pass
elif self.status == 0:
await self.application.main_window.dialog(
toga.InfoDialog("Oops", self.payload['message'])
)
elif self.status == 2:
await self.application.main_window.dialog(
toga.InfoDialog("Thank you", self.payload['message'])
)
callback(parameters, self.payload)