47 lines
1.5 KiB
Python
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
|
|
|
|
|