Source code for panoptes.pocs.base
import os
from panoptes.utils.config import client
from panoptes.utils.database import PanDB
from requests.exceptions import ConnectionError
from panoptes.pocs import __version__
from panoptes.pocs import hardware
from panoptes.pocs.utils.logger import get_logger
# Global database.
PAN_DB_OBJ = None
[docs]
class PanBase(object):
""" Base class for other classes within the PANOPTES ecosystem
Defines common properties for each class (e.g. logger, config, db).
"""
def __init__(self, config_host=None, config_port=None, *args, **kwargs):
self.__version__ = __version__
self._config_host = config_host or os.getenv('PANOPTES_CONFIG_HOST', 'localhost')
self._config_port = config_port or os.getenv('PANOPTES_CONFIG_PORT', 6563)
log_dir = self.get_config('directories.base', default='.') + '/../logs'
cloud_logging_level = kwargs.get(
'cloud_logging_level',
self.get_config('panoptes_network.cloud_logging_level', default=None)
)
self.logger = get_logger(log_dir=kwargs.get('log_dir', log_dir), cloud_logging_level=cloud_logging_level)
global PAN_DB_OBJ
if PAN_DB_OBJ is None:
# If the user requests a db_type then update runtime config.
db_name = kwargs.get('db_name', self.get_config('db.name', default='panoptes'))
db_folder = kwargs.get('db_folder', self.get_config('db.folder', default='json_store'))
db_type = kwargs.get('db_type', self.get_config('db.type', default='file'))
PAN_DB_OBJ = PanDB(db_name=db_name, storage_dir=db_folder, db_type=db_type)
self.db = PAN_DB_OBJ
[docs]
def get_config(self, *args, **kwargs):
"""Thin-wrapper around client based get_config that sets default port.
See `panoptes.utils.config.client.get_config` for more information.
Args:
*args: Passed to get_config
**kwargs: Passed to get_config
"""
config_value = None
try:
config_value = client.get_config(
host=self._config_host,
port=self._config_port,
verbose=False,
*args, **kwargs
)
except ConnectionError as e: # pragma: no cover
self.logger.warning(f'Cannot connect to config_server from {self.__class__}: {e!r}')
return config_value
[docs]
def set_config(self, key, new_value, *args, **kwargs):
"""Thin-wrapper around client based set_config that sets default port.
See `panoptes.utils.config.client.set_config` for more information.
Args:
key (str): The key name to use, can be namespaced with dots.
new_value (any): The value to store.
*args: Passed to set_config
**kwargs: Passed to set_config
"""
config_value = None
if key == 'simulator' and new_value == 'all':
# Don't use hardware.get_simulator_names because it checks config.
new_value = [h.name for h in hardware.HardwareName]
try:
self.logger.trace(f'Setting config key={key!r} new_value={new_value!r}')
config_value = client.set_config(
key, new_value,
host=self._config_host,
port=self._config_port,
*args, **kwargs
)
self.logger.trace(f'Config set config_value={config_value!r}')
except ConnectionError as e: # pragma: no cover
self.logger.critical(f'Cannot connect to config_server from {self.__class__}: {e!r}')
return config_value