#!/usr/bin/env python3
# Author(s): Toni Sissala
# Copyright 2019 Finnish Social Science Data Archive FSD / University of Tampere
# Licensed under the EUPL. See LICENSE.txt for full license.
"""Command line setup for Kuha applications
Parse command line for common configuration options
and store loaded settings.
"""
from py12flogging.log_formatter import (
setup_app_logging,
set_ctx_populator
)
from kuha_common import server
from kuha_common.document_store import (
query,
client
)
from . import conf
#: Constant for configuring :mod:`kuha_common.document_store.client`
MOD_DS_CLIENT = 'document_store.client'
#: Constant for configuring :mod:`kuha_common.document_store.query`
MOD_DS_QUERY = 'document_store.query'
#: Constant for configuring :mod:`kuha_common.server`
MOD_SERVER = 'server'
#: Constant for configuring :mod:`logging`
MOD_LOGGING = 'logging'
[docs]def add_logging_configs():
"""Wrapper to add logging-module configuration."""
conf.add_loglevel_arg()
conf.add_logformat_arg()
[docs]def setup_logging(settings):
"""Setup :mod:`py12flogging` module."""
setup_app_logging(conf.get_package(), loglevel=settings.loglevel, logformat=settings.logformat)
configurable_modules = {
MOD_DS_CLIENT: (client.add_cli_args, client.configure),
MOD_DS_QUERY: (query.add_cli_args, query.configure),
MOD_SERVER: (server.add_cli_args, server.configure),
MOD_LOGGING: (add_logging_configs, setup_logging)
}
[docs]def setup_common_modules(*modules):
r"""Setup command line parser.
Load modules, parse command line arguments, return
loaded settings in :obj:`argparse.Namespace`
:param \*modules: common Kuha modules to load and include in
parsing of command line arguments.
:type \*modules: str
:returns: Loaded settings.
:rtype: :obj:`argparse.Namespace`
"""
setup_funcs = []
for mod in modules:
# Add configs to kuha_common_modules
_add_args_func, setup_func = configurable_modules[mod]
setup_funcs.append(setup_func)
_add_args_func()
settings = conf.get_conf()
if all(x in modules for x in [MOD_SERVER, MOD_LOGGING]):
# If configuring both SERVER and LOGGING, register serverlog_ctx_populator.
set_ctx_populator(server.serverlog_ctx_populator)
for setup_func in setup_funcs:
# Load cli args for kuha_common modules
setup_func(settings)
return settings