Skip to main content

Python module to gracefully handle a .config file/environment variables for scripts, with built in masking for sensitive options. Provides a Splunk friendly formatted logger instance.

Project description


This package provides:

  • Functionality to read user variables from a config.yml or environment variables.
  • A convenient default logging formatter printing json that can save to disk and rotate.
  • Utility functions.




If skip_header_init=True then the config_path will not use the header_variable as the sub-directory in the config_path.


CONFIG = panaetius.Config("tembo", "~/tembo/.config", skip_header_init=True)

Will look in ~/tembo/config/config.yml.

If skip_header_init=False then would look in ~/tembo/config/tembo/config.yml.


Convenient to place in a package/sub-package

See Tembo for an example:

Example snippet to use in a module:

"""Subpackage that contains the CLI application."""

import os
from typing import Any

import panaetius
from panaetius.exceptions import LoggingDirectoryDoesNotExistException

if (config_path := os.environ.get("TEMBO_CONFIG")) is not None:
    CONFIG: Any = panaetius.Config("tembo", config_path, skip_header_init=True)
    CONFIG = panaetius.Config(
        "tembo", "~/tembo/.config", skip_header_init=True

panaetius.set_config(CONFIG, "base_path", "~/tembo")
panaetius.set_config(CONFIG, "template_path", "~/tembo/.templates")
panaetius.set_config(CONFIG, "scopes", {})
panaetius.set_config(CONFIG, "logging.level", "DEBUG")
panaetius.set_config(CONFIG, "logging.path")

    logger = panaetius.set_logger(
        CONFIG, panaetius.SimpleLogger(logging_level=CONFIG.logging_level)
except LoggingDirectoryDoesNotExistException:
    _LOGGING_PATH = CONFIG.logging_path
    CONFIG.logging_path = ""
    logger = panaetius.set_logger(
        CONFIG, panaetius.SimpleLogger(logging_level=CONFIG.logging_level)
    logger.warning("Logging directory %s does not exist", _LOGGING_PATH)

This means in ./tembo/cli/ you can

import tembo.cli

# access the CONFIG instance + variables from the config.yml


Create ./config/config.yml in the same directory as the script.

In the script initialise a CONFIG object:

import pathlib

import panaetius

CONFIG = panaetius.Config(
    "teenagers_scraper", str(pathlib.Path(__file__).parents[0] / ".config"), skip_header_init=True

Set variables in the same way as the module above.

quickstart logging

import panaetius

def get_logger():
    logging_dir = pathlib.Path(__file__).parents[0] / "logs"
    logging_dir.mkdir(parents=True, exist_ok=True)

    CONFIG = panaetius.Config("training_data_into_gcp", skip_header_init=True)
    panaetius.set_config(CONFIG, "logging.level", "DEBUG")
    panaetius.set_config(CONFIG, "logging.path", logging_dir)
    return panaetius.set_logger(CONFIG, panaetius.SimpleLogger(logging_level=CONFIG.logging_level))

Utility Functions


Squashes a json object or Python dictionary into a single level dictionary.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

panaetius-2.3.5.tar.gz (8.9 kB view hashes)

Uploaded source

Built Distribution

panaetius-2.3.5-py3-none-any.whl (9.8 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page