# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
# Copyright (C) 2023 Dantali0n
# SPDX-License-Identifier: Apache-2.0
from oslo_config import cfg
from oslo_log import _options
from oslo_log import log
from radloggerpy import __package_folder__ as package_name
from radloggerpy import __version__
from radloggerpy._i18n import _
from radloggerpy._i18n import dummy
from radloggerpy import config
from radloggerpy.config import translation
LOG = log.getLogger(__name__)
CONF = config.CONF
"""Handles service like methods such as setting the correct log levels and
parsing command line arguments."""
_DEFAULT_LOG_LEVELS = [
"sqlalchemy=WARN",
"stevedore=INFO",
"iso8601=WARN",
"requests=WARN",
]
[docs]
def setup_config_and_logging(argv=(), conf=cfg.CONF):
"""register logging config options and parse commandline arguments"""
log.register_options(conf)
has_config = parse_config_args(argv)
# Set log levels for external libraries
cfg.set_defaults(_options.log_opts, default_log_levels=_DEFAULT_LOG_LEVELS)
log.setup(conf, package_name)
if not has_config:
LOG.warning(
_("Failed to find config file looked in %s") % cfg._get_config_dirs(
project=package_name
)
)
check_locale_config()
# Write all configuration options and values to log
conf.log_opt_values(LOG, log.DEBUG)
[docs]
def check_locale_config():
"""Check locale configuration to see if translations setup successful"""
if _ == dummy:
LOG.warning(
_("Failed to find localization files looked in %s"),
translation.translation_dirs()
)
return
for directory in translation.translation_dirs():
if translation.has_translation_files(directory):
LOG.info(_("Using translation files found in %s"), directory)
LOG.info(_("Currently supported languages %s"), translation.LANGUAGES)
[docs]
def parse_config_args(
argv, default_config_files=None, default_config_dirs=None
) -> bool:
"""Load information into config and allow program arguments to override
:return: true if configuration files could be found, false otherwise
"""
default_config_files = default_config_files or cfg.find_config_files(
project=package_name
)
default_config_dirs = default_config_dirs or cfg.find_config_dirs(
project=package_name
)
cfg.CONF(
argv[1:],
project=package_name,
version=__version__,
default_config_dirs=default_config_dirs,
default_config_files=default_config_files,
)
if not default_config_files and not default_config_dirs:
return False
return True
[docs]
def list_opts():
"""Required method by opts for oslo-config-generator"""
return []