Skip to main content

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)

Source distribution for pybearings 0.2.0
File Size Uploaded
pybearings-0.2.0.tar.gz 274.1 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pybearings 0.2.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.2.0 This release

3 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