Skip to main content

Enterprise infrastructure for containerized Python applications - configuration, logging, timeouts, database, metrics, and application framework

Project description

hyperi-pylib

Build Status Python Version License

Enterprise infrastructure for all HyperI Python projects — configuration, logging, metrics, database utilities, Kafka, caching, and CLI framework.

Features

Core modules — always installed (uv add hyperi-pylib):

Module Description Third-party deps
logging Structured JSON logging with automatic sensitive data masking loguru
config 8-layer cascade (CLI → ENV → .env → PostgreSQL → YAML → defaults), container-aware dynaconf, pyyaml, python-dotenv, mergedeep, tomli-w, dulwich
runtime Container/K8s/local environment detection with standard path resolution stdlib only
database Connection URL builders for PostgreSQL, Redis, and others stdlib only
cli DfeApp framework — subclass to get run/version/config-check for free typer
harness Timeout monitors and utility helpers stdlib only
version-check Startup check for new hyperi-pylib releases (skipped if httpx absent) httpx (lazy)

Optional modules — enabled by installing the matching extra:

Module Extra Third-party deps
http http httpx, stamina
metrics metrics prometheus-client, psutil
expression expression common-expression-language (CEL via Rust/PyO3)
cache cache cashews, msgpack, psycopg[binary,pool]
kafka kafka confluent-kafka, genson
opentelemetry opentelemetry opentelemetry SDK + OTLP + Prometheus exporters

Installation

Package naming: hyperi-pylib on PyPI, hyperi_pylib for Python imports.

# Core only (logging, config, runtime, database, cli, harness, version-check)
uv add hyperi-pylib

# With common extras
uv add "hyperi-pylib[http,metrics,kafka]"

# Full stack
uv add "hyperi-pylib[http,metrics,expression,cache,kafka,opentelemetry]"

Optional Extras

Extra Packages Size
http httpx + stamina ~1 MB
metrics prometheus-client + psutil ~1 MB
expression common-expression-language (CEL) ~6 MB
cache cashews + msgpack + psycopg[binary,pool] ~14 MB (psycopg C libs)
kafka confluent-kafka + genson ~11 MB (C libs)
opentelemetry OpenTelemetry SDK + exporters ~4 MB
presidio Presidio analyser + anonymiser ~500 MB (spaCy + ML models)
secrets All secrets backends (Vault + AWS + GCP + Azure)
secrets-vault OpenBao / HashiCorp Vault (uses http extra) convenience marker
secrets-aws AWS Secrets Manager via boto3 ~100 MB
secrets-gcp GCP Secret Manager ~80–100 MB
secrets-azure Azure Key Vault ~50 MB

Quick Start

Logging

from hyperi_pylib.logger import logger

logger.info("Service starting", version="1.0.0")
logger.error("DB connection failed", host="postgres", retry=3)

Auto-detects console vs container — structured JSON in containers, human-readable locally.

Configuration

from hyperi_pylib.config import settings

# Automatic cascade: CLI > ENV > .env > PostgreSQL > settings.yaml > defaults
host = settings.database.host
port = settings.api.port

ENV key mapping: settings.database.hostMYAPP_DATABASE_HOST

Database URLs

from hyperi_pylib import build_database_url

postgres = build_database_url("postgresql")  # reads POSTGRES_HOST, POSTGRES_PORT, etc.
redis = build_database_url("redis")          # reads REDIS_HOST, REDIS_PORT, etc.

Runtime Paths

from hyperi_pylib import get_runtime_paths

runtime = get_runtime_paths()
config = runtime.config_dir / "app.yaml"   # /config in K8s, ~/.config locally
data   = runtime.data_dir  / "state.db"   # /data in K8s, ~/.local/share locally

Metrics

from hyperi_pylib import create_metrics

metrics = create_metrics(namespace="myapp")
metrics.http_requests.inc()
metrics.active_users.set(42)
metrics.request_duration.observe(0.123)

Cache

from hyperi_pylib.cache import PostgresCache, generate_cache_key

cache = PostgresCache(dsn="postgresql://user:pass@host/db")
await cache.init()

key = generate_cache_key("analytics", "events", org_id="acme")
await cache.set(key, {"data": [...]}, ttl_seconds=300, namespace="analytics")
value = await cache.get(key)

await cache.close()

Kafka

from hyperi_pylib.kafka import KafkaClient, KafkaConsumer, KafkaProducer

DfeApp CLI Framework

Subclass DfeApp to get standard CLI lifecycle (run, version, config-check) with no boilerplate:

from hyperi_pylib.cli import DfeApp, VersionInfo

class MyService(DfeApp):
    name = "my-service"
    env_prefix = "MY_SVC"

    def version_info(self) -> VersionInfo:
        return VersionInfo(self.name, "1.0.0")

    async def run_service_async(self, config) -> None:
        ...

if __name__ == "__main__":
    MyService().cli()

Config always uses the Dynaconf cascade — no bespoke loading needed.

Development

make quality   # lint, type-check, security audit
make test      # run test suite
make build     # build wheel

License

FSL-1.1-ALv2 — See LICENSE

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

hyperi_pylib-2.27.0.tar.gz (200.2 kB view details)

Uploaded Source

Built Distribution

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

hyperi_pylib-2.27.0-py3-none-any.whl (248.7 kB view details)

Uploaded Python 3

File details

Details for the file hyperi_pylib-2.27.0.tar.gz.

File metadata

  • Download URL: hyperi_pylib-2.27.0.tar.gz
  • Upload date:
  • Size: 200.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hyperi_pylib-2.27.0.tar.gz
Algorithm Hash digest
SHA256 f8615fd9987a5fc1f824ba2063aa9a3ea4b4d4c5ed0d2346f11b91df0475949c
MD5 7c7dee4de32bde5132bf79d2aa282c20
BLAKE2b-256 f72c4ad38ba732e37f28b6e90e965e9623f3e3015ee7725ceaaddde294678652

See more details on using hashes here.

File details

Details for the file hyperi_pylib-2.27.0-py3-none-any.whl.

File metadata

  • Download URL: hyperi_pylib-2.27.0-py3-none-any.whl
  • Upload date:
  • Size: 248.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for hyperi_pylib-2.27.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f0afa18652d54454a77ab6bda19c05a48dc4529fd3e414a3cf455095828b449d
MD5 9af620bbdfad02eb801070ac54573bf0
BLAKE2b-256 8a0f0a6bee4aa7fa551b992915b376b991787a9da03e293278ea67b72412ab68

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