Sybaritic: Async Spartan Protocol Client Library
Sybaritic is an async-first, fully type-hinted Python client library for the Spartan Protocol.
Features
- Async First: Built on top of Python's standard
asyncionetworking loop. - Spartan Protocol Spec Compliant: Supports text/binary downloads and uploads (
content-lengthspecification), default port300, and all status codes (2Success,3Redirect,4Client Error,5Server Error). - Type Safe: Fully typed API with PEP 561 compliance (
py.typed). - SpartanURI Representation: Rich URI class to parse, inspect, validate, and manipulate Spartan URIs (including punycode support for IDNs).
- Auto Redirect Handling: Automatically handles redirects (
status 3) with loop detection and max redirect threshold limits. - Zero Heavy Dependencies: Built on top of Python's standard library.
- CLI Utility: Includes a
sybariticcommand-line utility out of the box.
Installation
sybaritic requires Python 3.12 or later and can be installed with uv or pip:
With uv:
uv add sybaritic
With pip:
pip install sybaritic
Quick Start
1. Make a Simple Request
Use Client with standard async context managers to query a Spartan server:
import asyncio
from sybaritic import Client, SybariticError
async def main():
async with Client() as client:
try:
# Query a Spartan document (defaults to port 300)
response = await client.request("spartan://spartan.mozz.us/specification.gmi")
print(f"Status: {response.status} ({response.meta})")
print(f"Content Type: {response.mimetype}")
print(response.text)
except SybariticError as exc:
print(f"Error querying Spartan server: {exc}")
asyncio.run(main())
2. Upload Data to a Server
Post data to a Spartan resource:
import asyncio
from sybaritic import Client
async def main():
async with Client() as client:
# Send data payload
response = await client.post("spartan://example.com/guestbook", data="Hello Spartan!")
print(response.text)
asyncio.run(main())
Command Line Interface (CLI)
sybaritic provides a command-line interface:
# Request a resource
sybaritic spartan://spartan.mozz.us/specification.gmi
# Output headers with body
sybaritic -i spartan://spartan.mozz.us/specification.gmi
# Upload data payload
sybaritic spartan://example.com/submit "My comment text"
# Post payload from a file
sybaritic spartan://example.com/upload -f payload.txt
Running Tests
Run the test suite using uv:
uv run pytest
License
MIT License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sybaritic-0.0.1.tar.gz.
File metadata
- Download URL: sybaritic-0.0.1.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
debeecb1c6c21b932275aec92169c92e5a4db788477b67a903cf301bee26c960
|
|
| MD5 |
e7255c6fec4a9fcb9d603f7746c5b67f
|
|
| BLAKE2b-256 |
9f4e7d267d9eb579199904905bdd2e05f74551264047bb7925cd645b35e222b5
|
File details
Details for the file sybaritic-0.0.1-py3-none-any.whl.
File metadata
- Download URL: sybaritic-0.0.1-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6a014210cf6ae50c16cad0a84d57b9b22e704621fed2cd14f2bea6d47edb92b
|
|
| MD5 |
a02e736e306cb8ed3d446ff843b5acfe
|
|
| BLAKE2b-256 |
d58e281bf926dd5660dd9e5b0136b18a4d6283ada16e8b4d04be67a91a4be532
|