Skip to main content

genropy-kajenn

PyPI Tests Codecov Documentation Python License

genropy legacy sites on kajenn: a commander in the server, a supervised pool of workers each hosting one site, users pinned to a worker, no register daemon.

genropy-kajenn serves an existing, synchronous genropy site on an ASGI server. It replaces two pieces of the legacy stack at once: gnrwsgiserve, the one-process werkzeug launcher, and gnrdaemon, the register daemon reached over a wire.

One server process holds the front and the commander. Every worker is a process of its own hosting one unmodified GnrWsgiSite, born by fork out of a template process that builds that site once for the whole group. A user and all his pages live in one worker, and the spa_connection_id cookie — the connection id the site itself minted — is what sends every request of his back to it. A user who goes quiet is written to a freezer on disk and his worker gets the memory back; his next request wakes him wherever there is room.

The site register is answered in-process. The package declares the gnr.web:daemon entry point, and genropy installs it as gnr.web.daemon only when GNR_DAEMON_PROVIDER names the provider — which the command does for its own process, so the classic stack and this one can share one virtualenv. That gate needs a genropy later than 26.9.29 (see Installation).

Your site does not change: same root.py, same packages, same authentication, same pages.

Installation

pip install genropy-kajenn

kajenn and kajenn-orchestra are installed with it. genropy must be present at runtime and configured as usual (~/.gnr/environment.xml plus an existing site); it is deliberately not a declared dependency of this package.

genropy must be later than 26.9.29. The genropy the site runs on must contain commits 9810aa4f1a (the GNR_DAEMON_PROVIDER gate), 436c805006 (websocketHandlerClass, gnrwebsocket_kajenn.js) and add8e38b8d (the browser socket closed when its channel is refused). The latest PyPI release, genropy 26.9.29 (tag release-26.09.29), contains none of them; until a release does, they exist only on the develop branch. Details: genropy prerequisite.

Usage

gnrkajenn mysite -p 8080

mysite is the genropy instance name — the same you pass to gnrwsgiserve — or a path to a site directory. That is the whole launch: no worker count to declare and no single/pool selector. On macOS export PGGSSENCMODE=disable, because libpq negotiating Kerberos inside a forked child crashes it.

Site-wide counters, no authentication needed:

curl -s http://127.0.0.1:8080/metrics

Documentation

https://genropy-kajenn.readthedocs.io/en/latest/ — concepts, architecture with diagrams, the CLI, the configuration keys, the FAQ and troubleshooting. To build it locally see docs/building.md:

pip install -e ".[docs]"
sphinx-build -W --keep-going -b html docs docs/_build/html

Underneath: kajenn is the ASGI server, kajenn-orchestra the commander/worker orchestration.

Development

pip install -e ".[dev]"
pytest tests/
ruff check src/ tests/

The live tests host the test_invoice_pg instance of genropy and need:

  • a genropy checkout (the develop branch), installed with pip install -e "gnrpy[pgsql]" plus the requirements.txt of the gnrcore/adm package;
  • a genro configuration folder named by GENRO_GNRFOLDER, whose environment.xml points at that checkout (gnrhome, projects, packages, resources, webtools); the folder itself must be called gnr, because genropy reads its files under the folder's name (gnr.environment_xml), and kept outside any directory on sys.path, where it would shadow the gnr package;
  • a running PostgreSQL, reached with the libpq variables (PGUSER, PGPASSWORD, PGHOST);
  • in the configuration folder, instanceconfig/default.xml (an empty <packages/>) and siteconfig/default.xml (<jslib dojo_version="11" gnr_version="11"/> plus <resources><common/><js_libs/></resources>);
  • in environment.xml, a <static><js> block with dojo_11 at dojo_libs/dojo_11 (cdn="") and gnr_11 at gnrjs/gnr_d11 of the checkout;
  • the database created with createdb test_invoice_pg and then built with gnr app dbsetup test_invoice_pg.

The suite skips only for genropy not installed, a database driver not installed, an opt-in variable not set (BENCH_*, GNR_BENCH_*, GNR_WSX_TEST_URL) and an installed genropy without websocketHandlerClass. Any other missing prerequisite fails the run. .github/workflows/tests.yml builds all of the above.

License

Apache License 2.0 — Copyright 2025 Softwell S.r.l. See LICENSE and NOTICE.

Metadata

Release files for genropy-kajenn 0.5.1

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

Source distribution (sdist)

Source distribution for genropy-kajenn 0.5.1
File Size Uploaded
genropy_kajenn-0.5.1.tar.gz 514.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for genropy-kajenn 0.5.1
File Interpreter ABI Platform
genropy_kajenn-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 602.4 kB

Release files / genropy_kajenn-0.5.1.tar.gz

Download URL genropy_kajenn-0.5.1.tar.gz
Size 514.0 kB
Tags Source
SHA-256 checksum
How to use checksums
404d4ef9b10251d6e72d6ee73cf16efd5edd29dbedcb4ba269509c88e456ff02
BLAKE2b-256 checksum
How to use checksums
2b7edac570d205507da2d32f8d68a78114d3f7d70de23547e7895987c58ec767
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 14, 2026.

Transparency log

Release files / genropy_kajenn-0.5.1-py3-none-any.whl

Download URL genropy_kajenn-0.5.1-py3-none-any.whl
Size 88.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3fb9629a65b20cd665a3e3c9ca14285ca1a7e925279050e69bec47f957ba8f2e
BLAKE2b-256 checksum
How to use checksums
4b6caf0960b929f207f496204382cdf08727b75e282bf178cd6d473b6c0bf919
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 14, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.2

2 release files

This release

0.5.1 This release

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.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