Skip to main content

Python client for the Angles Dashboard API

Project description

angles-python-client

A small Python client for the Angles Dashboard REST API, which allows python test frameworks to publish their automated test results.

Install (local / editable)

pip install -e .

Quick usage (singleton reporter)

Use angles_reporter when you want one simple process-wide reporter.

from angles_python_client import angles_reporter
from angles_python_client.models import Artifact, ScreenshotPlatform, Platform

angles_reporter.set_base_url("http://127.0.0.1:3000/rest/api/v1.0/")

build = angles_reporter.start_build(
    name="TestRunName",
    team="Team",
    environment="Environment",
    component="Component",
    phase="optional-phase",
)

angles_reporter.add_artifacts([
    Artifact(groupId="angles-ui", artifactId="anglesHQ", version="1.0.0")
])

angles_reporter.start_test(title="test1", suite="suite1")
angles_reporter.add_action("My first action")

platform = ScreenshotPlatform(
    platformName="Android",
    platformVersion="10",
    browserName="Chrome",
    browserVersion="89.0",
    deviceName="Samsung Galaxy S9",
)

screenshot = angles_reporter.save_screenshot_with_platform(
    file_path="/path/to/screenshot.png",
    view="view_1",
    tags=["smoke", "home"],
    platform=platform,
)

angles_reporter.info_with_screenshot("Checking my view on android", screenshot.get("_id"))

angles_reporter.pass_step("Assertion", expected="true", actual="true", info="Just doing an assertion")
angles_reporter.fail_step("Assertion", expected="true", actual="false", info="Just doing an assertion")

execution = angles_reporter.save_test()

Independent reporters for isolated state

Create AnglesReporter(...) instances directly when you need more than one live reporter at once, for example when publishing multiple builds or environments in parallel. Each instance keeps its own current_build, current_execution, and current_action state.

from angles_python_client import AnglesReporter

reporter_gib = AnglesReporter(base_url="https://angles-api.example/rest/api/v1.0/")
reporter_games_dev = AnglesReporter(base_url="https://angles-api.example/rest/api/v1.0/")

reporter_gib.start_build(
    name="[suite] test-suite integration",
    team="some-team",
    environment="integration",
    component="some-component",
)

reporter_games_dev.start_build(
    name="[suite] test-suite dev",
    team="some-team",
    environment="dev",
    component="some-component",
)

AnglesReporter.get_instance() and the module-level angles_reporter still return the shared convenience singleton.

AnglesReporter.get_instance_with_base_url(...) is kept for backward compatibility, but it now returns a fresh reporter bound to that base URL instead of reusing shared mutable reporting state.

Direct requests usage

from angles_python_client import AnglesHttpClient
from angles_python_client.requests import BuildRequests

http = AnglesHttpClient(base_url="http://127.0.0.1:3000/rest/api/v1.0/")
builds = BuildRequests(http)
build = builds.get_build("your-build-id")

Publish a release to PyPI

  1. Bump project.version in pyproject.toml

  2. Push a tag like v1.0.1:

    git tag v1.0.1
    git push origin v1.0.1
    

The workflow .github/workflows/publish.yml will build and publish to PyPI.

Publish to TestPyPI first (optional)

  • Push a tag like test-v1.0.1, or run the Publish to TestPyPI workflow manually.

  • Install from TestPyPI to validate:

    python -m pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple angles-python-client
    

Build locally (manual)

python -m pip install -U pip build twine
python -m build
python -m twine check dist/*
python -m twine upload dist/*

Versioning

This project uses a standard pyproject.toml version = "X.Y.Z" field.

Bump version locally (and create a tag)

pip install -U bump2version
bump2version patch   # or minor / major
git push --follow-tags

Bump via GitHub Actions (and publish)

Run the Bump version and tag workflow (Actions tab) and choose:

  • target=pypi → creates a tag like v1.0.1 (triggers the PyPI publish workflow)
  • target=testpypi → creates a tag like test-v1.0.1 (triggers the TestPyPI publish workflow)

Auto-release on main/master

This repo includes an optional workflow: .github/workflows/release-on-main.yml.

When enabled (it is committed by default), every push to main or master will:

  1. Read the current project.version from pyproject.toml
  2. Create and push a git tag vX.Y.Z (if it doesn't already exist)
  3. Build and publish to PyPI (Trusted Publishing)
  4. Bump the version patch for the next release and push that commit back to the default branch

To avoid loops, the post-bump commit includes [skip release] and the workflow ignores commits containing that marker.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

angles_python_client-1.0.9.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

angles_python_client-1.0.9-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file angles_python_client-1.0.9.tar.gz.

File metadata

  • Download URL: angles_python_client-1.0.9.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for angles_python_client-1.0.9.tar.gz
Algorithm Hash digest
SHA256 a454f056b9f954e1c5ce0a3bcc51245a797b617de30b6a3476a202797d340539
MD5 7821625ba8b38e16a558d2e649a5c7e2
BLAKE2b-256 d904639e9c56bb937859d16354fd8ae7b4d7b3fc15199c62ef80a61dd4091929

See more details on using hashes here.

Provenance

The following attestation bundles were made for angles_python_client-1.0.9.tar.gz:

Publisher: release-on-main.yml on AnglesHQ/angles-python-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file angles_python_client-1.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for angles_python_client-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 0c17e1aed498e2646cfa83ac37756c54d09c07723ac919a3c4dd31bba2f49b33
MD5 cf401efe940e9abf049ee2ad6acb5ccc
BLAKE2b-256 d42866f9238a437cdb0f7ef0c531f6ab05cff627b9c3abf774d6d731a6270891

See more details on using hashes here.

Provenance

The following attestation bundles were made for angles_python_client-1.0.9-py3-none-any.whl:

Publisher: release-on-main.yml on AnglesHQ/angles-python-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page