Skip to main content

genja-py

Python bindings for the Genja runtime.

This package exposes the genja module, which wraps the Rust runtime and lets Python code:

  • build a runtime from hosts, a full inventory, or a settings file
  • run Python-authored tasks
  • register Python plugins
  • inspect raw and transformed inventory data

Installation

For end users, install the package with pip:

pip install genja-py

The base installation provides the Python library without a genja command. Starting with v0.5.0, install the optional command and terminal UI on a supported platform with:

python -m pip install "genja-py[cli]>=0.5.0,<0.6.0"

The extra selects a compatible genja-cli v0.5.x wheel. The v0.5.0 wheel release covers CPython 3.10–3.14 on Linux x86_64, macOS Apple Silicon and Intel, and Windows x64. Intel macOS has wheels for both packages.

To discover Python tasks, declare their modules in the project's [tool.genja.tasks] configuration, then run genja task list or genja tui. See the installation guide for a first project and the CLI guide for task inspection.

The package currently exposes the genja Python module:

import genja

Quick Start

Create a runtime from a simple host mapping:

import genja
from genja.task import Host, TaskInfo, TaskRuntimeContext, TaskSuccessResult, task


@task(name="backup_config")
class BackupTask:
    def start(
        self,
        task: TaskInfo,
        host: Host,
        context: TaskRuntimeContext,
    ) -> TaskSuccessResult:
        connection = context.connection()
        command_output = None
        if connection is not None:
            command_output = connection.execute_command("show running-config")

        return TaskSuccessResult(
            summary=f"backed up {host.hostname}",
            metadata={"show_running_config": command_output},
        )


genja = genja.Genja.from_hosts({
    "router1": {"hostname": "10.0.0.1", "platform": "ios"},
    "router2": {"hostname": "10.0.0.2", "platform": "nxos"},
}).with_runner("serial")

results = genja.run_task(BackupTask)
print(results.to_dict())

tasks = genja.Tasks()
tasks.add_task(BackupTask)

all_results = genja.run_tasks(tasks)
print([result.task_name for result in all_results])

results.to_dict() returns per-host task results with an outcome payload and separate execution_metadata for host timing and retry attempt information.

TaskRuntimeContext exposes the 1-based retry attempt through context.current_attempt and the resolved connection through context.connection() and context.has_connection(). Execution depth remains internal to the runtime.

For async Python applications, use the async entrypoints:

import asyncio
import genja
from genja.task import Host, TaskInfo, TaskRuntimeContext, TaskSuccessResult, task


@task(name="backup_config_async")
class BackupTaskAsync:
    async def start_async(
        self,
        task: TaskInfo,
        host: Host,
        context: TaskRuntimeContext,
    ) -> TaskSuccessResult:
        connection = context.connection()
        command_output = None
        if connection is not None:
            command_output = await connection.execute_command("show running-config")

        return TaskSuccessResult(
            summary=f"backed up {host.hostname}",
            metadata={"show_running_config": command_output},
        )


async def main() -> None:
    runtime = genja.Genja.from_hosts({
        "router1": {"hostname": "10.0.0.1", "platform": "ios"},
    }).with_runner("serial")

    results = await runtime.run_task_async(BackupTaskAsync)
    print(results.to_dict())


asyncio.run(main())

Use run_task_async(...) and run_tasks_async(...) when composing Genja with asyncio.gather(...) or other async application code. The synchronous run_task(...) and run_tasks(...) entrypoints remain available for scripts and non-async callers.

Python task authoring rules:

  • Define def start(...) for blocking tasks.
  • Define async def start_async(...) for async tasks.
  • Define exactly one of those methods on a @task(...) class.
  • Use sub_tasks=[ChildTask, ...] to declare child tasks.
  • Use supports_dry_run=True with dry_run(...) or dry_run_async(...) when operators should be able to preview a task.
  • Use idempotency=IdempotencyMode.CHECK or idempotency=IdempotencyMode.CHECK_AND_VERIFY with check(...) or check_async(...) when the task can inspect whether a host is already in the desired state.
  • Use session_verification=SessionVerificationConfig(...) with connection_plugin_name when a changed task should prove that a new authenticated management session can be established after the change.
from genja.task import (
    Host,
    IdempotencyCheckResult,
    IdempotencyMode,
    TaskInfo,
    TaskRuntimeContext,
    TaskSuccessResult,
    task,
)


@task(name="ensure_ntp", idempotency=IdempotencyMode.CHECK)
class EnsureNtp:
    def check(
        self,
        task: TaskInfo,
        host: Host,
        context: TaskRuntimeContext,
    ) -> IdempotencyCheckResult:
        return IdempotencyCheckResult.change_required(diff="+ntp server 192.0.2.10")

    def start(
        self,
        task: TaskInfo,
        host: Host,
        context: TaskRuntimeContext,
    ) -> TaskSuccessResult:
        return TaskSuccessResult(changed=True, summary="configured NTP")

Dry-run dispatch does not automatically run idempotency checks. Task authors who want shared inspection behavior can call private helper code from both their dry-run hook and check hook.

Session verification is independent from idempotency. When both session_verification=SessionVerificationConfig(...) and idempotency=IdempotencyMode.CHECK_AND_VERIFY are enabled, Genja replaces the connection before running the post-check, so the post-check uses the new session.

Logging

Rust-side runtime logs emitted by Genja are forwarded into Python's standard logging system when the extension module is imported. Configure Python logging handlers and levels before running Genja tasks:

import logging

import genja

logging.basicConfig(level=logging.INFO)

runtime = genja.Genja.from_hosts({
    "router1": {"hostname": "10.0.0.1", "platform": "ios"},
}).with_runner("serial")

Tests can capture those records with pytest's caplog fixture.

Full Inventory

Use genja.inventory when you need groups and defaults:

import genja
from genja.inventory import Defaults, Group, Host, Inventory

inventory = Inventory(
    hosts={
        "router1": Host(hostname="10.0.0.1", groups=["core"]),
    },
    groups={
        "core": Group(platform="ios", data={"role": "core"}),
    },
    defaults=Defaults(username="admin", port=22),
)

genja = genja.Genja.from_inventory(inventory)

print(genja.inventory_full())
print(genja.inventory_raw())

Inventory Accessors

The runtime exposes three inventory views:

  • genja.inventory(): raw hosts only
  • genja.inventory_full(): transformed hosts, groups, and defaults
  • genja.inventory_raw(): raw hosts, groups, and defaults

Plugins

You can register Python plugins directly:

import genja


class MyProcessorPlugin:
    name = "audit"
    group = "ProcessorPlugin"

    def on_task_finish(self, context, results):
        return None


plugins = genja.PluginManager()
plugins.register_plugin(MyProcessorPlugin())

Rust plugins can be loaded from a directory:

plugins = genja.PluginManager()
plugins.load_rust_plugins_from_directory("./plugins")

Settings Files

From A Settings File

Build a runtime from a settings file:

import genja

genja = genja.Genja.from_settings_file("config.yaml")

Settings files are strict: unknown fields fail loading instead of being ignored. Use explicit option maps such as runner.options for plugin-specific values.

From Programmatic Settings

Settings can also be built directly in Python. Use from_settings(...) when inventory should be loaded from settings.inventory:

import genja

settings = genja.Settings(
    inventory=genja.InventoryConfig(
        options=genja.OptionsConfig(
            hosts_file="./inventory/hosts.yaml",
        ),
    ),
    runner=genja.RunnerConfig(
        plugin="serial",
        retry=genja.RunnerRetryConfig(
            allow=True,
            max_attempts=3,
            delay_ms=250,
        ),
    ),
)

genja = genja.Genja.from_settings(settings)

Use from_settings_async(...) for programmatic settings or from_settings_file_async(...) for settings files when the selected inventory plugin is async. Async construction is strict: the selected inventory plugin must be async-capable, and sync-only inventory plugins such as the default FileInventoryPlugin are rejected.

import genja


class ApiInventoryPlugin(genja.InventoryPluginBase):
    name = "api_inventory"

    async def load(self, settings, plugins):
        return {
            "router1": {
                "hostname": "10.0.0.1",
                "platform": "ios",
            },
        }


plugins = genja.PluginManager()
plugins.register_plugin(ApiInventoryPlugin())

settings = genja.Settings(
    inventory=genja.InventoryConfig(plugin="api_inventory"),
)

genja = await genja.Genja.from_settings_async(settings, plugin_manager=plugins)

# Or load settings from a file with the same strict async inventory contract.
genja = await genja.Genja.from_settings_file_async(
    "config.yaml",
    plugin_manager=plugins,
)

Programmatic construction itself does not read files, but runtime creation validates supplied settings before building the runtime. To validate explicitly, call settings.validate() or settings.ssh.validate().

With Explicit Inventory

When host data is supplied directly, from_hosts(...) and from_inventory(...) continue to use that explicit inventory instead of loading from settings.inventory.

With Python Plugins

If you need Python plugins during settings-file loading, provide a plugin manager:

plugins = genja.PluginManager()
genja = genja.Genja.from_settings_file("config.yaml", plugin_manager=plugins)

The same plugin_manager argument is available on Genja.from_settings(...) and the async settings constructors for Python-authored inventory plugins.

Development

The commands below assume a repository checkout and use PDM-managed tooling.

Clone the repository and move into the Python package directory:

git clone git@github.com:Smertan/genja.git
cd genja/genja-core-python

Install the development dependencies:

pdm install -d

Build and install the Rust extension into the project virtual environment:

pdm run maturin develop

Run the Rust-side binding tests:

pdm run test-rust

Use pdm run test-rust instead of plain cargo test. The Rust tests embed Python and need access to the PDM-managed virtualenv packages such as pydantic.

Run the Python test suite:

pdm run test

Run Ruff:

pdm run lint

Check Python API stubs and PyO3 documentation coverage:

pdm run check-stubs

Run this when changing Rust/PyO3-exposed Python APIs, .pyi stubs, Python API docstrings, or top-level Python re-exports.

The check requires every top-level python/genja/*.pyi stub to be listed in STUBS_REQUIRING_DOCSTRINGS in scripts/check_python_api_docs.py. When adding a stub, document its public API and add it to that list during the same change. Add duplicated top-level re-export classes to DUPLICATED_TOP_LEVEL_CLASSES so genja.pyi and __init__.pyi stay aligned.

Metadata

Release files for genja-py 0.5.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 genja-py 0.5.0
File Size Uploaded Provenance Actions
genja_py-0.5.0.tar.gz 531.7 kB With provenance Details for genja_py-0.5.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for genja-py 0.5.0
File Actions
genja_py-0.5.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for genja_py-0.5.0-cp314-cp314-win_amd64.whl
genja_py-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details for genja_py-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
genja_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for genja_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
genja_py-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64 Details for genja_py-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl
genja_py-0.5.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for genja_py-0.5.0-cp313-cp313-win_amd64.whl
genja_py-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for genja_py-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
genja_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for genja_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
genja_py-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.12+ x86-64 Details for genja_py-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
genja_py-0.5.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for genja_py-0.5.0-cp312-cp312-win_amd64.whl
genja_py-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details for genja_py-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
genja_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for genja_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
genja_py-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details for genja_py-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
genja_py-0.5.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for genja_py-0.5.0-cp311-cp311-win_amd64.whl
genja_py-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details for genja_py-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
genja_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for genja_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
genja_py-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details for genja_py-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
genja_py-0.5.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for genja_py-0.5.0-cp310-cp310-win_amd64.whl
genja_py-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details for genja_py-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
genja_py-0.5.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for genja_py-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
genja_py-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details for genja_py-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl

Total release size: 58.0 MB

Release files / genja_py-0.5.0.tar.gz

Download URL genja_py-0.5.0.tar.gz
Size 531.7 kB
Tags Source
SHA-256 checksum
How to use checksums
25abaacec6d5a0bd071eeefeae664ec48ff32c08fff326246025d4144bc3e344
BLAKE2b-256 checksum
How to use checksums
0ff10686bd1f461abc1b31df79f11717e7b7c6e2cbbaf1d712deb86bf8220862
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp314-cp314-win_amd64.whl

Download URL genja_py-0.5.0-cp314-cp314-win_amd64.whl
Size 2.6 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
39057a360cabbbceea03563663db57761f6608cf90f4b241caccca918421ef19
BLAKE2b-256 checksum
How to use checksums
dfe65eaeeb6c0f7810175b9d031ce01213c75c8bcd6b3027483149ee80737c4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL genja_py-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.1 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
631c385d7616dcbacb573b13b15af8d56ae0ab07a4e2ca85df6d6275b7fddf97
BLAKE2b-256 checksum
How to use checksums
fa975250373baea1e1bde3edf6477c47c4199b86c023cf1dd4268f4b547018d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL genja_py-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
379150136f7339bcf73442afaeecbb3f998b60c3f2d02c168fecebd3c407ae64
BLAKE2b-256 checksum
How to use checksums
f882a150cd05102379f635d2f1d252812221a6ccb139f6801bb8d9a82142d1c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl

Download URL genja_py-0.5.0-cp314-cp314-macosx_10_12_x86_64.whl
Size 2.9 MB
Tags CPython 3.14 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
83d187d967716f82f539512aa791ba26d2fa69670bad2a8e83d8ed65026fce8d
BLAKE2b-256 checksum
How to use checksums
ea89d768518e1cf67b30b1f4ff582bb82f33c627456bb76127f605c73598c112
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp313-cp313-win_amd64.whl

Download URL genja_py-0.5.0-cp313-cp313-win_amd64.whl
Size 2.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
486ccea58c3b07a38d5720c3049c4fb907538f7b7ff8fe63e2464a7cb0c03026
BLAKE2b-256 checksum
How to use checksums
a7f7b84e2bbaf6c2ded18cee71deafdbc6908db7debd9155e26ba132bc1af4fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL genja_py-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.1 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d9b0b1cd2edc7434934754773cd1e10bba6e0beb1763189d6a621d09dac6eafa
BLAKE2b-256 checksum
How to use checksums
05184826b365aa944c21942d447611b67e41cdc95f296ef82d41514f78a7b57c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL genja_py-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c537b7be6ad5b7b8bf5bd670a37d31f182b351e41ff6e09d6223efedd782d77b
BLAKE2b-256 checksum
How to use checksums
f0d3d694786a094583e16f2328d56c4325bafb1bf19aa13642d123d0075ac01d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl

Download URL genja_py-0.5.0-cp313-cp313-macosx_10_12_x86_64.whl
Size 2.9 MB
Tags CPython 3.13 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
66c1256dae285ad3483e8f3ceeb24b9de8c75daea6c9ceede493dc17600dcd26
BLAKE2b-256 checksum
How to use checksums
5d7a15e67560ea230b7cf6f3d17bb604733f2cf170c7a27217ccf56683245c21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp312-cp312-win_amd64.whl

Download URL genja_py-0.5.0-cp312-cp312-win_amd64.whl
Size 2.6 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f040dd78c1503d1b7c9204979d5076a8e1a0d6a2b080cd130d164ad2743d6df0
BLAKE2b-256 checksum
How to use checksums
4b783fdcbb2429dce0e46c54a3547523d6bb257470032e01c8bbec7ed4217b6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL genja_py-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.1 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
ceff054fc14ff1fe313dc79838b2475fcc7c19a7713174d711adb0d5ff8aad4d
BLAKE2b-256 checksum
How to use checksums
5eaa67fe779d414174ec4db9a24a23fd2ade139db066238424125ecb488365b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL genja_py-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7e98b0b1395693d08debdb72959d63136a31a83d8f38b65d8dcc849e87f08fd0
BLAKE2b-256 checksum
How to use checksums
715511ca21a072ef4cb6128c9c59733c2a26a0d3eb26e2aeb145b5346af3d56d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl

Download URL genja_py-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl
Size 2.9 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
d90d99773604f9fbbf5f3c67810ac6cfd0e61fc9f732fbd5f14e92029950ced1
BLAKE2b-256 checksum
How to use checksums
a4d7d0854d06f9c2fc1b9cd4d7dd2fec59de5f40980f8495bb5ee16dba9e48b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp311-cp311-win_amd64.whl

Download URL genja_py-0.5.0-cp311-cp311-win_amd64.whl
Size 2.6 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
ae0c3537acc02c268d6fc0f482b8230fa510ccae02ecf3ba07c9121041b9f3d4
BLAKE2b-256 checksum
How to use checksums
f8f98fb8386fb5776974be25b6776da3bf0a267518d844f8efbd21b24aba4251
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL genja_py-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.2 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2be81e435b08daa340d1c570db08d6e2d2b8977374761cd7dddf6b5fe18e7b03
BLAKE2b-256 checksum
How to use checksums
02b42a2bbedc744ef276e684b6113316d3c2bd28e12ad8326f679391c8b0529d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL genja_py-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9e219acfef8ce77da9d487fc9f9a9439e0aac5cfcdf8bc434a75c000c57f6ae7
BLAKE2b-256 checksum
How to use checksums
5d0e6ad9178cfb760129145cbbe75415bc8c317700d61403a22fa1e7f9fc8c2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl

Download URL genja_py-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl
Size 2.9 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
17c5684db65712d5ce98574089bfe8e4f995e8d50a7266c2d5ca935b67b3c0ee
BLAKE2b-256 checksum
How to use checksums
27a48379c42b2ee6139a188b08d7c822d4de8ee5d48d6f750664eb8ee37b9d3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp310-cp310-win_amd64.whl

Download URL genja_py-0.5.0-cp310-cp310-win_amd64.whl
Size 2.6 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
ac9a8c5f03d321e53c13308b8d57eab133c8e834c01ad0fccbda4890cbe9a70e
BLAKE2b-256 checksum
How to use checksums
5a4b077c55d7fd0e774896af459a22b3399e02266d2bb332cec714274078c720
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL genja_py-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.2 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
740e01609cd751e6e63ee08cece17760df9f3fc0002278f91ba5148ad6ef8eb8
BLAKE2b-256 checksum
How to use checksums
6cac55f743c0695948bb193f4f09c94d34ab75034b1220330856e8ef90113b49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL genja_py-0.5.0-cp310-cp310-macosx_11_0_arm64.whl
Size 2.8 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
32bd400a94135ebb613ddb69cac2edc65c41a1916db1951d1c8533da66327000
BLAKE2b-256 checksum
How to use checksums
e1069761a7e15f6cd87bc22787b28d9d67fa9385b6dd517dcd876637ea53a029
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / genja_py-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl

Download URL genja_py-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl
Size 2.9 MB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
a3dc1f992d458509e0e02d2baa4141296e152b7d2c8f7d274b76aed9e189f5fa
BLAKE2b-256 checksum
How to use checksums
a9314bb2d9f7a27da53af7bb54683694c4541ca0167c0bc98dd234d93fd0b5d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Security for genja-py 0.5.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.

Full provenance

All 21 files in this release have been uploaded with provenance metadata.

Select from 21 files

Attestation for genja_py-0.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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