Sextile
A framework for Viewdata services, in Python. Sextile is to a Prestel-style service what Flask or Starlette is to a web application: it owns the connection, the session, the page numbering and the frames on the wire, and you write what the pages say. The documentation opens with what Viewdata is.
uv add sextile # or pip install sextile
from sextile import Page, PageRequest, Sextile, notice_page
app = Sextile(name="My service")
@app.page("1", name="main", keywords=("MAIN",))
async def main(request: PageRequest) -> Page:
return notice_page(request, "Hello, 1981.")
sextile serve my_service:app # answer calls on port 16650
nc localhost 16650 # and call it
What it gives you
Routing by page number. Patterns of literal digits and named fields, so
82{post_id:int} answers every page beginning 82 and hands the rest to the
handler already read as an integer. app.address_for("post", post_id=...) reads
the same pattern backwards, so a page linking to another does not respell the
numbering. Keywords — *MAIN# for *1# — are the route's keywords=.
Sessions that last as long as the line. A Viewdata terminal is a display and nothing more: it holds the frame on screen and nothing else. So the server holds where the reader is, what they have seen, and the menu they came through, and a handler is a function of a request rather than of a number. The reasoning is in the explanation.
The wire, measured rather than assumed. Attributes travel as ESC + code +
0x40, a frame is 24 rows of 40 that wraps at the bottom-right back to the top
left, RETURN transmits 0x5F. Those were settled by driving real Commstar under
an emulator, and are written up in
the encoding reference.
Nobody is cut off without warning. After half the idle timeout a silent
caller's footer becomes a bar that drains, reading Press a key. The first key
dismisses it and does nothing else, so it is safe to press whatever comes to
hand. Every service gets this without writing anything.
Forty columns, accounted for. A colour attribute occupies a character cell,
so a row that changes colour twice has thirty-eight columns for text. Canvas
does that arithmetic so nothing above it has to.
Drawable without a Beeb. sextile render draws any page four ways: ansi
colour as the Beeb would draw it, grid for the character and attribute layers,
bytes for the wire stream, and html for a self-contained web page with the
Bedstead font embedded, opening from disk with no server.
Documentation
The full documentation is at rob-smallshire.github.io/sextile: the tutorial builds a service step by step, the how-to guides answer particular questions, the reference states the surface, the glossary and the wire, and the explanation says why the framework is shaped as it is.
Status
Young, and extracted from a working service rather than designed in the abstract. Three applications use it in the source repository: a real Stardot forum reader, a weather service, and a calendar written to be read.
MIT licensed. The bundled font faces and the Bedstead font are third-party material; see NOTICE.md.
Metadata
Release files for sextile 0.5.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sextile-0.5.2.tar.gz | 396.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sextile-0.5.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 685.4 kB
Release files / sextile-0.5.2.tar.gz
| Download URL | sextile-0.5.2.tar.gz |
|---|---|
| Size | 396.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4fe819de1824aec985f74d5e5d61f792e024e9b1724025029cb7eaff93c82b96
|
|
BLAKE2b-256 checksum How to use checksums |
b710958b57dabf830a6ba87ed60c736b4953aeca61d19c47ac7e41f9e217c246
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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 / sextile-0.5.2-py3-none-any.whl
| Download URL | sextile-0.5.2-py3-none-any.whl |
|---|---|
| Size | 288.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
361157d9f892157e224cf0e5441d6e573a4ccd1ef1fb43d26e91dcc1c369448d
|
|
BLAKE2b-256 checksum How to use checksums |
39bae5727fa45644cebe86781757e6cbcd8a9aba2bb4f968399362f9a5219bc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","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}
|