Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions lstm_ewts/src/lstm_ewts/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
)
from .formatter import CustomFormatter
from .paths import get_log_file_path
from .helper import getenv_any

def translate_ngwpc_log_level(level: str) -> str:
level = level.strip().upper()
Expand Down Expand Up @@ -75,7 +76,7 @@ def configure_logging():
return logger # logger already initialized, nothing else to do

# Default to enabled if flag not set or is set to disabled
raw_value = os.getenv(EV_EWTS_LOGGING)
raw_value = getenv_any(EV_EWTS_LOGGING, "")
normalized = (raw_value or "").strip().lower() # convert None or "" to "", lowercase for easy comparison

# Determine if logging is enabled
Expand All @@ -102,7 +103,7 @@ def configure_logging():
)

log_level = translate_ngwpc_log_level(
os.getenv(EV_MODULE_LOGLEVEL, "INFO")
getenv_any(EV_MODULE_LOGLEVEL, "INFO").strip()
)

module_fmt = MODULE_NAME.upper().ljust(LOG_MODULE_NAME_LEN)[:LOG_MODULE_NAME_LEN]
Expand Down
32 changes: 32 additions & 0 deletions lstm_ewts/src/lstm_ewts/helper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import os

# NOTE:
# ngen sets some env vars from C++ after the Python interpreter has started.
# In embedded Python, os.environ may not reflect those changes.
# getenv_any() falls back to libc getenv() and syncs os.environ.
def getenv_any(key: str, default: str = "") -> str:
"""
Get an environment variable reliably even when it is set from C/C++
after the Python interpreter has started (embedded Python).
Prefers os.environ/os.getenv, falls back to libc getenv.
"""
# First try Python's mapping
v = os.environ.get(key)
if v is not None:
return v

# Fallback: direct libc getenv (sees process env even if Python mapping is stale)
try:
import ctypes, ctypes.util
libc = ctypes.CDLL(ctypes.util.find_library("c"))
libc.getenv.restype = ctypes.c_char_p
b = libc.getenv(key.encode("utf-8"))
if not b:
return default
s = b.decode("utf-8")

# Sync back into os.environ so future lookups work normally
os.environ[key] = s
return s
except Exception:
return default
5 changes: 3 additions & 2 deletions lstm_ewts/src/lstm_ewts/paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import os
from datetime import datetime, timezone

from .helper import getenv_any
from .constants import (
MODULE_NAME,
EV_NGEN_LOGFILEPATH,
Expand Down Expand Up @@ -67,12 +68,12 @@ def get_log_file_path():
moduleLogFileExists = False

# Determine if a log file has laready been opened for this module (either the ngen log or default)
moduleEnvVar = os.getenv(EV_MODULE_LOGFILEPATH, "")
moduleEnvVar = getenv_any(EV_MODULE_LOGFILEPATH).strip()
if moduleEnvVar:
logFilePath = moduleEnvVar
moduleLogFileExists = True
else:
ngenEnvVar = os.getenv(EV_NGEN_LOGFILEPATH, "")
ngenEnvVar = getenv_any(EV_NGEN_LOGFILEPATH).strip()
if ngenEnvVar:
logFilePath = ngenEnvVar
else:
Expand Down