Source code for fhirpack.config
import traceback
import sys
import logging
import dotenv
import requests
import os
from enum import Enum
from pathlib import Path
import sys
[docs]class Config:
__CONFIG = dict()
__DOTENVPATH = None
[docs] def __init__(self):
if len(self.__CONFIG) == 0:
self.loadConfig()
self.__configLogger(self)
[docs] def loadConfig(self, dotenvPath=None):
if not dotenvPath:
dotenvPath = dotenv.find_dotenv()
# TODO: decide whether to fail or attempt rescue via .env.example
dotenvPath = ".env.example" if not dotenvPath else dotenvPath
config = dotenv.dotenv_values(dotenvPath)
self.__CONFIG = config
self.__DOTENVPATH = dotenvPath
[docs] def globalExceptionHandler(self, exctype, value, tb):
logger = logging.getLogger(__name__)
logger.error(exctype)
logger.error(value)
logger.error(traceback.extract_tb(tb))
@property
def data(self):
return self.__CONFIG
@data.setter
def data(self, data):
self.__CONFIG = data
@staticmethod
def __configLogger(self):
logspath = self.get("LOGSPATH")
logspath = "./" if not logspath else logspath
logging.basicConfig(
filename=f"{logspath}/execution.log",
filemode="a+",
format="%(asctime)s, %(msecs)d %(name)s %(levelname)s [ %(filename)s-%(lineno)d-%(funcName)20s() ] : %(message)s",
# format="%(message)s",
datefmt="%H:%M:%S",
level=logging.INFO,
)
sys.excepthook = Config.globalExceptionHandler
[docs] def set(self, key, value, saveToEnv=False):
if saveToEnv:
dotenv.set_key(self.__DOTENVPATH, key, value)
return self.__CONFIG.update({key: value})
[docs] def get(self, key):
return self.__CONFIG.get(key)
[docs] def getLogger(self, name):
return logging.getLogger(name)
# TODO create @properties for all compulsory configuration varibles in .env
# def __customize(self):
# self.set(
# 'AUTH_PARAMS_PRESETS_SHIP',
# {
# 'preprocessTokenEndpointResponse':True,
# 'tokenEndpointResponsePreprocessor': Auth.parseSHIPTokenEndpointResponse,
# 'headers':{'Acept':'*/*'}
# }
# )