From 320c9f0caa19f6fe1ce61c23754f8ca2b3ac2e31 Mon Sep 17 00:00:00 2001 From: Neda Moeini <neda.moeini@geant.org> Date: Mon, 28 Apr 2025 13:35:12 +0200 Subject: [PATCH] Restructure FAST API app and load configuration into app --- mapping_provider/__init__.py | 16 ++++++++-------- mapping_provider/dependencies.py | 20 ++++++++++++++++++++ mapping_provider/main.py | 6 ------ 3 files changed, 28 insertions(+), 14 deletions(-) create mode 100644 mapping_provider/dependencies.py delete mode 100644 mapping_provider/main.py diff --git a/mapping_provider/__init__.py b/mapping_provider/__init__.py index 32f6920..2fdc7a3 100644 --- a/mapping_provider/__init__.py +++ b/mapping_provider/__init__.py @@ -1,11 +1,9 @@ -"""Initializes the FastAPI application.""" -import os +"""Create a FastAPI application for the mapping provider.""" from fastapi import FastAPI -from mapping_provider import config from mapping_provider.api.common import router as version_router - +from mapping_provider.api.network_graph import router as graph_router def create_app() -> FastAPI: """Create a FastAPI application.""" @@ -14,9 +12,11 @@ def create_app() -> FastAPI: description="Mapping provider endpoints for GÉANT maps", ) - config_file = os.environ.get("CONFIG_FILE_NAME", "config.json") - with config_file.open() as f: - app.state.config = config.load(f) + # Force configuration to be loaded at startup to avoid issues with missing config + from mapping_provider.dependencies import load_config + _ = load_config() app.include_router(version_router) - return app + app.include_router(graph_router) + + return app \ No newline at end of file diff --git a/mapping_provider/dependencies.py b/mapping_provider/dependencies.py new file mode 100644 index 0000000..a776e79 --- /dev/null +++ b/mapping_provider/dependencies.py @@ -0,0 +1,20 @@ +"""FastAPI project dependencies.""" + +import os +from functools import lru_cache +from typing import Annotated + +from fastapi import Depends +from mapping_provider import config + + +@lru_cache() +def load_config() -> dict: + """Load and cache the application configuration.""" + config_file = os.environ.get("CONFIG_FILE_NAME", "config.json") + with open(config_file) as f: + return config.load(f) + + +# Dependency for injecting config into routes/services +config_dep = Annotated[dict, Depends(load_config)] \ No newline at end of file diff --git a/mapping_provider/main.py b/mapping_provider/main.py deleted file mode 100644 index dfcd3b4..0000000 --- a/mapping_provider/main.py +++ /dev/null @@ -1,6 +0,0 @@ -"""The main module that runs the application.""" - -from mapping_provider import create_app - -app = create_app() - -- GitLab