Skip to main content

ArcExpect

ArcExpect helps authors write ARC validation packages in Python. A package is a normal Python script with validation metadata, a list of checks, and a standard result folder containing a JSON summary, JUnit report, and SVG badge.

Write a validation package

Install the package and its runtime dependencies in your Python environment, then write a script such as example-validator.py. The frontmatter at the top is used when the package is indexed and is parsed by the package itself; keep it as the first content in the file.

"""
---
Name: example-python-validator
MajorVersion: 1
MinorVersion: 0
PatchVersion: 0
Summary: Checks the basic structure of an ARC.
Description: |
  A minimal native-Python ARC validation package.
Publish: true
Authors:
  - FullName: ARC validation team
    Email: validation@example.org
Tags:
  - Name: example
  - Name: python
ReleaseNotes: |
  - Initial version.
---
"""

from __future__ import annotations

import argparse
from pathlib import Path

from arcexpect import Execute, Expect, Setup, test_case, test_list


parser = argparse.ArgumentParser(description="Validate the basic structure of an ARC.")
parser.add_argument("--input", "-i", required=True, type=Path, help="Path to the ARC directory")
parser.add_argument("--output", "-o", required=True, type=Path, help="Directory for validation results")
args = parser.parse_args()


def input_directory_exists() -> None:
    Expect.is_true(args.input.is_dir(), "The input path must be an ARC directory")


def has_readme() -> None:
    Expect.is_true((args.input / "README.md").is_file(), "The ARC must contain README.md")


def has_investigation_or_study() -> None:
    has_investigation = (args.input / "investigation" / "isa.investigation.xlsx").is_file()
    has_study = (args.input / "studies").is_dir()
    Expect.is_true(has_investigation or has_study, "The ARC must contain an investigation or a study")


package = Setup.validation_package_from_script(
    __file__,
    critical=[
        test_list(
            "basic ARC structure",
            [
                test_case("input directory exists", input_directory_exists),
                test_case("README.md exists", has_readme),
                test_case("contains investigation or study", has_investigation_or_study),
            ],
        )
    ],
)

# Runs every check and writes validation_summary.json, validation_report.xml,
# and badge.svg below the output directory.
Execute.validation_pipeline(package, str(args.output))

Run the script with an ARC input directory and an output directory:

python example-validator.py --input ./my-arc --output ./results

The script creates the standard result layout:

results/
└── .arc-validate-results/
    └── example-python-validator@1.0.0/
        ├── badge.svg
        ├── validation_report.xml
        └── validation_summary.json

The JSON summary records critical and non-critical totals and outcomes. The XML file is a JUnit report suitable for CI systems, and the badge summarizes the validation result. A failing non-critical check is recorded in the report but does not make the badge a critical-error badge; failing or errored critical checks do.

Core API

  • Setup.validation_package_from_script(__file__, critical=[...], non_critical=[...]) parses the script's frontmatter and combines it with its checks. This is the usual entry point for a native Python package.
  • Setup.metadata(...) and Setup.validation_package(...) remain available when metadata is supplied by another source.
  • test_case(name, check) and test_list(name, checks) declare validation cases; use pending_test_case for a skipped case.
  • Expect.is_true, Expect.is_false, Expect.equal, and related methods report a validation failure with a useful message.
  • Execute.validation_pipeline(package, output_path) is the usual script entry point. Execute.validation(package) returns an in-memory summary when files are not needed.

See the legacy standalone Python packages in references for additional domain-specific examples.

Metadata

Release files for arcexpect 0.0.4

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

Source distribution (sdist)

Source distribution for arcexpect 0.0.4
File Size Uploaded
arcexpect-0.0.4.tar.gz 86.2 kB Details

Built distribution (wheel)

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

Total release size: 197.0 kB

Release files / arcexpect-0.0.4.tar.gz

Download URL arcexpect-0.0.4.tar.gz
Size 86.2 kB
Tags Source
SHA-256 checksum
How to use checksums
99ffa98cd975a7945ce888cbee6f3a5cec6e9d7aadc07171ab462aeccba9a0ac
BLAKE2b-256 checksum
How to use checksums
93f34ca3dd5c1102d32986202ee9d9f051fe536af260d67777129c59e1a18a32
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / arcexpect-0.0.4-py3-none-any.whl

Download URL arcexpect-0.0.4-py3-none-any.whl
Size 110.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
692e200a84f35de90329afbe74f2dda441b56bd92b46a537440450097b4cdf0c
BLAKE2b-256 checksum
How to use checksums
0211a008df0614073c4cbfbb977ee9bdfa054884bd64395b0edea1e71305699d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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