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=Truewithdry_run(...)ordry_run_async(...)when operators should be able to preview a task. - Use
idempotency=IdempotencyMode.CHECKoridempotency=IdempotencyMode.CHECK_AND_VERIFYwithcheck(...)orcheck_async(...)when the task can inspect whether a host is already in the desired state. - Use
session_verification=SessionVerificationConfig(...)withconnection_plugin_namewhen 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 onlygenja.inventory_full(): transformed hosts, groups, and defaultsgenja.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)
| 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)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logSecurity 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.
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 logA 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.