Skip to main content

Py4HEAppE (Python for HEAppE Middleware)

Release: 3.1.0

Py4HEAppE provides both a command-line interface and versioned Python wrappers for the HEAppE middleware API.

You can use it in two ways:

  • HEAppE CLI commands for interactive and scripting use
  • Versioned Python API wrappers for direct integration into your own applications

Supported HEAppE Versions

Py4HEAppE HEAppE Version Notes
3.1.X 6.5.X, 6.4.X, 6.3.X, 6.2.X, 6.2.1, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.9.X 6.4.X, 6.3.X, 6.2.X, 6.2.1, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.8.X 6.4.X, 6.3.X, 6.2.X, 6.2.1, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.7.X 6.4.X, 6.3.X, 6.2.X, 6.2.1, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.6.X 6.3.X, 6.2.X, 6.1.X, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.5.X 6.3.X, 6.2.X, 6.1.X, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.4.X 6.1.X, 6.0.X, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.3.X 6.0.X, 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.2.X 5.0.X, 4.3.X, 4.2.X Without Admin CLI section
2.1.X 5.0.X, 4.3.X, 4.2.X Without Admin, Job, and File CLI sections
2.0.X 5.0.X Without Admin, Job, and File CLI sections
1.X.X 4.3.X, 4.2.X Without Admin, Job, and File CLI sections

Requirements

  • Python 3.11 or newer
  • Access to a deployed HEAppE instance
  • HEAppE instance URL
  • HEAppE accounting string for the target computational project

Installation

If the py4heappe executable is not on your PATH, use the full path to the installed script or add the script directory to PATH.

On Windows, use py4heappe.exe instead of py4heappe.

HEAppE CLI

The CLI is intended for users who want to work with HEAppE directly from a terminal without writing Python code.

Initial Setup

Before using the CLI for the first time, initialize the HEAppE instance URL and the accounting string:

py4heappe Conf Init

Available Command Groups

py4heappe --help

Current command groups:

  • Conf for local CLI configuration
  • Auth for authentication
  • CmdTemp for command template operations
  • Info for version and cluster information
  • Job for job lifecycle management
  • FileTransfer for job file upload and download operations
  • Report for resource usage and reporting

Useful Help Commands

py4heappe Auth --help
py4heappe Info --help
py4heappe Job --help
py4heappe FileTransfer --help
py4heappe Report --help

Basic CLI Examples

Authenticate with username and password:

py4heappe Auth UserPass

Show the HEAppE API version:

py4heappe Info Version

List available clusters:

py4heappe Info ClusterInfo

List your jobs:

py4heappe Job List

Create a Job from a JSON Template

Py4HEAppE supports a JSON-first workflow for job creation.

Generate a minimal job specification template in the current directory:

py4heappe Job InitJobSpecification

Generate the full swagger-shaped job specification template instead:

py4heappe Job InitJobSpecification --full

Or generate it in a specific directory or target file:

py4heappe Job InitJobSpecification --file-destination ./job_specs
py4heappe Job InitJobSpecification --file-destination ./job_specs/demo_job.json

Create a job from the JSON file and override selected values from the command line:

py4heappe Job Create --json-job-spec-file ./job_specification.json \
    --name demo-job \
    --cluster-id 2 \
    --project-id 1 \
    --task-name 0:demo-task \
    --task-max-cores 0:128 \
    --walltime-limit 0:1800 \
    --cluster-node-type-id 0:18 \
    --cmd-template-id 0:3 \
    --cmd-template-parameters inputParam:testValue

CLI overrides always take precedence over values loaded from --json-job-spec-file.

Save the final parsed job specification that will be submitted to HEAppE:

py4heappe Job Create --json-job-spec-file ./job_specification.json \
    --save-result-job-specification

This writes resultJobSpecJson.json into the current working directory.

Override Format for Nested Task Data

Some Job Create options work on indexed task items and nested collections.

Examples:

# Task scalar override
py4heappe Job Create --json-job-spec-file ./job_specification.json --task-name 0:main-task

# Task environment variable override
py4heappe Job Create --json-job-spec-file ./job_specification.json \
  --task-environment-variable 0:0:Name:OMP_NUM_THREADS \
  --task-environment-variable 0:0:Value:8

# Task template parameter override
py4heappe Job Create --json-job-spec-file ./job_specification.json \
  --task-template-parameter-value 0:0:CommandParameterIdentifier:inputParam \
  --task-template-parameter-value 0:0:ParameterValue:testValue

File Transfer Examples

List files changed during job execution:

py4heappe FileTransfer ListChanged --help

Download a single file from a job directory:

py4heappe FileTransfer Download --help

Upload files directly into the job execution directory:

py4heappe FileTransfer Stream --help

Python API Wrapper

Py4HEAppE also ships versioned Python wrappers generated from the HEAppE API.

Use the wrapper that matches your target HEAppE version:

import py4heappe.heappe_v6.core as hp
# or:
# import py4heappe.heappe_v5.core as hp
# import py4heappe.heappe_v4.core as hp

There is no single unversioned py4heappe.core module. Use the versioned wrapper explicitly.

Minimal Python Example

import json

import py4heappe.heappe_v6.core as hp

configuration = hp.Configuration()
configuration.host = "https://heappe.example.org"
api_client = hp.ApiClient(configuration)

try:
    auth_api = hp.UserAndLimitationManagementApi(api_client)
    management_api = hp.ManagementApi(api_client)
    cluster_api = hp.ClusterInformationApi(api_client)

    auth_body = {
        "_preload_content": False,
        "body": {
            "Credentials": {
                "Username": "username",
                "Password": "password",
            }
        },
    }

    auth_response = auth_api.heappe_user_and_limitation_management_authenticate_user_password_post(
        **auth_body
    )
    session_code = json.loads(auth_response.data)

    version_response = management_api.heappe_management_version_information_get(
        _preload_content=False,
        SessionCode=session_code,
    )
    print(json.dumps(json.loads(version_response.data), indent=2))

    cluster_response = cluster_api.heappe_cluster_information_list_available_clusters_get(
        _preload_content=False,
        SessionCode=session_code,
    )
    print(json.dumps(json.loads(cluster_response.data), indent=2))

finally:
    api_client.pool.close()
    api_client.pool.join()

Create a Job Through the Python Wrapper

import json

import py4heappe.heappe_v6.core as hp

configuration = hp.Configuration()
configuration.host = "https://heappe.example.org"
api_client = hp.ApiClient(configuration)

try:
    job_api = hp.JobManagementApi(api_client)

    body = {
        "_preload_content": False,
        "body": {
            "SessionCode": "your-session-code",
            "JobSpecification": {
                "Name": "demo-job",
                "ProjectId": 1,
                "ClusterId": 2,
                "FileTransferMethodId": 1,
                "Tasks": [
                    {
                        "Name": "demo-task",
                        "MinCores": 1,
                        "MaxCores": 16,
                        "WalltimeLimit": 1800,
                        "StandardOutputFile": "stdout",
                        "StandardErrorFile": "stderr",
                        "ProgressFile": "stdprog",
                        "LogFile": "stdlog",
                        "ClusterNodeTypeId": 18,
                        "CommandTemplateId": 3,
                        "TemplateParameterValues": [
                            {
                                "CommandParameterIdentifier": "inputParam",
                                "ParameterValue": "testValue",
                            }
                        ],
                    }
                ],
            },
        },
    }

    response = job_api.heappe_job_management_create_job_post(**body)
    job_id = json.loads(response.data)["Id"]
    print(f"Created job: {job_id}")

finally:
    api_client.pool.close()
    api_client.pool.join()

Running CLI tests

The repository includes live CLI integration tests under tests/ that require a reachable HEAppE instance and several environment variables.

Quick steps:

  • Create a tests/.env from the example and edit it:

    • Unix: cp tests/.env.example tests/.env
    • Windows (PowerShell): Copy-Item tests\.env.example tests\.env
  • Populate required values in tests/.env (or export the variables). At minimum set PY4HEAPPE_RUN_LIVE_CLI_TESTS=1 and PY4HEAPPE_TEST_URL and PY4HEAPPE_TEST_PROJECT. To allow tests that change remote state also set PY4HEAPPE_TEST_RUN_MUTATING_COMMANDS=1.

  • Run the CLI tests (default, using the standard library's unittest):

    • Run all CLI tests: python -m unittest discover -s tests -p "test_cli_*.py" -v
    • Run a single test module: python -m unittest tests.test_cli_auth -v
  • Optional: run with pytest (pytest can run unittest-style tests and offers improved output):

    • Install pytest: python -m pip install -U pytest
    • Run with pytest: python -m pytest -q tests/test_cli_*.py

Do NOT commit tests/.env with real credentials or session tokens.

Notes

  • CLI configuration is stored locally after py4heappe Conf Init.
  • Most CLI commands require a valid session, so authenticate before running job or file-transfer operations.
  • For detailed option lists, use the built-in --help on each command group and subcommand.

Acknowledgement

This work was supported by the Ministry of Education, Youth and Sports of the Czech Republic through e-INFRA CZ (ID:90254).

Release files for Py4HEAppE 3.1.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 Py4HEAppE 3.1.0
File Size Uploaded
py4heappe-3.1.0.tar.gz 627.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Py4HEAppE 3.1.0
File Interpreter ABI Platform
py4heappe-3.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.7 MB

Release files / py4heappe-3.1.0.tar.gz

Download URL py4heappe-3.1.0.tar.gz
Size 627.7 kB
Tags Source
SHA-256 checksum
How to use checksums
85cfdf479d6e06875d95bec4902af3ad5194a2beda8c17422a3bc8d48eb0462d
BLAKE2b-256 checksum
How to use checksums
337c9d0a5a783605f0fa443b72ae4387d86239f9f851f543a64e5ebd19cb3593
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / py4heappe-3.1.0-py3-none-any.whl

Download URL py4heappe-3.1.0-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
83f21ae4c7a21a5c1e9255403172d019d5a03de9a54bd9210c3ecb462072c346
BLAKE2b-256 checksum
How to use checksums
e7f5d13f09aa26ae59e73782b62a8478286f83b950468652588d1d52152cd78f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

3.1.0 This release

2 release files

3.0.0

2 release files

2.9.0

2 release files

2.8.0

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.0

2 release files

2.5.2

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.0

2 release files

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