Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions src/api/handlers/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from api.decorators import admins_only, super_admins_only
from database.utils.settings.admin_settings import AdminPortalSettings
from database.utils.settings.user_settings import UserPortalSettings
from concurrent.futures import ThreadPoolExecutor
import requests


class MiscellaneousHandler(RouteHandler):
Expand All @@ -32,6 +34,7 @@ def registerRoutes(self) -> None:
self.add("/settings.list", self.fetch_available_preferences)
self.add("/what.happened", self.fetch_footages)
self.add("/actions.report", self.actions_report)
self.add("/site.load", self.load_essential_initial_site_data)

@admins_only
def fetch_footages(self, request):
Expand Down Expand Up @@ -157,3 +160,34 @@ def authenticateFrontendInTestMode(self, request):
"token", value=token, max_age=24 * 60 * 60, samesite="Strict"
)
return response



def load_essential_initial_site_data(self, request):
context: Context = request.context
args: dict = context.args

self.validator.expect("community_id", is_required=False)
self.validator.expect("subdomain", is_required=False)
self.validator.expect("endpoints", 'str_list', is_required=True)
self.validator.expect("id", is_required=False)

args, err = self.validator.verify(args, strict=True)
if err:
return err

endpoints = args.pop("endpoints", [])

def fetch_data(endpoint):
endpoint = request.build_absolute_uri(endpoint)
response = requests.post(endpoint,data=args, cookies=request.COOKIES)
return response.json()

# Use a ThreadPoolExecutor to make requests to all endpoints concurrently
with ThreadPoolExecutor(max_workers=5) as executor:
results = executor.map(fetch_data, endpoints)

# Convert the results to a dictionary in the format {endpoint: data}
data = {endpoint: result for endpoint, result in zip(endpoints, results)}

return MassenergizeResponse(data=data)