Skip to content

Commit b6657f0

Browse files
committed
refactoring app
1 parent c40198c commit b6657f0

File tree

1 file changed

+25
-26
lines changed
  • services/datcore-adapter/src/simcore_service_datcore_adapter/core

1 file changed

+25
-26
lines changed
Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
import logging
22

3-
from fastapi import FastAPI, HTTPException
4-
from fastapi.exceptions import RequestValidationError
3+
from common_library.basic_types import BootModeEnum
4+
from fastapi import FastAPI
5+
from fastapi.middleware.gzip import GZipMiddleware
6+
from fastapi_pagination import add_pagination
7+
from servicelib.fastapi import timing_middleware
8+
from servicelib.fastapi.http_error import set_app_default_http_error_handlers
59
from servicelib.fastapi.openapi import override_fastapi_openapi_method
610
from servicelib.fastapi.prometheus_instrumentation import (
711
setup_prometheus_instrumentation,
812
)
913
from servicelib.fastapi.tracing import initialize_tracing
10-
from servicelib.logging_utils import config_all_loggers
14+
from starlette.middleware.base import BaseHTTPMiddleware
1115

1216
from .._meta import API_VERSION, API_VTAG, APP_NAME
13-
from ..api.errors.http_error import http_error_handler
14-
from ..api.errors.validation_error import http422_error_handler
15-
from ..api.module_setup import setup_api
17+
from ..api.routes import setup_rest_api_routes
1618
from ..modules import pennsieve
1719
from .events import (
1820
create_start_app_handler,
@@ -29,41 +31,32 @@
2931
"hpack",
3032
)
3133

32-
logger = logging.getLogger(__name__)
34+
_logger = logging.getLogger(__name__)
3335

3436

35-
def create_app(settings: ApplicationSettings | None = None) -> FastAPI:
36-
if settings is None:
37-
settings = ApplicationSettings.create_from_envs()
38-
assert settings # nosec
39-
40-
logging.basicConfig(level=settings.LOG_LEVEL.value)
41-
logging.root.setLevel(settings.LOG_LEVEL.value)
42-
config_all_loggers(
43-
log_format_local_dev_enabled=settings.DATCORE_ADAPTER_LOG_FORMAT_LOCAL_DEV_ENABLED,
44-
logger_filter_mapping=settings.DATCORE_ADAPTER_LOG_FILTER_MAPPING,
45-
tracing_settings=settings.DATCORE_ADAPTER_TRACING,
46-
)
47-
37+
def create_app(settings: ApplicationSettings) -> FastAPI:
4838
# keep mostly quiet noisy loggers
4939
quiet_level: int = max(
5040
min(logging.root.level + LOG_LEVEL_STEP, logging.CRITICAL), logging.WARNING
5141
)
5242

5343
for name in NOISY_LOGGERS:
5444
logging.getLogger(name).setLevel(quiet_level)
55-
logger.debug("App settings:\n%s", settings.model_dump_json(indent=2))
45+
46+
_logger.debug("App settings:\n%s", settings.model_dump_json(indent=1))
5647

5748
app = FastAPI(
58-
debug=settings.debug,
59-
title="Datcore Adapter Service",
49+
debug=settings.SC_BOOT_MODE
50+
in [BootModeEnum.DEBUG, BootModeEnum.DEVELOPMENT, BootModeEnum.LOCAL],
51+
title=APP_NAME,
6052
description="Interfaces with Pennsieve storage service",
6153
version=API_VERSION,
6254
openapi_url=f"/api/{API_VTAG}/openapi.json",
6355
docs_url="/dev/doc",
6456
redoc_url=None, # default disabled
6557
)
6658
override_fastapi_openapi_method(app)
59+
add_pagination(app)
6760

6861
app.state.settings = settings
6962

@@ -76,19 +69,25 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI:
7669
APP_NAME,
7770
)
7871

72+
if settings.SC_BOOT_MODE != BootModeEnum.PRODUCTION:
73+
# middleware to time requests (ONLY for development)
74+
app.add_middleware(
75+
BaseHTTPMiddleware, dispatch=timing_middleware.add_process_time_header
76+
)
77+
app.add_middleware(GZipMiddleware)
78+
7979
# events
8080
app.add_event_handler("startup", on_startup)
8181
app.add_event_handler("startup", create_start_app_handler(app))
8282
app.add_event_handler("shutdown", create_stop_app_handler(app))
8383
app.add_event_handler("shutdown", on_shutdown)
8484

8585
# Routing
86-
setup_api(app)
86+
setup_rest_api_routes(app)
8787

8888
if settings.PENNSIEVE.PENNSIEVE_ENABLED:
8989
pennsieve.setup(app, settings.PENNSIEVE)
9090

91-
app.add_exception_handler(HTTPException, http_error_handler)
92-
app.add_exception_handler(RequestValidationError, http422_error_handler)
91+
set_app_default_http_error_handlers(app)
9392

9493
return app

0 commit comments

Comments
 (0)