openflexure-microscope-server/src/openflexure_microscope_server/server/__init__.py
Richard Bowman e3e248c46e Move server config to a config file
Currently this is "just" a LabThings config file.
2024-08-09 01:51:11 +01:00

47 lines
1.5 KiB
Python

from __future__ import annotations
from typing import Optional
from labthings_fastapi.server import cli, ThingServer
import uvicorn
from .serve_static_files import add_static_files
from .legacy_api import add_v2_endpoints
from ..logging import configure_logging, retrieve_log
def customise_server(server: ThingServer):
"""Customise the server with additional endpoints, etc."""
configure_logging()
add_v2_endpoints(server)
try:
add_static_files(server.app)
except RuntimeError:
print("Failed to add static files - you will have to do without them!")
# Add an endpoint to get the log
server.app.get("/log/")(retrieve_log)
def serve_from_cli(argv: Optional[list[str]] = None):
"""Start the server from the command line"""
args = cli.parse_args(argv)
try:
config, server = None, None
config = cli.config_from_args(args)
server = cli.server_from_config(config)
customise_server(server)
uvicorn.run(server.app, host=args.host, port=args.port)
except BaseException as e:
if args.fallback:
print(f"Error: {e}")
fallback_server = "labthings_fastapi.server.fallback:app"
print(f"Starting fallback server {fallback_server}.")
app = cli.object_reference_to_object(fallback_server)
app.labthings_config = config
app.labthings_server = server
app.labthings_error = e
uvicorn.run(app, host=args.host, port=args.port)
else:
raise e