From 76c5353afaec6080e5632f19ead73513ea133c80 Mon Sep 17 00:00:00 2001 From: Pascal Scheiben Date: Thu, 18 Sep 2025 09:33:55 +0200 Subject: [PATCH] Adding base logic for config handling. Adding example config to root --- .env | 8 ++++++++ .gitignore | 2 +- src/example/constants.py | 2 +- src/example/router.py | 3 ++- src/example/schema.py | 1 + src/example/service.py | 2 +- src/main.py | 24 ++++++++++++++++++++---- src/schema.py | 7 +++++++ src/service.py | 16 ++++++++++++++++ 9 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 .env create mode 100644 src/schema.py create mode 100644 src/service.py diff --git a/.env b/.env new file mode 100644 index 0000000..65c8a17 --- /dev/null +++ b/.env @@ -0,0 +1,8 @@ +# Environment variables for NetApp ONTAP clusters +CLUSTER1_HOSTNAME=172.16.57.2 +CLUSTER1_USERNAME=admin +CLUSTER1_PASSWORD=Netapp12 + +CLUSTER2_HOSTNAME=172.16.56.2 +CLUSTER2_USERNAME=admin +CLUSTER2_PASSWORD=Netapp12 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5135bc7..9c5efb6 100644 --- a/.gitignore +++ b/.gitignore @@ -129,7 +129,7 @@ celerybeat.pid *.sage.py # Environments -.env +#.env .venv env/ venv/ diff --git a/src/example/constants.py b/src/example/constants.py index e948fb8..7b5d347 100644 --- a/src/example/constants.py +++ b/src/example/constants.py @@ -1,2 +1,2 @@ # contains a constant definition -FOO: int = 42 \ No newline at end of file +FOO: int = 42 diff --git a/src/example/router.py b/src/example/router.py index 3480774..bfad513 100644 --- a/src/example/router.py +++ b/src/example/router.py @@ -4,6 +4,7 @@ from .schema import ExampleSchema router = APIRouter(tags=["example"]) + @router.get("/example") async def example_endpoint() -> ExampleSchema: - return ExampleSchema(example_field="foo", another_field=42) \ No newline at end of file + return ExampleSchema(example_field="foo", another_field=42) diff --git a/src/example/schema.py b/src/example/schema.py index f9c7684..254a309 100644 --- a/src/example/schema.py +++ b/src/example/schema.py @@ -1,6 +1,7 @@ # contains the schema definitions for the example service from pydantic import BaseModel + class ExampleSchema(BaseModel): example_field: str another_field: int diff --git a/src/example/service.py b/src/example/service.py index 6adc910..0553df7 100644 --- a/src/example/service.py +++ b/src/example/service.py @@ -1,3 +1,3 @@ # contains the business logic for the example service async def example_service() -> str: - return "This is an example service" \ No newline at end of file + return "This is an example service" diff --git a/src/main.py b/src/main.py index cecafa1..69a9d2d 100644 --- a/src/main.py +++ b/src/main.py @@ -1,5 +1,21 @@ -def main() -> None: - print("Hello, World!") +from src.service import load_config +from fastapi import FastAPI +import logging -if __name__ == "__main__": - main() +logger = logging.getLogger("uvicorn") + +logger.info("Starting application") +config = load_config() + +app = FastAPI() + + +@app.get("/") +async def main(): + return {"Hello": "World"} + + +@app.get("/config") +async def get_config(): + """Endpoint to get the current configuration.""" + return config.model_dump() diff --git a/src/schema.py b/src/schema.py new file mode 100644 index 0000000..a6c01e1 --- /dev/null +++ b/src/schema.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel + + +class ConfigSchema(BaseModel): + hostname: str + username: str + password: str diff --git a/src/service.py b/src/service.py new file mode 100644 index 0000000..379bb09 --- /dev/null +++ b/src/service.py @@ -0,0 +1,16 @@ +from dotenv import dotenv_values +import logging + +from src.schema import ConfigSchema + +logger = logging.getLogger("uvicorn") + + +def load_config() -> ConfigSchema: + logger.info("Loading config from .env file") + config = dotenv_values(".env") + return ConfigSchema( + hostname=config["CLUSTER1_HOSTNAME"], + username=config["CLUSTER1_USERNAME"], + password=config["CLUSTER1_PASSWORD"], + )