Skip to main content

egos-helpers

A python library for helper functions. Used in the egos-tech projects.

Functions

  • gather_environ: Return a dict of environment variables correlating to the keys dict.
  • get_environ_value: Resolve a single value from an environment variable or its _FILE companion (file-based secrets).
  • short_msg: Truncates the message to chars characters and adds two dots at the end.
  • strtobool: Converts a string to a boolean
  • redact: Replaces in message the param string with replace_value
  • key_to_title: Converts a key in the form a_is_b to a title in the form A Is B
  • slugify: Converts a string to a URL-safe slug of at most max_length characters
  • setup_logger: Sets up and returns a logger, optionally with a GELF handler
  • get_formatter: Builds the log record formatter, which adds source locations at DEBUG

See egos_helpers/core.py for the full description of each function.

egos_helpers.crypto encrypts values an application has to store. It lives behind the crypto extra, so a plain install does not pull it in. See docs/crypto.md.

Usage example

Install egos-helpers:

python3 -m venv .venv
source .venv/bin/activate
# if you don't have a requirements.txt file
pip install -U egos-helpers
# if you do have a requirements.txt file
pip install -U -r requirements.txt

In your python project:

from egos_helpers import gather_environ


class MyClass:
    keys = {
        "key_one": {
            "default": ["one", 2],
            "type": "list",
        },
        "key_two": {
            "hidden": True,
            "default": False,
            "type": "boolean",
        },
        "key_three": {
            "default": {},
            "type": "filter",
        },
        "key_four": {
            "default": None,
            "redact": True,
            "type": "string",
        },
        "key_five": {
            "default": 12,
            "type": "int",
        },
        "key_six": {
            "default": "INFO",
            "type": "enum",
            "values": ["DEBUG", "INFO", "WARNING", "ERROR"],
        },
        "key_seven": {
            "default": "12",
            "deprecated": True,
            "replaced_by": "key_five",
            "type": "int",
        },
    }

    def __init__(self):
        envkeys = gather_environ(keys=MyClass.keys)
        print(envkeys)

With KEY_ONE=one, KEY_THREE=foo=bar, KEY_FOUR=super_secret_string, KEY_FIVE=33, KEY_SIX=WARNING and the rest unset, gather_environ returns:

{
    "key_one": ["one"],
    "key_two": False,
    "key_three": {"foo": "bar"},
    "key_four": "super_secret_string",
    "key_five": 33,
    "key_six": "WARNING",
}

key_seven is deprecated and unset, so it is left out. A key that is unset returns its default exactly as declared, without being converted to the key's type.

File-based secrets

Use get_environ_value to resolve a value from either an environment variable or a <NAME>_FILE file path (the container secrets convention). It reads <NAME>_FILE first (returning the file contents stripped of surrounding whitespace), falls back to <NAME>, and returns None when neither is set. Setting both raises an error. So does an unreadable <NAME>_FILE path.

from egos_helpers import get_environ_value

# MYAPP_TOKEN=secret123           -> "secret123"
# MYAPP_TOKEN_FILE=/run/secrets/t -> contents of the file, stripped
token = get_environ_value("MYAPP_TOKEN")

Encrypted values

A secret the application mints while it runs has to be persisted somewhere, and egos_helpers.crypto keeps it from landing in the store in the clear. Install the extra with pip install -U "egos-helpers[crypto]".

from egos_helpers.crypto import decode_encryption_key, decrypt_secret_text, encrypt_secret

key = decode_encryption_key(get_environ_value("MYAPP_SECRET_KEY"))
blob = encrypt_secret(key, "the-token")  # bytes, safe to store
token = decrypt_secret_text(key, blob)  # "the-token"

Each blob names the key that wrote it, so you can encrypt with a new key and keep the old one around for reads until nothing needs it. docs/crypto.md covers key replacement, binding a value to where it is stored, and the blob format.

Metadata

Release files for egos-helpers 1.4.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for egos-helpers 1.4.9
File Size Uploaded
egos_helpers-1.4.9.tar.gz 17.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for egos-helpers 1.4.9
File Interpreter ABI Platform
egos_helpers-1.4.9-py3-none-any.whl Python 3 none any Details

Total release size: 34.6 kB

Release files / egos_helpers-1.4.9.tar.gz

Download URL egos_helpers-1.4.9.tar.gz
Size 17.5 kB
Tags Source
SHA-256 checksum
How to use checksums
afced4f82bbe280a1c81afce2755d7ab2f0ea09fde5f695b5033f5ecdac15d55
BLAKE2b-256 checksum
How to use checksums
4bd39976ab0c7276c9008e3b70938cdcc340c84eef453fd7c3f964acd8721065
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.3 CPython/3.14.7 Linux/7.0.0-34-generic

Release files / egos_helpers-1.4.9-py3-none-any.whl

Download URL egos_helpers-1.4.9-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
06b2069962135d2f19f8bf713efff843f76dae3d91868881d3a5fe2478f1b23e
BLAKE2b-256 checksum
How to use checksums
4a9a03a1a14530097e5f3a0c083d4bc93ba72c4c7c919edb8a55cd8c5856c0b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.3.3 CPython/3.14.7 Linux/7.0.0-34-generic

Release history Release notifications | RSS feed

1.4.11

2 release files

This release

1.4.9 This release

2 release files

1.4.8

2 release files

1.4.7

2 release files

1.4.6

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.6.2

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.5.5

1 release file

0.5.4

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5.0

1 release file

0.4.0

1 release file

0.3.9

1 release file

0.3.8

1 release file

0.3.7

1 release file

0.3.6

1 release file

0.3.5

1 release file

0.3.4

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page