pyBearings
Bearings, the Free Pascal HTTP/1.1 server, as a WSGI server for Python. Linux only (x86_64 and ARM64); free-threaded Python works.
from bearings import serve
serve(app, port=8000) # until SIGINT or SIGTERM
The event loops are Bearings' own threads and never run Python. Every request runs the WSGI app on a thread of the worker pool, so the app may block.
Server(app, **options) starts and stops a server from code (tests, a process that does other things): start(), port, stop(grace), wait(), metrics(), or with Server(app) as server:. Its docstring lists the options: the address, a Unix socket or an inherited socket, the number of event loops and workers, a queue limit answered with 503, a connection limit, the access log and the metrics.
With websocket=, a WebSocketHandler, the server also accepts WebSockets on ws_path: its opened, received and closed run on the worker pool, one event at a time per connection, and ws_send, ws_close, subscribe, unsubscribe and publish reach the connections by id, from any thread. A publish goes to every subscriber of a topic, encoded once.
With raw=True, the server calls app(head, input, listener) instead of a WSGI app. head is the request head as Bearings sends it (the method, path, query, version, client address and port, then a name and a value per header, each followed by "\0"), input is the body and listener says where the server listens. The app returns (status, headers, body). A framework that builds its own request object saves building an environ only to take it apart again. RawHandler describes the arguments.
The package loads libbearings.so (src/capi/ in this repository) with cffi in ABI mode, so it needs no C compiler: building the wheel needs Free Pascal 3.2.2 (fpc), which hatch_build.py runs.
Development
uv sync --python 3.14t # compiles libbearings.so into src/bearings/
uv run pytest
Wheels
uv build --wheel builds the wheel for this machine's CPU (manylinux_2_34_x86_64 here).
The manylinux tag is the newest glibc symbol version libbearings.so needs, read with objdump -T (binutils).
For ARM64, give it the cross compiler of tools/get-cross-aarch64.sh; the wheel is tagged for the CPU that compiler targets:
PYBEARINGS_FPC=../build/tools/bin/fpc-aarch64 uv build --wheel # manylinux_2_34_aarch64
uv build also builds the sdist, which holds the Pascal sources of ../src/ in pascal/, and builds the wheel from it.
Installing from the sdist needs Free Pascal 3.2.2 and binutils.
./test-aarch64.sh does that, installs the wheel in a free-threaded CPython
for ARM64 run under qemu-user, and runs the tests against it. qemu-user runs
on the host's memory model, which is stronger than ARM's: it shows that the
wheel builds, loads and works, not races that only ARM hardware has.
Metadata
Release files for pybearings 0.2.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 | |
|---|---|---|---|
| pybearings-0.2.0.tar.gz | 274.1 kB | Details |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pybearings-0.2.0-py3-none-manylinux_2_34_x86_64.whl | Python 3 | none | Linux glibc 2.34+ x86-64 | Details |
| pybearings-0.2.0-py3-none-manylinux_2_34_aarch64.whl | Python 3 | none | Linux glibc 2.34+ ARM64 | Details |
Total release size: 1.5 MB
Release files / pybearings-0.2.0.tar.gz
| Download URL | pybearings-0.2.0.tar.gz |
|---|---|
| Size | 274.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
80ad3e91c72f7a0bee8746478a12a80a7058ad0ff5f6068f86e2414a84ebc8ed
|
|
BLAKE2b-256 checksum How to use checksums |
8123fc180ad796f6832b4a5566db689828ba09721945a93e1f09cd6d227ef0de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pybearings-0.2.0-py3-none-manylinux_2_34_x86_64.whl
| Download URL | pybearings-0.2.0-py3-none-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 609.7 kB |
| Tags | Linux glibc 2.34+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
0ad4c491afd6c6c80b25cef962122b5164a51bcbc9a6af786545662dbb6274e9
|
|
BLAKE2b-256 checksum How to use checksums |
0548c5054a443363d743b8e40776c4afcb8dd329b2b91e5594c73917faa16d8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pybearings-0.2.0-py3-none-manylinux_2_34_aarch64.whl
| Download URL | pybearings-0.2.0-py3-none-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 605.0 kB |
| Tags | Linux glibc 2.34+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
b2591ecf5bc10b70a92b05d19cbaa952bbd3de603df0cd8ff7f76026d3fd7c16
|
|
BLAKE2b-256 checksum How to use checksums |
879664fdc1cb5a1ec5085a4dde88e8a1622ba6e5e81f460cb6c5d42a6fc8a8f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|