46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
import json
|
|||
|
|
import os
|
||
|
|
from pydantic_settings import BaseSettings
|
||
|
|
|
||
|
|
class Settings(BaseSettings):
|
||
|
|
hl7_host: str = "0.0.0.0"
|
||
|
|
hl7_port: int = 6060
|
||
|
|
contec_ports: list = [511, 515, 516, 517, 518, 519, 520]
|
||
|
|
monitor_ip: str = ""
|
||
|
|
monitor_model: str = "CMS7000PLUS"
|
||
|
|
device_models: dict = {}
|
||
|
|
target_api_url: str = "https://api.example.com/vitals"
|
||
|
|
api_token: str = ""
|
||
|
|
retry_interval_seconds: int = 60
|
||
|
|
log_file: str = "hl7_forwarder.log"
|
||
|
|
database_url: str = "sqlite:///./hl7_forwarder.db"
|
||
|
|
|
||
|
|
class Config:
|
||
|
|
env_file = ".env"
|
||
|
|
|
||
|
|
def get_settings() -> Settings:
|
||
|
|
base_dir = os.path.dirname(os.path.abspath(__file__))
|
||
|
|
config_file = os.path.join(base_dir, "config.json")
|
||
|
|
|
||
|
|
settings_obj = Settings()
|
||
|
|
|
||
|
|
if os.path.exists(config_file):
|
||
|
|
with open(config_file, "r") as f:
|
||
|
|
try:
|
||
|
|
data = json.load(f)
|
||
|
|
for k, v in data.items():
|
||
|
|
setattr(settings_obj, k, v)
|
||
|
|
except json.JSONDecodeError:
|
||
|
|
pass
|
||
|
|
|
||
|
|
if settings_obj.database_url.startswith("sqlite:///./"):
|
||
|
|
db_name = settings_obj.database_url.split("sqlite:///./")[1]
|
||
|
|
settings_obj.database_url = f"sqlite:///{os.path.join(base_dir, db_name)}"
|
||
|
|
|
||
|
|
if not os.path.isabs(settings_obj.log_file):
|
||
|
|
settings_obj.log_file = os.path.join(base_dir, settings_obj.log_file)
|
||
|
|
|
||
|
|
return settings_obj
|
||
|
|
|
||
|
|
settings = get_settings()
|