mcpField
A
azure-appconfiguration-py

azure-appconfiguration-py

github.com/sickn33Cloud & DevOps48.7k65 installsUpdated today
Repository

About azure-appconfiguration-py

azure-appconfiguration-py is a Python SDK for managing centralized application settings and feature flags in Azure App Configuration. It supports labeled and filtered settings, read-only controls, snapshots, and synchronous or asynchronous clients for application developers.

Key features

  1. 01Read and update configuration settings
  2. 02Filter settings by key or label
  3. 03Manage feature flags
  4. 04Set settings to read-only
  5. 05Create and list snapshots
  6. 06Sync and async clients

Use cases

  1. 01Separating settings by environment labels
  2. 02Retrieving a subset of application settings
  3. 03Managing feature flag state
  4. 04Capturing configuration snapshots before deployments

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-appconfiguration-py

After installing, type/azure-appconfiguration-pyin Claude Code to confirm it loaded.

Details

From the project README

Azure App Configuration SDK for Python

Centralized configuration management with feature flags and dynamic settings.

Installation

pip install azure-appconfiguration

Environment Variables

AZURE_APPCONFIGURATION_CONNECTION_STRING=Endpoint=https://<name>.azconfig.io;Id=...;Secret=...
# Or for Entra ID:
AZURE_APPCONFIGURATION_ENDPOINT=https://<name>.azconfig.io

Authentication

Connection String
import os
from azure.appconfiguration import AzureAppConfigurationClient

client = AzureAppConfigurationClient.from_connection_string(
    os.environ["AZURE_APPCONFIGURATION_CONNECTION_STRING"]
)
Entra ID
from azure.appconfiguration import AzureAppConfigurationClient
from azure.identity import DefaultAzureCredential

client = AzureAppConfigurationClient(
    base_url=os.environ["AZURE_APPCONFIGURATION_ENDPOINT"],
    credential=DefaultAzureCredential()
)

Examples are independent fragments requiring azure-identity for Entra auth and project endpoint variables. Confirm store/label/key and read the current ETag before replacement/deletion; use appropriate match conditions for concurrent edits. Feature flag changes affect real users, and unlocking a setting is a separate privileged change. Use approved synthetic values, minimize listing scope, keep credentials/value payloads out of logs, and close both async credential/client on failure. Snapshots need actual creation status and tested restore procedure; schema-valid flags do not themselves implement gradual rollout or an A/B experiment.

Configuration Settings

Get Setting
setting = client.get_configuration_setting(key="app:settings:message")
print(f"Read setting: {setting.key}")  # Do not log secret-bearing values
Get with Label
# Labels allow environment-specific values
setting = client.get_configuration_setting(
    key="app:settings:message",
    label="production"
)
Set Setting
from azure.appconfiguration import ConfigurationSetting

setting = ConfigurationSetting(
    key="app:settings:message",
    value="Hello, World!",
    label="development",
    content_type="text/plain",
    tags={"environment": "dev"}
)

client.set_configuration_setting(setting)
Delete Setting
client.delete_configuration_setting(
    key="app:settings:message",
    label="development"
)

List Settings

All Settings
settings = client.list_configuration_settings()
for setting in settings:
    print(f"{setting.key} [{setting.label}]")  # Values may be sensitive
Filter by Key Prefix
settings = client.list_configuration_settings(
    key_filter="app:settings:*"
)
Filter by Label
settings = client.list_configuration_settings(
    label_filter="production"
)

Feature Flags

Set Feature Flag
from azure.appconfiguration import ConfigurationSetting
import json

feature_flag = ConfigurationSetting(
    key=".appconfig.featureflag/beta-feature",
    value=json.dumps({
        "id": "beta-feature",
        "enabled": True,
        "conditions": {
            "client_filters": []
        }
    }),
    content_type="application/vnd.microsoft.appconfig.ff+json;charset=utf-8"
)

client.set_configuration_setting(feature_flag)
Get Feature Flag
setting = client.get_configuration_setting(
    key=".appconfig.featureflag/beta-feature"
)
flag_data = json.loads(setting.value)
print(f"Feature enabled: {flag_data['enabled']}")
List Feature Flags
flags = client.list_configuration_settings(
    key_filter=".appconfig.featureflag/*"
)
for flag in flags:
    data = json.loads(flag.value)
    print(f"{data['id']}: {'enabled' if data['enabled'] else 'disabled'}")

Read-Only Settings

# Make setting read-only
client.set_read_only(
    configuration_setting=setting,
    read_only=True
)

# Remove read-only
client.set_read_only(
    configuration_setting=setting,
    read_only=False
)

Snapshots

Create Snapshot
from azure.appconfiguration import ConfigurationSnapshot, ConfigurationSettingsFilter

snapshot = ConfigurationSnapshot(
    filters=[
        ConfigurationSettingsFilter(key="app:*", label="production")
    ]
)

created = client.begin_create_snapshot(
    name="v1-snapshot",
    filters=snapshot.filters
).result()
List Snapshot Settings
settings = client.list_configuration_settings(
    snapshot_name="v1-snapshot"
)

Async Client

from azure.appconfiguration.aio import AzureAppConfigurationClient
from azure.identity.aio import DefaultAzureCredential

async def main():
    credential = DefaultAzureCredential()
    client = AzureAppConfigurationClient(
        base_url=endpoint,
        credential=credential
    )
    
    setting = await client.get_configuration_setting(key="app:message")
    # Consume the authorized value without logging it.
    
    await client.close()
    await credential.close()

Client Operations

OperationDescription
get_configuration_settingGet single setting
set_configuration_settingCreate or update setting
delete_configuration_settingDelete setting
list_configuration_settingsList with filters
set_read_onlyLock/unlock setting
begin_create_snapshotCreate point-in-time snapshot
list_snapshotsList all snapshots

Best Practices

  1. Use labels for environment separation (dev, staging, prod)
  2. Use key prefixes for logical grouping (app:database:, app:cache:)
  3. Make production settings read-only to prevent accidental changes
  4. Create snapshots before deployments for rollback capability
  5. Use Entra ID instead of connection strings in production
  6. Refresh settings periodically in long-running applications
  7. Use feature flags for gradual rollouts and A/B testing

When to Use

This skill is applicable to execute the workflow or actions described in the overview.

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Comments

Markdown supported