# Azure AI Foundry Workflow Helpers
Utilities for exporting (downloading) and importing (creating/updating) Azure AI Foundry Agents along with dependency awareness, normalization, and consistent logging.
## 🚀 Quick Start
### 1. Set Environment Variables
```bash
export AZURE_TENANT_ID='your-tenant-id-here'
export PROJECT_ENDPOINT='your-ai-foundry-endpoint-here'
```
**Example:**
```bash
export AZURE_TENANT_ID='aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
export PROJECT_ENDPOINT='https://your-resource.services.ai.azure.com/api/projects/your-project'
```
> **Note:** You can also provide these values via CLI parameters (`--azure-tenant-id` and `--project-endpoint`) which will take precedence over environment variables.
### 2. Install the Package
For development (editable install):
```bash
pip install -e .
```
Or for production:
```bash
pip install .
```
This will install all required dependencies automatically.
### 3. Using the CLI (Recommended)
The CLI is available as a console script after installation.
```bash
aif-workflow-helper --download-all-agents --agents-dir agents
```
Common examples:
```bash
# Download all agents with optional prefix/suffix filtering
aif-workflow-helper --download-all-agents --prefix dev- --suffix -v1
# Download a single agent
aif-workflow-helper --download-agent my_agent
# Upload all agents from JSON definitions in a directory
aif-workflow-helper --upload-all-agents --agents-dir agents
# Upload a single agent definition file
aif-workflow-helper --upload-agent my_agent --agents-dir agents
# Download agents in different formats
aif-workflow-helper --download-all-agents --format json # Default
aif-workflow-helper --download-all-agents --format yaml # YAML format
aif-workflow-helper --download-all-agents --format md # Markdown with frontmatter
# Upload agents from different formats
aif-workflow-helper --upload-all-agents --format yaml
aif-workflow-helper --upload-agent my_agent --format md
# Change log level
aif-workflow-helper --download-all-agents --log-level DEBUG
# Override environment variables with CLI parameters
aif-workflow-helper --download-all-agents \
--azure-tenant-id "your-tenant-id" \
--project-endpoint "https://your-endpoint.services.ai.azure.com/api/projects/your-project"
# Mix CLI parameters with environment variables (CLI takes precedence)
export AZURE_TENANT_ID="env-tenant-id"
aif-workflow-helper --download-all-agents --azure-tenant-id "cli-tenant-id" # Uses CLI value
```
### 4. Direct Library Usage
You can import and compose the underlying functions directly:
```python
from aif_workflow_helpers import (
configure_logging,
download_agents,
download_agent,
create_or_update_agents,
create_or_update_agent,
create_or_update_agent_from_file,
create_or_update_agents_from_files,
)
from azure.ai.agents import AgentsClient
from azure.identity import DefaultAzureCredential
configure_logging()
client = AgentsClient(
credential=DefaultAzureCredential(
exclude_interactive_browser_credential=False,
interactive_tenant_id="your-tenant-id"
),
endpoint="your-endpoint"
)
# Bulk download
download_agents(client, file_path="./agents", prefix="", suffix="", format="json")
# Create/update from a directory (dependency ordered)
create_or_update_agents_from_files(path="./agents", agent_client=client, prefix="", suffix="", format="json")
```
## 📁 What the Tooling Does
1. Downloads existing agents to normalized files (JSON, YAML, or Markdown with frontmatter)
2. Normalizes (generalizes) definitions for portability (removes resource-specific fields)
3. Infers and resolves inter-agent dependencies (connected agent tools)
4. Creates or updates agents in dependency-safe order
5. Applies optional prefix/suffix for environment namespacing
6. Supports multiple file formats for flexible workflow integration
## 🔧 Core Functions
### Download Functions
- `download_agents(agent_client, file_path, prefix, suffix, format)` – Download and generalize all agents (optional prefix/suffix filters, format selection)
- `download_agent(agent_name, agent_client, file_path, prefix, suffix, format)` – Download and generalize a single agent
- `generalize_agent_dict(data, agent_client, prefix, suffix)` – Normalize agent JSON for portability
### Upload Functions
- `create_or_update_agent(agent_data, agent_client, existing_agents, prefix, suffix)` – Upsert a single agent object
- `create_or_update_agents(agents_data, agent_client, prefix, suffix)` – Upsert multiple agents with dependency ordering
- `create_or_update_agent_from_file(agent_name, path, agent_client, prefix, suffix, format)` – Upsert from a specific file
- `create_or_update_agents_from_files(path, agent_client, prefix, suffix, format)` – Bulk load and upsert directory
### Internal Helpers (Not all re-exported)
- `read_agent_file(path)` / `read_agent_files(path, format)` – Load definitions in any supported format (used internally by *from_files* wrappers)
- `extract_dependencies(agents_data)` – Build dependency graph
- `dependency_sort(agents_data)` – Topological sort of agents
- `get_agent_by_name(name, client)` – Lookup agent object
- `get_agent_name(agent_id, client)` – Reverse lookup by ID
## 🎯 CLI Reference
`aif-workflow-helper` arguments:
```text
--agents-dir DIR Directory for agent definition files (default: agents)
--download-all-agents Download all existing agents
--download-agent NAME Download a single agent by name
--upload-all-agents Create/update all agents from definition files
--upload-agent NAME Create/update a single agent from definition file
--prefix TEXT Optional prefix applied during download/upload
--suffix TEXT Optional suffix applied during download/upload
--format FORMAT File format: json, yaml, or md (default: json)
--log-level LEVEL Logging level (CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET)
--azure-tenant-id TENANT_ID Azure tenant ID (overrides AZURE_TENANT_ID environment variable)
--project-endpoint ENDPOINT AI Foundry project endpoint URL (overrides PROJECT_ENDPOINT environment variable)
```
### Authentication Priority
1. **CLI Parameters** (highest priority): `--azure-tenant-id` and `--project-endpoint`
2. **Environment Variables** (fallback): `AZURE_TENANT_ID` and `PROJECT_ENDPOINT`
## 📄 Supported File Formats
The tool supports three file formats for agent definitions:
### JSON Format (Default)
Standard JSON format with all agent properties in a single object:
```json
{
"name": "my-agent",
"model": "gpt-4",
"instructions": "You are a helpful AI assistant...",
"tools": [],
"temperature": 0.7,
"top_p": 1.0
}
```
### YAML Format
Clean YAML format for better readability:
```yaml
name: my-agent
model: gpt-4
instructions: |
You are a helpful AI assistant.
Please provide clear and concise responses.
tools: []
temperature: 0.7
top_p: 1.0
```
### Markdown with Frontmatter
Markdown format where the `instructions` field becomes the content and all other properties go into YAML frontmatter:
```markdown
---
name: my-agent
model: gpt-4
tools: []
temperature: 0.7
top_p: 1.0
---
You are a helpful AI assistant.
Please provide clear and concise responses to user questions.
```
**File Extensions:**
- JSON: `.json`
- YAML: `.yaml` or `.yml`
- Markdown: `.md`
## 📋 File Structure
```text
├── pyproject.toml # Package configuration and dependencies
├── requirements.txt # Core runtime dependencies
├── README.md # Project documentation
├── agents/ # Agent definition files
├── tests/ # Test files
└── src/aif_workflow_helpers/ # Main package source code
├── __init__.py # Public exports
├── cli/
│ └── main.py # CLI entrypoint
├── core/
│ ├── upload.py # Upload + dependency logic
│ ├── download.py # Download + generalization logic
│ └── formats.py # Format handling utilities
└── utils/
├── logging.py # Shared logging configuration
└── validation.py # Agent name validation
```
## ⚠️ Important Notes
1. **Authentication**: Uses `DefaultAzureCredential` (interactive fallback enabled)
2. **Dependency Ordering**: Creates/updates in safe order via topological sort
3. **Name Safety**: Validation ensures only alphanumerics + hyphens (prefix/suffix applied consistently)
4. **Logging**: Centralized configurable logger (`configure_logging`)
5. **Efficiency**: Minimizes duplicate lookups by caching existing agents during batch operations
6. **Format Flexibility**: Supports JSON, YAML, and Markdown with frontmatter for different workflow preferences
## 🔍 Troubleshooting
### Installation Issues
```bash
# Install in development mode for local changes
pip install -e .
# Or install for production use
pip install .
```
### Authentication Errors
```bash
# Check environment variables
echo $AZURE_TENANT_ID
echo $PROJECT_ENDPOINT
# Or use CLI parameters (recommended for CI/CD or when environment variables conflict)
aif-workflow-helper --download-all-agents \
--azure-tenant-id "your-tenant-id" \
--project-endpoint "your-endpoint"
# Try interactive login
az login --tenant $AZURE_TENANT_ID
```
### Command Not Found Error
If `aif-workflow-helper` is not found after installation:
```bash
# Make sure you installed the package
pip install -e .
# Check if it's in your PATH
which aif-workflow-helper
# Or run directly with Python
python -m aif_workflow_helpers.cli.main --help
```
## 🎉 Success Output
Typical successful run output (truncated example):
```text
🔌 Testing connection...
✅ Connected! Found X existing agents
📥 Downloading agents...
Saved agent 'agent-name' to agent-name.json
📂 Reading agent files...
Found X agents
🚀 Creating/updating agents...
Processing 1/X: agent-name
✅ Successfully processed agent-name
```
## 🔄 CI/CD Pipeline
This project includes a comprehensive CI/CD pipeline using GitHub Actions that ensures code quality and functionality.
### Pipeline Features
- **Multi-Python Version Testing**: Tests on Python 3.10, 3.11, and 3.12
- **Automated Testing**: Runs all pytest tests with coverage reporting
- **Code Quality**: Includes linting with flake8
- **Package Testing**: Verifies the package can be built and installed correctly
- **CLI Testing**: Ensures the command-line interface works after installation
### Branch Protection
The main branch is protected with the following requirements:
- ✅ **Pull Request Required**: Direct pushes to main are not allowed
- ✅ **Tests Must Pass**: All CI checks must pass before merging
- ✅ **Code Review**: At least 1 approval required
- ✅ **Up-to-date Branch**: Branches must be current with main
### Running Tests Locally
Before submitting a PR, run tests locally to ensure they pass:
```bash
# Activate virtual environment
source .venv/bin/activate
# Install with dev dependencies
pip install -e .[dev]
# Run tests
pytest tests/ -v --tb=short
# Run with coverage
pytest tests/ -v --cov=src --cov-report=term-missing
# Check CLI functionality
aif-workflow-helper --help
```
### Contributing
1. Create a feature branch from `main`
2. Make your changes
3. Ensure all tests pass locally
4. Submit a pull request
5. Wait for CI to pass and get code review approval
6. Merge when approved
Raw data
{
"_id": null,
"home_page": null,
"name": "aif-workflow-helper",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "azure, ai, agents, workflow, automation",
"author": "Pete Roden",
"author_email": "Pete Roden <pete.roden@live.com>",
"download_url": "https://files.pythonhosted.org/packages/cb/75/c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855/aif_workflow_helper-0.1.1.tar.gz",
"platform": null,
"description": "# Azure AI Foundry Workflow Helpers\n\nUtilities for exporting (downloading) and importing (creating/updating) Azure AI Foundry Agents along with dependency awareness, normalization, and consistent logging.\n\n## \ud83d\ude80 Quick Start\n\n### 1. Set Environment Variables\n\n```bash\nexport AZURE_TENANT_ID='your-tenant-id-here'\nexport PROJECT_ENDPOINT='your-ai-foundry-endpoint-here'\n```\n\n**Example:**\n\n```bash\nexport AZURE_TENANT_ID='aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'\nexport PROJECT_ENDPOINT='https://your-resource.services.ai.azure.com/api/projects/your-project'\n```\n\n> **Note:** You can also provide these values via CLI parameters (`--azure-tenant-id` and `--project-endpoint`) which will take precedence over environment variables.\n\n### 2. Install the Package\n\nFor development (editable install):\n\n```bash\npip install -e .\n```\n\nOr for production:\n\n```bash\npip install .\n```\n\nThis will install all required dependencies automatically.\n\n### 3. Using the CLI (Recommended)\n\nThe CLI is available as a console script after installation.\n\n```bash\naif-workflow-helper --download-all-agents --agents-dir agents\n```\n\nCommon examples:\n\n```bash\n# Download all agents with optional prefix/suffix filtering\naif-workflow-helper --download-all-agents --prefix dev- --suffix -v1\n\n# Download a single agent\naif-workflow-helper --download-agent my_agent\n\n# Upload all agents from JSON definitions in a directory\naif-workflow-helper --upload-all-agents --agents-dir agents\n\n# Upload a single agent definition file\naif-workflow-helper --upload-agent my_agent --agents-dir agents\n\n# Download agents in different formats\naif-workflow-helper --download-all-agents --format json # Default\naif-workflow-helper --download-all-agents --format yaml # YAML format\naif-workflow-helper --download-all-agents --format md # Markdown with frontmatter\n\n# Upload agents from different formats\naif-workflow-helper --upload-all-agents --format yaml\naif-workflow-helper --upload-agent my_agent --format md\n\n# Change log level\naif-workflow-helper --download-all-agents --log-level DEBUG\n\n# Override environment variables with CLI parameters\naif-workflow-helper --download-all-agents \\\n --azure-tenant-id \"your-tenant-id\" \\\n --project-endpoint \"https://your-endpoint.services.ai.azure.com/api/projects/your-project\"\n\n# Mix CLI parameters with environment variables (CLI takes precedence)\nexport AZURE_TENANT_ID=\"env-tenant-id\"\naif-workflow-helper --download-all-agents --azure-tenant-id \"cli-tenant-id\" # Uses CLI value\n```\n\n### 4. Direct Library Usage\n\nYou can import and compose the underlying functions directly:\n\n```python\nfrom aif_workflow_helpers import (\n configure_logging,\n download_agents,\n download_agent,\n create_or_update_agents,\n create_or_update_agent,\n create_or_update_agent_from_file,\n create_or_update_agents_from_files,\n)\nfrom azure.ai.agents import AgentsClient\nfrom azure.identity import DefaultAzureCredential\n\nconfigure_logging()\n\nclient = AgentsClient(\n credential=DefaultAzureCredential(\n exclude_interactive_browser_credential=False,\n interactive_tenant_id=\"your-tenant-id\"\n ),\n endpoint=\"your-endpoint\"\n)\n\n# Bulk download\ndownload_agents(client, file_path=\"./agents\", prefix=\"\", suffix=\"\", format=\"json\")\n\n# Create/update from a directory (dependency ordered)\ncreate_or_update_agents_from_files(path=\"./agents\", agent_client=client, prefix=\"\", suffix=\"\", format=\"json\")\n```\n\n## \ud83d\udcc1 What the Tooling Does\n\n1. Downloads existing agents to normalized files (JSON, YAML, or Markdown with frontmatter)\n2. Normalizes (generalizes) definitions for portability (removes resource-specific fields)\n3. Infers and resolves inter-agent dependencies (connected agent tools)\n4. Creates or updates agents in dependency-safe order\n5. Applies optional prefix/suffix for environment namespacing\n6. Supports multiple file formats for flexible workflow integration\n\n## \ud83d\udd27 Core Functions\n\n### Download Functions\n\n- `download_agents(agent_client, file_path, prefix, suffix, format)` \u2013 Download and generalize all agents (optional prefix/suffix filters, format selection)\n- `download_agent(agent_name, agent_client, file_path, prefix, suffix, format)` \u2013 Download and generalize a single agent\n- `generalize_agent_dict(data, agent_client, prefix, suffix)` \u2013 Normalize agent JSON for portability\n\n### Upload Functions\n\n- `create_or_update_agent(agent_data, agent_client, existing_agents, prefix, suffix)` \u2013 Upsert a single agent object\n- `create_or_update_agents(agents_data, agent_client, prefix, suffix)` \u2013 Upsert multiple agents with dependency ordering\n- `create_or_update_agent_from_file(agent_name, path, agent_client, prefix, suffix, format)` \u2013 Upsert from a specific file\n- `create_or_update_agents_from_files(path, agent_client, prefix, suffix, format)` \u2013 Bulk load and upsert directory\n\n### Internal Helpers (Not all re-exported)\n\n- `read_agent_file(path)` / `read_agent_files(path, format)` \u2013 Load definitions in any supported format (used internally by *from_files* wrappers)\n- `extract_dependencies(agents_data)` \u2013 Build dependency graph\n- `dependency_sort(agents_data)` \u2013 Topological sort of agents\n- `get_agent_by_name(name, client)` \u2013 Lookup agent object\n- `get_agent_name(agent_id, client)` \u2013 Reverse lookup by ID\n\n## \ud83c\udfaf CLI Reference\n\n`aif-workflow-helper` arguments:\n\n```text\n--agents-dir DIR Directory for agent definition files (default: agents)\n--download-all-agents Download all existing agents\n--download-agent NAME Download a single agent by name\n--upload-all-agents Create/update all agents from definition files\n--upload-agent NAME Create/update a single agent from definition file\n--prefix TEXT Optional prefix applied during download/upload\n--suffix TEXT Optional suffix applied during download/upload\n--format FORMAT File format: json, yaml, or md (default: json)\n--log-level LEVEL Logging level (CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET)\n--azure-tenant-id TENANT_ID Azure tenant ID (overrides AZURE_TENANT_ID environment variable)\n--project-endpoint ENDPOINT AI Foundry project endpoint URL (overrides PROJECT_ENDPOINT environment variable)\n```\n\n### Authentication Priority\n\n1. **CLI Parameters** (highest priority): `--azure-tenant-id` and `--project-endpoint`\n2. **Environment Variables** (fallback): `AZURE_TENANT_ID` and `PROJECT_ENDPOINT`\n\n## \ud83d\udcc4 Supported File Formats\n\nThe tool supports three file formats for agent definitions:\n\n### JSON Format (Default)\n\nStandard JSON format with all agent properties in a single object:\n\n```json\n{\n \"name\": \"my-agent\",\n \"model\": \"gpt-4\",\n \"instructions\": \"You are a helpful AI assistant...\",\n \"tools\": [],\n \"temperature\": 0.7,\n \"top_p\": 1.0\n}\n```\n\n### YAML Format\n\nClean YAML format for better readability:\n\n```yaml\nname: my-agent\nmodel: gpt-4\ninstructions: |\n You are a helpful AI assistant.\n Please provide clear and concise responses.\ntools: []\ntemperature: 0.7\ntop_p: 1.0\n```\n\n### Markdown with Frontmatter\n\nMarkdown format where the `instructions` field becomes the content and all other properties go into YAML frontmatter:\n\n```markdown\n---\nname: my-agent\nmodel: gpt-4\ntools: []\ntemperature: 0.7\ntop_p: 1.0\n---\nYou are a helpful AI assistant.\n\nPlease provide clear and concise responses to user questions.\n```\n\n**File Extensions:**\n\n- JSON: `.json`\n- YAML: `.yaml` or `.yml`\n- Markdown: `.md`\n\n## \ud83d\udccb File Structure\n\n```text\n\u251c\u2500\u2500 pyproject.toml # Package configuration and dependencies\n\u251c\u2500\u2500 requirements.txt # Core runtime dependencies\n\u251c\u2500\u2500 README.md # Project documentation\n\u251c\u2500\u2500 agents/ # Agent definition files\n\u251c\u2500\u2500 tests/ # Test files\n\u2514\u2500\u2500 src/aif_workflow_helpers/ # Main package source code\n \u251c\u2500\u2500 __init__.py # Public exports\n \u251c\u2500\u2500 cli/\n \u2502 \u2514\u2500\u2500 main.py # CLI entrypoint\n \u251c\u2500\u2500 core/\n \u2502 \u251c\u2500\u2500 upload.py # Upload + dependency logic\n \u2502 \u251c\u2500\u2500 download.py # Download + generalization logic\n \u2502 \u2514\u2500\u2500 formats.py # Format handling utilities\n \u2514\u2500\u2500 utils/\n \u251c\u2500\u2500 logging.py # Shared logging configuration\n \u2514\u2500\u2500 validation.py # Agent name validation\n```\n\n## \u26a0\ufe0f Important Notes\n\n1. **Authentication**: Uses `DefaultAzureCredential` (interactive fallback enabled)\n2. **Dependency Ordering**: Creates/updates in safe order via topological sort\n3. **Name Safety**: Validation ensures only alphanumerics + hyphens (prefix/suffix applied consistently)\n4. **Logging**: Centralized configurable logger (`configure_logging`)\n5. **Efficiency**: Minimizes duplicate lookups by caching existing agents during batch operations\n6. **Format Flexibility**: Supports JSON, YAML, and Markdown with frontmatter for different workflow preferences\n\n## \ud83d\udd0d Troubleshooting\n\n### Installation Issues\n\n```bash\n# Install in development mode for local changes\npip install -e .\n\n# Or install for production use\npip install .\n```\n\n### Authentication Errors\n\n```bash\n# Check environment variables\necho $AZURE_TENANT_ID\necho $PROJECT_ENDPOINT\n\n# Or use CLI parameters (recommended for CI/CD or when environment variables conflict)\naif-workflow-helper --download-all-agents \\\n --azure-tenant-id \"your-tenant-id\" \\\n --project-endpoint \"your-endpoint\"\n\n# Try interactive login\naz login --tenant $AZURE_TENANT_ID\n```\n\n### Command Not Found Error\n\nIf `aif-workflow-helper` is not found after installation:\n\n```bash\n# Make sure you installed the package\npip install -e .\n\n# Check if it's in your PATH\nwhich aif-workflow-helper\n\n# Or run directly with Python\npython -m aif_workflow_helpers.cli.main --help\n```\n\n## \ud83c\udf89 Success Output\n\nTypical successful run output (truncated example):\n\n```text\n\ud83d\udd0c Testing connection...\n\u2705 Connected! Found X existing agents\n\n\ud83d\udce5 Downloading agents...\nSaved agent 'agent-name' to agent-name.json\n\n\ud83d\udcc2 Reading agent files...\nFound X agents\n\n\ud83d\ude80 Creating/updating agents...\nProcessing 1/X: agent-name\n\u2705 Successfully processed agent-name\n```\n\n## \ud83d\udd04 CI/CD Pipeline\n\nThis project includes a comprehensive CI/CD pipeline using GitHub Actions that ensures code quality and functionality.\n\n### Pipeline Features\n\n- **Multi-Python Version Testing**: Tests on Python 3.10, 3.11, and 3.12\n- **Automated Testing**: Runs all pytest tests with coverage reporting\n- **Code Quality**: Includes linting with flake8\n- **Package Testing**: Verifies the package can be built and installed correctly\n- **CLI Testing**: Ensures the command-line interface works after installation\n\n### Branch Protection\n\nThe main branch is protected with the following requirements:\n\n- \u2705 **Pull Request Required**: Direct pushes to main are not allowed\n- \u2705 **Tests Must Pass**: All CI checks must pass before merging\n- \u2705 **Code Review**: At least 1 approval required\n- \u2705 **Up-to-date Branch**: Branches must be current with main\n\n### Running Tests Locally\n\nBefore submitting a PR, run tests locally to ensure they pass:\n\n```bash\n# Activate virtual environment\nsource .venv/bin/activate\n\n# Install with dev dependencies\npip install -e .[dev]\n\n# Run tests\npytest tests/ -v --tb=short\n\n# Run with coverage\npytest tests/ -v --cov=src --cov-report=term-missing\n\n# Check CLI functionality\naif-workflow-helper --help\n```\n\n### Contributing\n\n1. Create a feature branch from `main`\n2. Make your changes\n3. Ensure all tests pass locally\n4. Submit a pull request\n5. Wait for CI to pass and get code review approval\n6. Merge when approved\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Azure AI Foundry dev workflow helpers",
"version": "0.1.1",
"project_urls": {
"Homepage": "https://github.com/peteroden/aif-workflow-helper",
"Source": "https://github.com/peteroden/aif-workflow-helper"
},
"split_keywords": [
"azure",
" ai",
" agents",
" workflow",
" automation"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4c75832065879a92735997cb17ca03e203be6bf67968648d8f391f67cc7c84ac",
"md5": "5ae60df3006c08c74e7708daeb1ff0a1",
"sha256": "c6898bc152c7666ff4f07ee3d9cfde9bf978a6d9d6d9e160347aa849124258eb"
},
"downloads": -1,
"filename": "aif_workflow_helper-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5ae60df3006c08c74e7708daeb1ff0a1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 18985,
"upload_time": "2025-09-11T23:41:13",
"upload_time_iso_8601": "2025-09-11T23:41:13.679973Z",
"url": "https://files.pythonhosted.org/packages/4c/75/832065879a92735997cb17ca03e203be6bf67968648d8f391f67cc7c84ac/aif_workflow_helper-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cb75c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855",
"md5": "52ec2625080cbfe856e48a5c8879c959",
"sha256": "6f030ebe8967b53e6e4a8ba39fc6417222a069ac980e23afae14dc8ed1192280"
},
"downloads": -1,
"filename": "aif_workflow_helper-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "52ec2625080cbfe856e48a5c8879c959",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 14189,
"upload_time": "2025-09-11T23:41:15",
"upload_time_iso_8601": "2025-09-11T23:41:15.186846Z",
"url": "https://files.pythonhosted.org/packages/cb/75/c131ba7610d653ada0448fd3d2fc5de7a48b02da25270b9290e90d8db855/aif_workflow_helper-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-11 23:41:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "peteroden",
"github_project": "aif-workflow-helper",
"github_not_found": true,
"lcname": "aif-workflow-helper"
}