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