Skip to main content

Microsoft Azure SDK for Python

This is the Microsoft Azure Edgeactions Management Client Library. This package has been tested with Python 3.10+. For a more complete view of Azure libraries, see the azure sdk python release.

Disclaimer

Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691

Getting started

Prerequisites

Install the package

pip install azure-mgmt-edgeactions
pip install azure-identity

Authentication

By default, Microsoft Entra token authentication depends on correct configuration of the following environment variables.

  • AZURE_CLIENT_ID for Azure client ID.
  • AZURE_TENANT_ID for Azure tenant ID.
  • AZURE_CLIENT_SECRET for Azure client secret.

In addition, Azure subscription ID can be configured via environment variable AZURE_SUBSCRIPTION_ID.

With above configuration, client can be authenticated by following code:

from azure.identity import DefaultAzureCredential
from azure.mgmt.edgeactions import EdgeActionsMgmtClient
import os

sub_id = os.getenv("AZURE_SUBSCRIPTION_ID")
client = EdgeActionsMgmtClient(credential=DefaultAzureCredential(), subscription_id=sub_id)

Examples

Code samples for this package can be found at:

Troubleshooting

Running contributor tests

Install the package and its test dependencies in a virtual environment, following the Python SDK testing guide. Run the following from sdk\edgeactions\azure-mgmt-edgeactions in PowerShell:

python -m pip install -r dev_requirements.txt
python -m pip install -e .
$env:AZURE_TEST_RUN_LIVE = "false"
python -m pytest tests -q

test_edgeactions_contract.py uses synthetic HTTP responses for both synchronous and asynchronous clients. It checks the stable API version, request bodies, paging, final response models, Azure-AsyncOperation polling through terminal status, Location result retrieval, and service-error propagation without Azure credentials, a test proxy, or cloud resources. These tests do not prove that the service accepts or rejects a request. test_lifecycle_helpers.py checks deterministic deployment payloads and cleanup ownership. test_recording_sanitizers.py checks redaction with a local test proxy, without Azure calls. The three lifecycle scenarios use recorded service responses in playback mode. Only the two generated resource-group listing smoke tests remain live-only and are skipped offline.

Lifecycle tests validate the HTTP final response as well as the SDK return value. For 201/202 long-running operations, they validate the supplied polling headers and recorded Azure-AsyncOperation responses. A 202 must expose a polling header; status polling must return HTTP 200 with a nonempty string status and reach Succeeded. The polling endpoint is not defined in the generated OpenAPI, so these checks use the documented ARM status envelope, not a resource schema or assumptions about provider-specific status fields. When Location is supplied on a 202, its final response is validated against the initiating operation's documented successful responses, not merely the GET contract of the URL the service returns. If ARM polling does not fetch that endpoint itself, the test issues a GET after completion to validate it; a successful poller alone is not sufficient. The PUT operations use Azure-AsyncOperation for completion; a 201 creation Location is not treated as a separate final-result contract. Typed results on all remaining paths are validated against the initiating operation's response schema, including synchronous HTTP 200 responses, PUTs starting with HTTP 201, and accepted operations without a Location header. These checks validate the actual final HTTP body, not just its deserialized SDK model.

Operation Expected final response
Create/update action, version, or execution filter Corresponding resource model, identity, expected fields, and Succeeded provisioning state
Deploy version code Full EdgeActionVersion, including nested deployment, validation, and default-version properties
Get version code VersionCode with a name and the expected code content
Swap default Spec: HTTP 204 with no body; known HTTP-200-with-body Location response temporarily exempted from schema validation; SDK result remains None
Delete action, version, or execution filter HTTP 200 or 204 with no body; SDK result is None

These expectations follow the 2026-10-01 service specification. tests/response_spec.json bundles the OpenAPI response schemas and referenced definitions from the commit pinned in tsp-location.yaml. tests/spec_validation.py checks documented status codes, body presence, required fields, nested types, and standard URI/date-time formats using test-only jsonschema dependencies. Schema validation does not replace the scenarios' resource-identity, state, and code-content assertions. Tests read the snapshot offline and reject stale source provenance. After changing the pinned specification or supported API version, refresh the snapshot explicitly from the package directory (this downloads the public spec):

python tests\spec_validation.py

The service has a known swap-default bug: its final Location returns HTTP 200 with an EdgeActionVersion body instead of the declared no-content result. Lifecycle validation temporarily exempts only that operation's HTTP-200-with-body final response, and logs when the exception is used. The initial response, polling envelope and successful completion, Location URL, SDK None result, and subsequent GET assertions that the default version changed are still checked. The swap exception does not relax other operations; a malformed 204 or an unsuccessful final response is not exempted. The generic validator defaults to strict validation, with a regression demonstrating the underlying swap mismatch. Remove the explicit exception after the service fix and refresh recordings normally; do not modify the captured responses or the pinned schemas to hide the bug.

Version creation has a second temporary exception: its HTTP 200/201 resource response may contain properties.validationStatus: null, although the pinned schema does not allow null. Lifecycle validation logs and ignores only that field's null-related schema errors for EdgeActionVersions_Create. All other fields, required properties, formats, headers, and SDK-result checks remain enabled. Non-null validation-status values and other operations remain strict, including the deployment checks that require validationStatus to be Succeeded. The response body and schema snapshot are not changed, and the generic validator is strict unless explicitly opted in. Remove this exception after the service fix and refresh recordings normally.

For persistent local configuration, use this package's .env.example file. Copy it to .env at the worktree root, or merge its settings into an existing .env without overwriting other configuration. From this package directory:

if (-not (Test-Path ..\..\..\.env)) {
    Copy-Item .\.env.example ..\..\..\.env
}

Replace the subscription placeholder before running live tests. The test setup loads .env automatically; variables already set in the shell take precedence. The example defaults to offline execution. Keep .env local and uncommitted.

Mode AZURE_TEST_RUN_LIVE AZURE_SKIP_LIVE_RECORDING
Record: call Azure and save HTTP recordings true false
Live: call Azure without saving recordings true true
Playback / offline: no Azure calls false Ignored

These are standard repository test settings, not EdgeActions-specific flags. AZURE_SKIP_LIVE_RECORDING is not a playback switch. Lifecycle playback requires usable recordings and fails if they are missing or do not match. No Python source edits are needed to switch modes. Offline unit tests use mocks and do not require recordings. If mode variables were set with PowerShell $env:..., remove those overrides or open a fresh terminal before relying on the values in .env.

test_edge_actions_mgmt_client_lifecycle_test.py contains live, recordable scenarios for tag replacement and clearing, invalid updates (including rejection of an empty PATCH body), version deployment and code retrieval (file and ZIP), default-version swaps, and execution-filter CRUD. They follow the Azure PowerShell EdgeAction scenarios, using the Python SDK test framework for authentication and resource ownership. The existing resource-group list smoke tests are also live-only. Live tests list only within the test resource group or a test-created action, not across the subscription. Subscription-wide listing and pagination are covered offline for both clients, so recordings do not capture EdgeActions from other resource groups in a shared subscription. Any separate live subscription-list check must run without recording or in an isolated test subscription.

Record and replay the lifecycle scenarios

Run both phases from sdk\edgeactions\azure-mgmt-edgeactions, with your virtual environment activated and using the same explicit test path. The examples use python from that environment, whether it is located at the package or worktree root.

First, remove/comment out AZURE_RESOURCEGROUP_NAME in the worktree-root .env to use fresh random groups. Select an authorized test subscription and account:

az login # Needed only if Azure CLI is not already signed in.
az account set --subscription "<test-subscription-id>"
if ($LASTEXITCODE -ne 0) { throw "Could not select the test subscription." }
$env:AZURE_SUBSCRIPTION_ID = az account show --query id -o tsv
if ($LASTEXITCODE -ne 0) { throw "Could not read the test subscription." }
$env:AZURE_TEST_USE_CLI_AUTH = "true"
$env:AZURE_TEST_USE_PWSH_AUTH = "false"
$env:AZURE_TEST_USE_AZD_AUTH = "false"
Remove-Item Env:AZURE_RESOURCEGROUP_NAME -ErrorAction SilentlyContinue

# Record: calls Azure, saves sanitized recordings, and attempts resource cleanup.
$env:AZURE_TEST_RUN_LIVE = "true"
$env:AZURE_SKIP_LIVE_RECORDING = "false"
python -m pytest tests\test_edge_actions_mgmt_client_lifecycle_test.py -v -s
if ($LASTEXITCODE -ne 0) { throw "Recording failed; resolve the failure before playback." }

Expect three passing scenarios. Then replay those same scenarios without contacting Azure:

$env:AZURE_TEST_RUN_LIVE = "false"
python -m pytest tests\test_edge_actions_mgmt_client_lifecycle_test.py -v -s
if ($LASTEXITCODE -ne 0) { throw "Playback failed; inspect the recording mismatch." }

# Optional broader check: includes lifecycle playback and all offline unit tests.
python -m pytest tests -q

Playback should report three passed lifecycle tests, not skipped. tests selects the contributor suite; the explicit lifecycle filename selects only those three scenarios. Always supply a test path: omitting it (including through an unset PowerShell variable) also discovers the separate generated_tests directory. -q, -v, and -s change console output, not recording mode. For streamed INFO logs, add --log-cli-level=INFO. Console logs are not sanitized by recording sanitizers. Keep AZURE_TEST_RUN_LIVE=false for ordinary offline development.

Alternatively, use the signed-in Azure PowerShell account with AZURE_TEST_USE_PWSH_AUTH=true and set AZURE_SUBSCRIPTION_ID to its selected test subscription. Service-principal authentication uses the standard AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET variables. Do not commit credentials.

The account needs permission to create/delete resource groups and manage Microsoft.Cdn/edgeActions. The subscription must support EdgeActions. New lifecycle test resource groups are in eastus and follow the standard framework naming convention rgpy-pythonsdk-edgeaction-test-<random suffix>. The same prefix is used by the sync/async resource-group listing smoke tests. Leave AZURE_RESOURCEGROUP_NAME unset for a fresh group per scenario. EdgeAction names use eapython<test-derived suffix>: the framework generates distinct names for different scenarios and repeats each name for playback. The fresh resource group isolates repeated live runs; names are not replaced wholesale with Sanitized. Renaming a scenario or its test module changes the generated resource name and requires fresh recordings.

EdgeActions use the Standard SKU; EdgeActions and their children use global. The framework tags temporary groups and initiates their deletion after each scenario. Scenario cleanup waits for deletion of its EdgeAction and children.

Optionally, reuse an existing dedicated test group. For example, if you have created a group named edgeaction-pythonsdk-tests-rg, set AZURE_RESOURCEGROUP_NAME=edgeaction-pythonsdk-tests-rg in your local .env. This name is only an example, not a default or a group the tests create automatically. The framework does not create or delete a supplied group; the scenarios still create and delete their own eapython... actions within it. Leave this variable unset for isolated groups. Never point these tests at a production group.

The proxy starts automatically when recording or replaying. Re-record after changes that affect requests or expected service responses. Older captures made before the playback-safe sanitizer setup may have lost resource names/IDs or Location paths; replace those captures with a live recording rather than guessing the erased values.

Following the existing Network management tests, package setup preserves Location headers and resource names; it also preserves resource IDs, as the JavaScript EdgeActions tests and the .NET/Java ARM frameworks do. Shared Python setup already preserves operation-location. Only the overly broad defaults for those fields are disabled, not the credential sanitizers.

Package sanitizers in tests/conftest.py replace the t, c, s, and h polling-query values in URLs, headers, and bodies, along with unnecessary trace-header values. Configured identity and credential values are matched literally, including secrets containing regex metacharacters. Cookies, OAuth token fields, and systemData creator/modifier identities are also sanitized. Polling operation paths/IDs, API versions, and functional test payloads are preserved for reliable playback. These rules are not a blanket guarantee that every future response is safe to publish: review new recording fields before sharing them.

Recordings are stored in Azure/azure-sdk-assets; this package's assets.json pins the published recording set. Playback automatically fetches that set into the worktree-root .assets cache when needed. An initial download requires network access, but playback does not call Azure.

After a successful live recording, review the updated recordings in the cache and follow the testing guide's recording update instructions. From the package directory, publish the recordings with:

python ..\..\..\scripts\manage_recordings.py push -p assets.json

Commit the updated assets.json pointer, not recording JSON files under tests.

Next steps

Provide Feedback

If you encounter any bugs or have suggestions, please file an issue in the Issues section of the project.

Release History

1.0.0 (2026-10-16)

Breaking Changes

  • Python 3.9 is no longer supported. Python 3.10 or later is required.
  • Method EdgeActionVersionsOperations.begin_deploy_version_code changed return type from AsyncLROPoller[EdgeActionVersionProperties] to AsyncLROPoller[EdgeActionVersion]
  • Method EdgeActionVersionsOperations.begin_deploy_version_code changed return type from LROPoller[EdgeActionVersionProperties] to LROPoller[EdgeActionVersion]

Other Changes

  • First stable release, using API version 2026-10-01.

1.0.0b1 (2026-02-10)

Other Changes

  • Initial version

Metadata

Release files for azure-mgmt-edgeactions 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for azure-mgmt-edgeactions 1.0.0
File Size Uploaded Provenance
azure_mgmt_edgeactions-1.0.0.tar.gz 106.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for azure-mgmt-edgeactions 1.0.0
File Interpreter ABI Platform
azure_mgmt_edgeactions-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 193.1 kB

Release files / azure_mgmt_edgeactions-1.0.0.tar.gz

Download URL azure_mgmt_edgeactions-1.0.0.tar.gz
Size 106.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4e92aaab591dad6fcca74e41dcb65a0dda196e1260e6eb265135c1d220ac151a
BLAKE2b-256 checksum
How to use checksums
33cb55ab332f13953aa54afe82d5e24d554adc6e8f3621246c234815e8a6fa92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via RestSharp/106.13.0.0

Release files / azure_mgmt_edgeactions-1.0.0-py3-none-any.whl

Download URL azure_mgmt_edgeactions-1.0.0-py3-none-any.whl
Size 86.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
588a9f3fe441b191fa0f9e6c58567b0ace0c7d61c07316c15324802b52385f36
BLAKE2b-256 checksum
How to use checksums
a5b48e27dea9fa2ba9c1e1e46ba84816a03986bc1212ed9f2bd7357d67f0840f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via RestSharp/106.13.0.0

Security for azure-mgmt-edgeactions 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page