From 24a4f276ff10ccee9279daaced18de34145a43b5 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 25 May 2023 17:23:26 +0000
Subject: [PATCH] Common - Settings:

- Added helper method to find missing environment variables in microservices
---
 src/common/Settings.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/common/Settings.py b/src/common/Settings.py
index ea161e555..1efe80db7 100644
--- a/src/common/Settings.py
+++ b/src/common/Settings.py
@@ -37,16 +37,25 @@ ENVVAR_SUFIX_SERVICE_HOST         = 'SERVICE_HOST'
 ENVVAR_SUFIX_SERVICE_PORT_GRPC    = 'SERVICE_PORT_GRPC'
 ENVVAR_SUFIX_SERVICE_PORT_HTTP    = 'SERVICE_PORT_HTTP'
 
+def find_missing_environment_variables(
+    required_environment_variables : List[str] = []
+) -> List[str]:
+    if ENVVAR_KUBERNETES_PORT in os.environ:
+        missing_variables = set(required_environment_variables).difference(set(os.environ.keys()))
+    else:
+        # We're not running in Kubernetes, nothing to wait for
+        missing_variables = required_environment_variables
+    return missing_variables
+
 def wait_for_environment_variables(
     required_environment_variables : List[str] = [], wait_delay_seconds : float = DEFAULT_RESTART_DELAY
 ):
-    if ENVVAR_KUBERNETES_PORT not in os.environ: return # We're not running in Kubernetes, nothing to wait for
-    missing_variables = set(required_environment_variables).difference(set(os.environ.keys()))
+    missing_variables = find_missing_environment_variables(required_environment_variables)
     if len(missing_variables) == 0: return # We have all environment variables defined
     msg = 'Variables({:s}) are missing in Environment({:s}), restarting in {:f} seconds...'
     LOGGER.error(msg.format(str(missing_variables), str(os.environ), wait_delay_seconds))
     time.sleep(wait_delay_seconds)
-    raise Exception('Restarting...')
+    raise Exception('Restarting...') # pylint: disable=broad-exception-raised
 
 def get_setting(name, **kwargs):
     value = os.environ.get(name)
@@ -54,6 +63,7 @@ def get_setting(name, **kwargs):
         value = kwargs['settings'].pop(name, value)
     if value is not None: return value
     if 'default' in kwargs: return kwargs['default']
+    # pylint: disable=broad-exception-raised
     raise Exception('Setting({:s}) not specified in environment or configuration'.format(str(name)))
 
 def get_env_var_name(service_name : ServiceNameEnum, env_var_group):
-- 
GitLab