From 3744e6720bc4d64b3d66bf768b2542576df52853 Mon Sep 17 00:00:00 2001
From: Christian Boettcher <c.boettcher@fz-juelich.de>
Date: Mon, 17 May 2021 09:35:34 +0200
Subject: [PATCH] settings can now be done via the config.env file using the
 dotenv format

---
 apiserver/config/__init__.py                | 2 +-
 apiserver/config/settings.py                | 9 ++++-----
 apiserver/main.py                           | 4 ++--
 apiserver/storage/JsonFileStorageAdapter.py | 6 +++---
 apiserver_tests/context.py                  | 4 ++--
 apiserver_tests/test_responsiveness.py      | 1 -
 apiserver/config/config.env => config.env   | 1 +
 7 files changed, 13 insertions(+), 14 deletions(-)
 rename apiserver/config/config.env => config.env (61%)

diff --git a/apiserver/config/__init__.py b/apiserver/config/__init__.py
index 094d3cd..c739845 100644
--- a/apiserver/config/__init__.py
+++ b/apiserver/config/__init__.py
@@ -1 +1 @@
-from .settings import Settings
\ No newline at end of file
+from .settings import ApiserverSettings
\ No newline at end of file
diff --git a/apiserver/config/settings.py b/apiserver/config/settings.py
index 4c1559a..6cc526d 100644
--- a/apiserver/config/settings.py
+++ b/apiserver/config/settings.py
@@ -5,10 +5,9 @@ DEFAULT_JSON_FILEPATH: str = "./app/data"
 ## Additional Settings can be made available by adding them as properties to this class
 # At launch they will be read from environment variables (case-INsensitive)
 
-class Settings(BaseSettings):
-    datacatalog_apiserver_host: str = "0.0.0.0"
-    datacatalog_apiserver_port: int = 80
-    datacatalog_apiserver_json_storage_path: str = DEFAULT_JSON_FILEPATH
+class ApiserverSettings(BaseSettings):
+    json_storage_path: str = DEFAULT_JSON_FILEPATH
 
     class Config:
-        env_file = "config.env"
\ No newline at end of file
+        env_prefix: str = "datacatalog_apiserver_"
+        env_file: str = "config.env"
\ No newline at end of file
diff --git a/apiserver/main.py b/apiserver/main.py
index 64b30d0..9366ebf 100644
--- a/apiserver/main.py
+++ b/apiserver/main.py
@@ -11,12 +11,12 @@ from .storage import AbstractLocationDataStorageAdapter
 from .storage import LocationData
 from .storage import LocationDataType
 
-from .config import Settings
+from .config import ApiserverSettings
 
 from enum import Enum
 
 
-settings = Settings()
+settings = ApiserverSettings()
 
 app = FastAPI(
     title="API-Server for the Data Catalogue"
diff --git a/apiserver/storage/JsonFileStorageAdapter.py b/apiserver/storage/JsonFileStorageAdapter.py
index 4489df1..e8fbc6f 100644
--- a/apiserver/storage/JsonFileStorageAdapter.py
+++ b/apiserver/storage/JsonFileStorageAdapter.py
@@ -4,7 +4,7 @@ import uuid
 
 from .LocationStorage import AbstractLocationDataStorageAdapter, LocationData, LocationDataType
 
-from apiserver.config import Settings
+from apiserver.config import ApiserverSettings
 
 from typing import List
 
@@ -23,9 +23,9 @@ class StoredData:
 class JsonFileStorageAdapter(AbstractLocationDataStorageAdapter):
     data_dir: str
 
-    def __init__(self, settings: Settings):
+    def __init__(self, settings: ApiserverSettings):
         AbstractLocationDataStorageAdapter.__init__(self)
-        self.data_dir = settings.datacatalog_apiserver_json_storage_path
+        self.data_dir = settings.json_storage_path
         if not (os.path.exists(self.data_dir) and os.path.isdir(self.data_dir)):
             raise Exception('Data Directory \"' + self.data_dir + '\" does not exist.')
 
diff --git a/apiserver_tests/context.py b/apiserver_tests/context.py
index 2f8a361..557827b 100644
--- a/apiserver_tests/context.py
+++ b/apiserver_tests/context.py
@@ -2,5 +2,5 @@ import os
 import sys
 sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
-import apiserver
-import apiserver.storage as storage 
\ No newline at end of file
+import apiserver as apiserver
+import apiserver.storage as storage
\ No newline at end of file
diff --git a/apiserver_tests/test_responsiveness.py b/apiserver_tests/test_responsiveness.py
index b70b0b9..7838446 100644
--- a/apiserver_tests/test_responsiveness.py
+++ b/apiserver_tests/test_responsiveness.py
@@ -6,7 +6,6 @@ from fastapi.testclient import TestClient
 from context import apiserver
 from context import storage
 
-
 client = TestClient(apiserver.app)
 
 # get root
diff --git a/apiserver/config/config.env b/config.env
similarity index 61%
rename from apiserver/config/config.env
rename to config.env
index 93c325d..64719b6 100644
--- a/apiserver/config/config.env
+++ b/config.env
@@ -1,3 +1,4 @@
+# contains Settings that can be loaded via pydantic settings .env support
 DATACATALOG_APISERVER_HOST="0.0.0.0",
 DATACATALOG_APISERVER_PORT=80
 DATACATALOG_APISERVER_JSON_STORAGE_PATH="./app/data"
\ No newline at end of file
-- 
GitLab