Source code for fastiot.env.env_basic

import logging
import os

from fastiot.env.env_constants_basic import FASTIOT_CONFIG_DIR, FASTIOT_LOG_LEVEL, FASTIOT_VOLUME_DIR, \
    FASTIOT_SERVICE_ID, FASTIOT_USE_INTERNAL_HOSTNAMES
from fastiot.env.helpers import parse_bool_flag


[docs]class BasicEnv: """ Holds the default environment variables for the fastIoT framework. Use the properties from :func:`fastiot.env.fastiot_basic_env` to read the values in an easy manner within your code. """ @property def config_dir(self): """ .. envvar:: FASTIOT_CONFIG_DIR Use to get the config dir, defaults to :file:`/etc/fastiot` if not set. Usually, you don't need to specify this variable manually, instead use config-dir entry on deployments. This way, this variable is automatically injected. On automatic project setups everything should work out fine for you! """ return os.getenv(FASTIOT_CONFIG_DIR, '/etc/fastiot') @property def log_level(self) -> int: """ .. envvar:: FASTIOT_LOG_LEVEL This environment variable is used to set the logging Level. Defaults to Info-Level (=20) Level for logging s. https://docs.python.org/3/library/logging.html#logging-levels """ if FASTIOT_LOG_LEVEL not in os.environ: return logging.INFO try: return int(os.environ[FASTIOT_LOG_LEVEL]) except: pass try: return int(logging.getLevelName(os.environ[FASTIOT_LOG_LEVEL].upper())) except: pass raise ValueError( f"Env variable '{FASTIOT_LOG_LEVEL}' is set to '{os.environ[FASTIOT_LOG_LEVEL]}' " "which is not a valid log level." ) @property def volume_dir(self) -> str: """ .. envvar:: FASTIOT_VOLUME_DIR Use this variable to set the default mount dir for your project """ return os.getenv(FASTIOT_VOLUME_DIR, '/var/fastiot') @property def service_id(self) -> str: """ .. envvar:: FASTIOT_SERVICE_ID Use this variable to differentiate between multiple instances of the same service. The result is available as ``self.service_id``. It is for example used to read a configuration file for each service with :func:`fastiot.util.config_helper.read_config`. See :ref:`configuration_for_service` for more information. """ return os.getenv(FASTIOT_SERVICE_ID, '') @property def log_dir(self) -> str: return os.path.join(self.volume_dir, 'logs') @property def error_logfile(self) -> str: return os.path.join(self.log_dir, 'error.log')
[docs]class TestsEnv: """ Environment variables for running tests """ @property def use_internal_hostnames(self) -> bool: """ .. envvar:: FASTIOT_USE_INTERNAL_HOSTNAMES When starting containers inside another container, e.g. within a Jenkins running in a docker we cannot use ``localhost`` as hostname but need to use the docker container names as hast, e.g. ``nats``. Set this to True, to enable this method! """ return parse_bool_flag(FASTIOT_USE_INTERNAL_HOSTNAMES, False)