Skip to main content

Pure-function helpers for redacting structured payloads.

Project description

payload-redactor

Pure-function helpers for redacting sensitive data in structured payloads. Designed as a small, composable core rather than a framework-centric solution.

Install

Install from source:

git clone <repo-url>
cd <repo-name>
python -m venv .venv
. .venv/bin/activate
python -m pip install -U pip
python -m pip install .

Usage

from payload_redactor import make_redactor, redact_sensitive_info, redact_with

payload = {"password": "secret", "user": "alice"}
print(redact_sensitive_info(payload))
print(redact_with(payload, replacement="<hidden>"))

redactor = make_redactor(replacement="***")
print(redactor(payload))

Output:

{'password': '[REDACTED]', 'user': 'alice'}
{'password': '<hidden>', 'user': 'alice'}
{'password': '***', 'user': 'alice'}

Custom replacement per key:

from payload_redactor import redact_sensitive_info

payload = {"password": "secret", "token": "abc"}
redacted = redact_sensitive_info(
    payload,
    replacement="<hidden>",
    key_replacements={"password": "***"},
)

Output:

{'password': '***', 'token': '<hidden>'}

Structlog adapter (optional)

Install with the extra:

python -m pip install .[structlog]
import logging
import logging.config

import structlog

from payload_redactor import redact_event_dict


shared_processors = [
    structlog.stdlib.add_logger_name,
    structlog.stdlib.add_log_level,
    structlog.processors.TimeStamper(fmt="iso"),
    structlog.processors.UnicodeDecoder(),
]

logging.config.dictConfig(
    {
        "version": 1,
        "disable_existing_loggers": False,
        "formatters": {
            "console": {
                "()": structlog.stdlib.ProcessorFormatter,
                "processor": structlog.dev.ConsoleRenderer(colors=True),
                "foreign_pre_chain": shared_processors,
            },
            "json": {
                "()": structlog.stdlib.ProcessorFormatter,
                "processor": structlog.processors.JSONRenderer(sort_keys=True),
                "foreign_pre_chain": shared_processors,
            },
        },
        "handlers": {
            "default": {
                "level": "DEBUG",
                "class": "logging.StreamHandler",
                "formatter": "json",
            }
        },
        "loggers": {"": {"handlers": ["default"], "level": "INFO"}},
    }
)

structlog.configure(
    processors=[
        redact_event_dict,
        *shared_processors,
        structlog.stdlib.ProcessorFormatter.wrap_for_formatter,  # type: ignore
    ],
    logger_factory=structlog.stdlib.LoggerFactory(),
    cache_logger_on_first_use=True,
)

logger = structlog.get_logger("app")
logger.info("user login", user_id=123, password="secret")

Output (JSON formatter):

{"event": "user login", "level": "info", "logger": "app", "password": "[REDACTED]", "timestamp": "2024-01-01T12:00:00Z", "user_id": 123}

Development

python -m venv .venv
. .venv/bin/activate
python -m pip install -U pip
python -m pip install -e ".[dev]"
pytest

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

payload_redactor-0.1.0.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

payload_redactor-0.1.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file payload_redactor-0.1.0.tar.gz.

File metadata

  • Download URL: payload_redactor-0.1.0.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for payload_redactor-0.1.0.tar.gz
Algorithm Hash digest
SHA256 149ef697c875561b493a5378d7d65b86861e058f69a3435e490be5581e654386
MD5 8a6c3e07eb38d6c7593f1b44944abb87
BLAKE2b-256 4765f2240da4dd3e9e7f35a9fc03b897eeacc4afaf5acfdeb1135c9d696bc709

See more details on using hashes here.

File details

Details for the file payload_redactor-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for payload_redactor-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ff441af98bd525c2d463abf555b9d54a98322c07944e668a1171505c95952edb
MD5 a4fc5f26a34ca159711903ee23d0e23a
BLAKE2b-256 072d2e0b361d5faa2f1ada281f07f374ed4044f4f18367656833facd78bf5103

See more details on using hashes here.

Supported by

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