Skip to main content

OpenFeature provider for Quonfig — Python server-side SDK

Project description

quonfig-openfeature

OpenFeature provider for Quonfig -- Python server-side SDK.

This package wraps the quonfig native SDK and implements the OpenFeature Python server-side AbstractProvider interface.

Install

pip install quonfig-openfeature quonfig openfeature-sdk

Usage

from openfeature import api
from openfeature.evaluation_context import EvaluationContext
from quonfig_openfeature import QuonfigProvider

provider = QuonfigProvider(
    sdk_key="qf_sk_production_...",
    # targeting_key_mapping="user.id",  # default
)

api.set_provider(provider)
client = api.get_client()

# Boolean flag
enabled = client.get_boolean_value("my-feature", False)

# String config
welcome = client.get_string_value("welcome-message", "Hello!")

# Number config
timeout_ms = client.get_integer_value("request-timeout-ms", 5000)

# Object config (JSON or string_list)
allowed_plans = client.get_object_value("allowed-plans", [])

# With evaluation context (per-request)
is_pro = client.get_boolean_value(
    "pro-feature",
    False,
    EvaluationContext(
        targeting_key="user-123",          # maps to user.id by default
        attributes={
            "user.plan": "pro",
            "org.tier": "enterprise",
        },
    ),
)

Context mapping

OpenFeature context is flat; Quonfig context is nested by namespace. This provider maps between them using dot-notation:

OpenFeature context key Quonfig namespace Quonfig property
targeting_key user id (configurable via targeting_key_mapping)
"user.email" user email
"org.tier" org tier
"country" (no dot) "" (default) country
"user.ip.address" user ip.address (first dot only)

Customizing targeting_key mapping

provider = QuonfigProvider(
    sdk_key="qf_sk_...",
    targeting_key_mapping="account.id",  # maps targeting_key to {account: {id: ...}}
)

Accessing native SDK features

The get_client() escape hatch returns the underlying quonfig.Quonfig client for features not available in OpenFeature:

native = provider.get_client()

# Log level integration
should_log = native.should_log(
    config_key="log-level.auth",
    desired_level="DEBUG",
    contexts={"user": {"id": "user-123"}},
)

# List all config keys
keys = native.keys()

What you lose vs. the native SDK

OpenFeature is designed for feature flags, not general configuration. Some Quonfig features require the native quonfig SDK:

  1. Log levels -- should_log() is native-only.
  2. string_list configs -- accessed via get_object_value(), returned as a Python list[str].
  3. duration configs -- return the raw float seconds via get_float_value() (or use get_duration() natively).
  4. bytes configs -- not accessible via OpenFeature (no binary type in OF).
  5. keys() and raw config access -- native-only via get_client().
  6. Context keys use dot-notation -- "user.email", not nested objects.
  7. targeting_key maps to user.id by default -- configure targeting_key_mapping if different.

Configuration changed events

The provider extends OpenFeature's AbstractProvider, so you can register event handlers via the standard api if you want to know when configs update. The native quonfig SDK pushes live updates over SSE; surfacing those as PROVIDER_CONFIGURATION_CHANGED events is on the roadmap.

Development

poetry install
poetry run ruff check .
poetry run pytest -v

The package depends on the local sibling sdk-python/ repo via a Poetry path dependency; CI checks that out as a sibling directory and installs the same way.

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

quonfig_openfeature-0.0.9.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

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

quonfig_openfeature-0.0.9-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file quonfig_openfeature-0.0.9.tar.gz.

File metadata

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

File hashes

Hashes for quonfig_openfeature-0.0.9.tar.gz
Algorithm Hash digest
SHA256 aec86677668e8dabbe6d6d69b6f5ffb256fe43f7cfbc37258012c3a03a6ec1e3
MD5 3d4216334a1683d4e46d74ad45951d50
BLAKE2b-256 a4ae55355efd265a67fdbf2280182f1e15c0d4e98852ef854dd850c373f73ac3

See more details on using hashes here.

Provenance

The following attestation bundles were made for quonfig_openfeature-0.0.9.tar.gz:

Publisher: release.yaml on quonfig/openfeature-python

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

File details

Details for the file quonfig_openfeature-0.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for quonfig_openfeature-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 ad0f3df77d5261f1241d66e57670839928ae7b9fa19e41ca2678f48025eb8068
MD5 09d43d9d959fa008d6f5e68fcb913c22
BLAKE2b-256 f242e5db0451832cd02fb86eb4f1c823106880fe5ec0cdbe4af919bd3a5465f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for quonfig_openfeature-0.0.9-py3-none-any.whl:

Publisher: release.yaml on quonfig/openfeature-python

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