Skip to content

Commit

Permalink
Fix serving static app files from FastAPI when dev=False for App class.
Browse files Browse the repository at this point in the history
  • Loading branch information
toni-neurosc committed Nov 13, 2024
1 parent 6958de2 commit a33dedc
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 38 deletions.
44 changes: 10 additions & 34 deletions py_neuromodulation/gui/backend/app_backend.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
import numpy as np
import logging
import asyncio
import importlib.metadata
from datetime import datetime
from pathlib import Path
import os
import time

from fastapi import (
FastAPI,
HTTPException,
Query,
WebSocket,
)
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware

Expand All @@ -25,8 +22,6 @@
from py_neuromodulation import PYNM_DIR, NMSettings
from py_neuromodulation.utils.types import FileInfo

from multiprocessing import Process, Queue

# TODO: maybe pull this list from the MNE package?
ALLOWED_EXTENSIONS = [".npy", ".vhdr", ".fif", ".edf", ".bdf"]

Expand Down Expand Up @@ -109,11 +104,13 @@ async def handle_stream_control(data: dict):
self.logger.info(self.websocket_manager)
self.logger.info("Starting stream")

asyncio.create_task(self.pynm_state.start_run_function(
#out_dir=data["out_dir"],
#experiment_name=data["experiment_name"],
websocket_manager_features=self.websocket_manager,
))
asyncio.create_task(
self.pynm_state.start_run_function(
# out_dir=data["out_dir"],
# experiment_name=data["experiment_name"],
websocket_manager_features=self.websocket_manager,
)
)

if action == "stop":
self.logger.info("Stopping stream")
Expand Down Expand Up @@ -209,9 +206,9 @@ async def setup_offline_stream(data: dict):
line_noise=float(data["line_noise"]),
sampling_rate_features=float(data["sampling_rate_features"]),
)
return {"message": f"Offline stream setup successfully"}
except ValueError as e:
return {"message": f"Offline stream could not be setup"}
return {"message": "Offline stream setup successfully"}
except ValueError:
return {"message": "Offline stream could not be setup"}

#######################
### PYNM ABOUT INFO ###
Expand Down Expand Up @@ -340,30 +337,9 @@ def quick_access():
###########################
@self.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
# if self.websocket_manager.is_connected:
# self.logger.info(
# "WebSocket connection attempted while already connected"
# )
# await websocket.close(
# code=1008, reason="Another client is already connected"
# )
# return

await self.websocket_manager.connect(websocket)
while True:
try:
await websocket.receive_text()
except Exception:
break
# # #######################
# # ### SPA ENTRY POINT ###
# # #######################
# if not self.dev:

# @self.get("/app/{full_path:path}")
# async def serve_spa(request, full_path: str):
# # Serve the index.html for any path that doesn't match an API route
# print(Path.cwd())
# return FileResponse("frontend/index.html")


15 changes: 11 additions & 4 deletions py_neuromodulation/gui/backend/app_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ def create_backend() -> "PyNMBackend":
from .app_pynm import PyNMState
from .app_backend import PyNMBackend

return PyNMBackend(pynm_state=PyNMState())
debug = os.environ.get("PYNM_DEBUG", "False").lower() == "true"
dev = os.environ.get("PYNM_DEV", "True").lower() == "true"

return PyNMBackend(pynm_state=PyNMState(), debug=debug, dev=dev)


def run_vite(shutdown_event: "Event", debug: bool = False) -> None:
Expand Down Expand Up @@ -157,10 +160,14 @@ def restart(self) -> None:


def run_backend(
shutdown_event: "Event", debug: bool = False, reload: bool = True
shutdown_event: "Event", debug: bool = False, reload: bool = True, dev: bool = True
) -> None:
signal.signal(signal.SIGINT, signal.SIG_IGN)

# Pass create_backend parameters through environment variables
os.environ["PYNM_DEBUG"] = str(debug)
os.environ["PYNM_DEV"] = str(dev)

server_process = mp.Process(
target=run_uvicorn,
kwargs={"debug": debug, "reload": reload},
Expand Down Expand Up @@ -279,8 +286,8 @@ def launch(self) -> None:
kwargs={
"shutdown_event": self.shutdown_event,
"debug": self.debug,
# Could the reload be responsible for closing the websocket?
"reload": False, # self.dev
"reload": self.dev,
"dev": self.dev,
},
name="Backend",
)
Expand Down

0 comments on commit a33dedc

Please sign in to comment.