Skip to content

Commit

Permalink
Refactor create_app to allow re-defining routes
Browse files Browse the repository at this point in the history
  • Loading branch information
r4victor committed Nov 7, 2023
1 parent e8e3fb9 commit 4b516c4
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 33 deletions.
66 changes: 34 additions & 32 deletions src/dstack/_internal/server/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,38 +44,6 @@ def create_app() -> FastAPI:
)

app = FastAPI(docs_url="/api/docs", lifespan=lifespan)
app.include_router(users.router)
app.include_router(projects.router)
app.include_router(backends.root_router)
app.include_router(backends.project_router)
app.include_router(repos.router)
app.include_router(runs.root_router)
app.include_router(runs.project_router)
app.include_router(logs.router)
app.include_router(secrets.router)
app.include_router(gateways.router)

@app.exception_handler(ServerClientError)
async def server_client_error_handler(request: Request, exc: ServerClientError):
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content={"detail": get_server_client_error_details(exc)},
)

@app.middleware("http")
async def log_request(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
logger.debug(
"Processed request %s %s in %s", request.method, request.url, f"{process_time:0.6f}s"
)
return response

@app.get("/")
async def index():
return RedirectResponse("/api/docs")

return app


Expand Down Expand Up @@ -118,3 +86,37 @@ async def lifespan(app: FastAPI):

def register_on_startup_hook(func: Callable[[FastAPI], None]):
_ON_STARTUP_HOOKS.append(func)


def register_routes(app: FastAPI):
app.include_router(users.router)
app.include_router(projects.router)
app.include_router(backends.root_router)
app.include_router(backends.project_router)
app.include_router(repos.router)
app.include_router(runs.root_router)
app.include_router(runs.project_router)
app.include_router(logs.router)
app.include_router(secrets.router)
app.include_router(gateways.router)

@app.exception_handler(ServerClientError)
async def server_client_error_handler(request: Request, exc: ServerClientError):
return JSONResponse(
status_code=status.HTTP_400_BAD_REQUEST,
content={"detail": get_server_client_error_details(exc)},
)

@app.middleware("http")
async def log_request(request: Request, call_next):
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
logger.debug(
"Processed request %s %s in %s", request.method, request.url, f"{process_time:0.6f}s"
)
return response

@app.get("/")
async def index():
return RedirectResponse("/api/docs")
3 changes: 2 additions & 1 deletion src/dstack/_internal/server/main.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from dstack._internal.server.app import create_app
from dstack._internal.server.app import create_app, register_routes

app = create_app()
register_routes(app)

0 comments on commit 4b516c4

Please sign in to comment.