Skip to main content

Python wrapper for fnox

Project description

fnox-py

fnox-py is a thin Python wrapper around the fnox secrets management tool.

It does not reimplement fnox behavior in Python. Instead, it:

  • locates a real fnox binary
  • builds argv for common commands
  • runs the binary
  • returns parsed results or typed errors

Python requirement: >=3.12

[!NOTE] Official fnox project links:

Installation

uv

uv tool install fnox-py

pip

pip install fnox-py

Bundled binary vs source install

Platform wheels are intended to bundle the fnox binary.

If you install from source instead of a platform wheel, fnox-py requires a real fnox executable to be available via:

  • PATH, or
  • FNOX_PY_BINARY=/absolute/path/to/fnox

Examples:

pip install --no-binary fnox-py fnox-py
FNOX_PY_BINARY=/usr/local/bin/fnox python -c "import fnox_py; print(fnox_py.version())"

Binary Resolution

At runtime, fnox-py resolves the fnox binary in this order:

  1. FNOX_PY_BINARY
  2. bundled/installed locations in the current environment
  3. bundled/installed fallback locations associated with the base or target install
  4. user scheme script location
  5. PATH

If FNOX_PY_BINARY is set but points to a missing file, fnox-py raises FnoxNotFoundError.

Python API

from fnox_py import (
    config_files,
    export_json,
    get,
    lease_create,
    profiles,
    providers,
    schema,
    version,
)

value = get("MY_SECRET")
all_values = export_json()
schema_doc = schema()
profile_names = profiles()
provider_names = providers()
config_paths = config_files()
lease = lease_create("vault", duration="1h", label="local-dev")
fnox_version = version()

Common examples

Get a single value:

from fnox_py import get

token = get("API_TOKEN")

Get a value from a specific profile:

from fnox_py import get

token = get("API_TOKEN", profile="prod")

Decode base64 output:

from fnox_py import get

decoded = get("TLS_CERT", base64_decode=True)

Export all secrets as JSON:

from fnox_py import export_json

data = export_json(profile="dev")

Inspect schema, profiles, providers, and config files:

from fnox_py import config_files, profiles, providers, schema

print(schema())
print(profiles())
print(providers())
print(config_files())

Create a lease:

from fnox_py import lease_create

lease = lease_create("vault", duration="30m", label="ci-job")

Get the underlying fnox version:

from fnox_py import version

print(version())

CLI

The package installs the fnox-py console script.

Built-in subcommands

Locate the resolved binary:

fnox-py which

Show the wrapper version and attempt to print the underlying fnox version:

fnox-py version

Print basic environment diagnostics:

fnox-py doctor

Passthrough behavior

Any arguments other than which, version, and doctor are passed directly through to fnox.

For example:

fnox-py get MY_SECRET
fnox-py profiles
fnox-py export --format json

With no arguments, fnox-py runs fnox with no extra argv.

Public API

fnox-py currently exports:

  • config_files
  • export_json
  • get
  • lease_create
  • profiles
  • providers
  • schema
  • version
  • find_fnox_bin
  • run
  • FnoxResult
  • FnoxCommandError
  • FnoxError
  • FnoxNotFoundError
  • FnoxTimeoutError

Errors

Library calls raise typed exceptions:

  • FnoxNotFoundError when the binary cannot be found
  • FnoxCommandError when fnox exits non-zero
  • FnoxTimeoutError on subprocess timeout
  • FnoxError as the base exception type

Development

This project uses uv, pytest, ruff, and mypy.

Install dependencies:

uv sync

Run tests:

uv run pytest -v

Run a single test:

uv run pytest tests/test_api.py::test_get -q

Lint:

uv run ruff check src tests scripts

Type-check:

uv run mypy src

Build distributions:

uv build

Release / Platform Wheel Build

scripts/build_platform_wheel.py builds platform-specific wheels by:

  1. building a pure Python wheel
  2. downloading upstream fnox release binaries
  3. injecting the binary into the wheel
  4. rewriting wheel metadata
  5. building an sdist

The upstream fnox version to bundle is read from FNOX_VERSION.txt at the repo root by default. To override it, pass --fnox-version:

uv run python scripts/build_platform_wheel.py --fnox-version 1.0.0 --output dist/

Expected upstream archive and extracted binary SHA256 values are pinned in FNOX_HASHES.json and verified during release builds.

To bump the bundled version, update FNOX_VERSION.txt, refresh FNOX_HASHES.json, and commit both changes.

Notes

  • fnox-py is intentionally small and wrapper-focused.
  • For behavior, flags, and command semantics, prefer the upstream fnox documentation.
  • If you need lower-level control, use run() directly and inspect FnoxResult.

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

fnox_py-1.25.1.tar.gz (6.6 kB view details)

Uploaded Source

Built Distributions

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

fnox_py-1.25.1-py3-none-win_arm64.whl (14.8 MB view details)

Uploaded Python 3Windows ARM64

fnox_py-1.25.1-py3-none-win_amd64.whl (15.6 MB view details)

Uploaded Python 3Windows x86-64

fnox_py-1.25.1-py3-none-manylinux_2_17_x86_64.whl (22.8 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

fnox_py-1.25.1-py3-none-manylinux_2_17_aarch64.whl (22.1 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

fnox_py-1.25.1-py3-none-macosx_11_0_arm64.whl (17.9 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

fnox_py-1.25.1-py3-none-macosx_10_12_x86_64.whl (19.0 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file fnox_py-1.25.1.tar.gz.

File metadata

  • Download URL: fnox_py-1.25.1.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fnox_py-1.25.1.tar.gz
Algorithm Hash digest
SHA256 3425832cf73eb1a57849910ca0826e7a9cfadf3bfe0a1a2cc9bfd18ac54541ef
MD5 d08a5cc1d3750ae94e7276a64378be0f
BLAKE2b-256 d6eafb97cba820e56939b6bf971350019cb8004c6bf599cc3995d98590d93203

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1.tar.gz:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-win_arm64.whl.

File metadata

  • Download URL: fnox_py-1.25.1-py3-none-win_arm64.whl
  • Upload date:
  • Size: 14.8 MB
  • Tags: Python 3, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fnox_py-1.25.1-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 872558515b0ff08bab0861b504f019bc9b16b7933d55fa895eafdc0f59ec4315
MD5 bb6a551d0e573e92b31118756a602548
BLAKE2b-256 b1e10d714cb285eab90dd5fdc7dbc124585a81342864fad24fb4bf54fda823b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-win_arm64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: fnox_py-1.25.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 15.6 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for fnox_py-1.25.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 fa256bd56a11e6324e030f6aeadda5a555e5818808b7dec028c01830b9b3f2f6
MD5 2268cbd01a8dd502def42408f6c599c5
BLAKE2b-256 87b2bad6985b98c8d9c4f6fc495c02cfcf31da5669f186655667247657992ad7

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-win_amd64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for fnox_py-1.25.1-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2245890ccef0a83b99e41ef72269ed18113b101edf6852f0cd5cc82aaa8c8743
MD5 b7ffad755dd58ad3d3b0a2605ff30f82
BLAKE2b-256 9189b4bf6ab255e253c0a539b44f65282ce5faa897289fbf0e6688cb681133f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-manylinux_2_17_x86_64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for fnox_py-1.25.1-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 b19d0349a2f46feded4d517b91bef2248644229b71876f00196ae4e510ee3219
MD5 793d34ea29ad34594691d8a97c2919ee
BLAKE2b-256 a482fbc8c4f847665fafac406e8806e95f79f73b5070b0fa0180f351c97a17b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-manylinux_2_17_aarch64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fnox_py-1.25.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 aebee0589eb3d5fd2903dacef35968e8400bc1b42afd11ccf399182e3d517940
MD5 f822f564cb94ef3008312acc3ff60f4b
BLAKE2b-256 f60d49282fc1f7564a2cf11f45279202e17049a12e1c267456dbcefa8ba2bf53

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file fnox_py-1.25.1-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for fnox_py-1.25.1-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bcba0a9a951fd6bde54dcb89aa640b88551314c053cd1a465d1879ab0e4b8eff
MD5 1befee1ce80b408ad6a9857ba16bffac
BLAKE2b-256 7f5f2b63acbf394212338194aa69fbcb9fc8aca015ebde15f18914a648d8daf0

See more details on using hashes here.

Provenance

The following attestation bundles were made for fnox_py-1.25.1-py3-none-macosx_10_12_x86_64.whl:

Publisher: release.yml on fullerzz/fnox-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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