# -*- coding: utf-8 -*-
"""
relay_commander.validator
~~~~~~~~~~~~~~~~~~~~~~~~~
This module provides helper functions that validate CLI input.
"""
import os
import sys
from relay_commander.util import LOG
_VALID_STATES = ['on', 'off']
"""Internal constant that defines a valid ``state`` argument."""
_REQUIRED_ENV_VARS = ['LD_API_KEY', 'REDIS_HOSTS']
"""Internal constant that defines required environment variables."""
[docs]def _check_env_var(envvar: str) -> bool:
"""Check Environment Variable to verify that it is set and not empty.
:param envvar: Environment Variable to Check.
:returns: True if Environment Variable is set and not empty.
:raises: KeyError if Environment Variable is not set or is empty.
.. versionadded:: 0.0.12
"""
if os.getenv(envvar) is None:
raise KeyError(
"Required ENVVAR: {0} is not set".format(envvar))
if not os.getenv(envvar): # test if env var is empty
raise KeyError(
"Required ENVVAR: {0} is empty".format(envvar))
return True
[docs]def valid_state(state: str) -> bool:
"""Validate State Argument
Checks that either 'on' or 'off' was entered as an argument to the
CLI and make it lower case.
:param state: state to validate.
:returns: True if state is valid.
.. versionchanged:: 0.0.12
This moethod was renamed from validateState to valid_state to conform
to PEP-8. Also removed "magic" text for state and instead reference the
_VALID_STATES constant.
"""
lower_case_state = state.lower()
if lower_case_state in _VALID_STATES:
return True
return False
[docs]def valid_env_vars() -> bool:
"""Validate that required env vars exist.
:returns: True if required env vars exist.
.. versionadded:: 0.0.12
"""
for envvar in _REQUIRED_ENV_VARS:
try:
_check_env_var(envvar)
except KeyError as ex:
LOG.error(ex)
sys.exit(1)
return True