Source code for satnogsclient.settings

"""SatNOGS Client settings file"""
from __future__ import absolute_import, division, print_function

import os
from distutils.util import strtobool  # pylint: disable=E0401,E0611
from os import environ

from dotenv import load_dotenv
from validators.url import url


[docs]def _cast_or_none(func, value): try: return func(value) except (ValueError, TypeError): return None
try: load_dotenv() except EnvironmentError: # XXX: Workaround for readthedocs # pylint: disable=fixme pass # Ground station information SATNOGS_API_TOKEN = environ.get('SATNOGS_API_TOKEN', None) SATNOGS_PRE_OBSERVATION_SCRIPT = environ.get('SATNOGS_PRE_OBSERVATION_SCRIPT', None) SATNOGS_POST_OBSERVATION_SCRIPT = environ.get('SATNOGS_POST_OBSERVATION_SCRIPT', None) SATNOGS_STATION_ID = _cast_or_none(int, environ.get('SATNOGS_STATION_ID', None)) SATNOGS_STATION_LAT = _cast_or_none(float, environ.get('SATNOGS_STATION_LAT', None)) SATNOGS_STATION_LON = _cast_or_none(float, environ.get('SATNOGS_STATION_LON', None)) SATNOGS_STATION_ELEV = _cast_or_none(int, environ.get('SATNOGS_STATION_ELEV', None)) SATNOGS_GPSD_CLIENT_ENABLED = bool(strtobool(environ.get('SATNOGS_GPSD_CLIENT_ENABLED', 'False'))) SATNOGS_GPSD_HOST = environ.get('SATNOGS_GPSD_HOST', '127.0.0.1') SATNOGS_GPSD_PORT = _cast_or_none(int, environ.get('SATNOGS_GPSD_PORT', 2947)) SATNOGS_GPSD_TIMEOUT = _cast_or_none(int, environ.get('SATNOGS_GPSD_TIMEOUT', 0)) # Output paths SATNOGS_APP_PATH = environ.get('SATNOGS_APP_PATH', '/tmp/.satnogs') SATNOGS_OUTPUT_PATH = environ.get('SATNOGS_OUTPUT_PATH', '/tmp/.satnogs/data') SATNOGS_COMPLETE_OUTPUT_PATH = environ.get('SATNOGS_COMPLETE_OUTPUT_PATH', '') SATNOGS_INCOMPLETE_OUTPUT_PATH = environ.get('SATNOGS_INCOMPLETE_OUTPUT_PATH', '/tmp/.satnogs/data/incomplete') SATNOGS_ARTIFACTS_OUTPUT_PATH = environ.get('SATNOGS_ARTIFACTS_OUTPUT_PATH', '/tmp/.satnogs/artifacts') for p in (SATNOGS_APP_PATH, SATNOGS_OUTPUT_PATH, SATNOGS_COMPLETE_OUTPUT_PATH, SATNOGS_INCOMPLETE_OUTPUT_PATH): if p and not os.path.exists(p): os.mkdir(p) SATNOGS_REMOVE_RAW_FILES = bool(strtobool(environ.get('SATNOGS_REMOVE_RAW_FILES', 'True'))) SATNOGS_KEEP_ARTIFACTS = bool(strtobool(environ.get('SATNOGS_KEEP_ARTIFACTS', 'False'))) SATNOGS_VERIFY_SSL = bool(strtobool(environ.get('SATNOGS_VERIFY_SSL', 'True'))) SATNOGS_NETWORK_API_URL = environ.get('SATNOGS_NETWORK_API_URL', 'https://network.satnogs.org/api/') SATNOGS_NETWORK_API_QUERY_INTERVAL = _cast_or_none(int, environ.get( 'SATNOGS_NETWORK_API_QUERY_INTERVAL', 60)) # In seconds SATNOGS_NETWORK_API_POST_INTERVAL = _cast_or_none(int, environ.get('SATNOGS_NETWORK_API_POST_INTERVAL', 180)) # In seconds SATNOGS_NETWORK_API_TIMEOUT = 1800 # In seconds GNURADIO_UDP_PORT = 16886 GNURADIO_IP = '127.0.0.1' SATNOGS_ROT_ENABLED = bool(strtobool(environ.get('SATNOGS_ROT_ENABLED', 'True'))) SATNOGS_ROT_MODEL = environ.get('SATNOGS_ROT_MODEL', 'ROT_MODEL_DUMMY') SATNOGS_ROT_BAUD = int(environ.get('SATNOGS_ROT_BAUD', 19200)) SATNOGS_ROT_PORT = environ.get('SATNOGS_ROT_PORT', '/dev/ttyUSB0') SATNOGS_RIG_IP = environ.get('SATNOGS_RIG_IP', '127.0.0.1') SATNOGS_RIG_PORT = int(environ.get('SATNOGS_RIG_PORT', 4532)) SATNOGS_ROT_THRESHOLD = int(environ.get('SATNOGS_ROT_THRESHOLD', 4)) SATNOGS_ROT_FLIP = bool(strtobool(environ.get('SATNOGS_ROT_FLIP', 'False'))) SATNOGS_ROT_FLIP_ANGLE = int(environ.get('SATNOGS_ROT_FLIP_ANGLE', 75)) # Common script parameters SATNOGS_SOAPY_RX_DEVICE = environ.get('SATNOGS_SOAPY_RX_DEVICE', None) SATNOGS_RX_SAMP_RATE = environ.get('SATNOGS_RX_SAMP_RATE', None) SATNOGS_RX_BANDWIDTH = environ.get('SATNOGS_RX_BANDWIDTH', None) SATNOGS_DOPPLER_CORR_PER_SEC = environ.get('SATNOGS_DOPPLER_CORR_PER_SEC', None) SATNOGS_LO_OFFSET = environ.get('SATNOGS_LO_OFFSET', None) SATNOGS_PPM_ERROR = environ.get('SATNOGS_PPM_ERROR', None) SATNOGS_GAIN_MODE = environ.get('SATNOGS_GAIN_MODE', 'Overall') SATNOGS_RF_GAIN = environ.get('SATNOGS_RF_GAIN', None) SATNOGS_ANTENNA = environ.get('SATNOGS_ANTENNA', None) SATNOGS_DEV_ARGS = environ.get('SATNOGS_DEV_ARGS', None) SATNOGS_STREAM_ARGS = environ.get('SATNOGS_STREAM_ARGS', None) SATNOGS_TUNE_ARGS = environ.get('SATNOGS_TUNE_ARGS', None) SATNOGS_OTHER_SETTINGS = environ.get('SATNOGS_OTHER_SETTINGS', None) SATNOGS_DC_REMOVAL = environ.get('SATNOGS_DC_REMOVAL', None) SATNOGS_BB_FREQ = environ.get('SATNOGS_BB_FREQ', None) ENABLE_IQ_DUMP = bool(strtobool(environ.get('ENABLE_IQ_DUMP', 'False'))) IQ_DUMP_FILENAME = environ.get('IQ_DUMP_FILENAME', None) DISABLE_DECODED_DATA = bool(strtobool(environ.get('DISABLE_DECODED_DATA', 'False'))) UDP_DUMP_HOST = environ.get('UDP_DUMP_HOST', None) UDP_DUMP_PORT = int(environ.get('UDP_DUMP_PORT', 57356)) # Upload settings SATNOGS_UPLOAD_AUDIO_FILES = bool(strtobool(environ.get('SATNOGS_UPLOAD_AUDIO_FILES', 'True'))) SATNOGS_UPLOAD_WATERFALL_FILES = bool( strtobool(environ.get('SATNOGS_UPLOAD_WATERFALL_FILES', 'True'))) # Artifacts settings ARTIFACTS_ENABLED = bool(strtobool(environ.get('SATNOGS_ARTIFACTS_ENABLED', 'False'))) ARTIFACTS_API_URL = environ.get('SATNOGS_ARTIFACTS_API_URL', 'https://db.satnogs.org/api/') ARTIFACTS_API_POST_INTERVAL = _cast_or_none(int, environ.get('SATNOGS_ARTIFACTS_API_POST_INTERVAL', 180)) # In seconds ARTIFACTS_API_TIMEOUT = 1800 # In seconds ARTIFACTS_API_TOKEN = environ.get('SATNOGS_ARTIFACTS_API_TOKEN', None) # Waterfall settings SATNOGS_WATERFALL_AUTORANGE = bool(strtobool(environ.get('SATNOGS_WATERFALL_AUTORANGE', 'True'))) SATNOGS_WATERFALL_MIN_VALUE = int(environ.get('SATNOGS_WATERFALL_MIN_VALUE', -100)) SATNOGS_WATERFALL_MAX_VALUE = int(environ.get('SATNOGS_WATERFALL_MAX_VALUE', -50)) # Logging configuration LOG_FORMAT = '%(name)s - %(levelname)s - %(message)s' LOG_LEVEL = environ.get('SATNOGS_LOG_LEVEL', 'WARNING') SCHEDULER_LOG_LEVEL = environ.get('SATNOGS_SCHEDULER_LOG_LEVEL', 'WARNING') # Sentry SENTRY_DSN = environ.get('SENTRY_DSN', 'https://5e18316a65b1457c99fe81bf869e26d6@sentry.io/2818206') SENTRY_ENABLED = bool(strtobool(environ.get('SENTRY_ENABLED', 'False'))) REQUIRED_VARIABLES = [ 'SATNOGS_API_TOKEN', 'SATNOGS_STATION_ID', 'SATNOGS_STATION_LAT', 'SATNOGS_STATION_LON', 'SATNOGS_STATION_ELEV', 'SATNOGS_SOAPY_RX_DEVICE', 'SATNOGS_RX_SAMP_RATE', 'SATNOGS_ANTENNA' ]
[docs]def validate(logger): """Validate the provided settings: - Check for the existance of all required variables - Validate format of the provided value for some required variables Since this module has to be loaded before the logger has been initialized, this method requires a configured logger to be passed. Arguments: logger -- the output logger """ settings_valid = True # Get all variable in global scobe (this includes all global variables from this module) settings = globals() for variable_name in REQUIRED_VARIABLES: # Check the value of the variable defined in settings if not settings[variable_name]: logger.error('%s not configured but required', variable_name) settings_valid = False try: url(SATNOGS_NETWORK_API_URL) except ValueError: logger.error('Invalid SATNOGS_NETWORK_API_URL: %s', SATNOGS_NETWORK_API_URL) settings_valid = False if not (SATNOGS_STATION_LAT or SATNOGS_GPSD_CLIENT_ENABLED): logger.error('SATNOGS_STATION_LAT not configured') settings_valid = False if not (SATNOGS_STATION_LON or SATNOGS_GPSD_CLIENT_ENABLED): logger.error('SATNOGS_STATION_LON not configured') settings_valid = False if not (SATNOGS_STATION_ELEV or SATNOGS_GPSD_CLIENT_ENABLED): logger.error('SATNOGS_STATION_ELEV not configured') settings_valid = False return settings_valid