Skip to main content

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 asyncio networking loop.
  • Spartan Protocol Spec Compliant: Supports text/binary downloads and uploads (content-length specification), default port 300, and all status codes (2 Success, 3 Redirect, 4 Client Error, 5 Server 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 sybaritic command-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.mime_type}")
            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

sybaritic-0.0.3.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sybaritic-0.0.3-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file sybaritic-0.0.3.tar.gz.

File metadata

  • Download URL: sybaritic-0.0.3.tar.gz
  • Upload date:
  • Size: 11.9 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

Hashes for sybaritic-0.0.3.tar.gz
Algorithm Hash digest
SHA256 8e9c6ca7775b9de67034e8d511234f4a7af741765ed4045e054a693822a3b272
MD5 ffbb727f5de750d7219e13ef5cecabf8
BLAKE2b-256 44fe554874ece1be10e3a78c30d4527745b7e5c56d33807b8edd9f3b4b12e358

See more details on using hashes here.

File details

Details for the file sybaritic-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: sybaritic-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 14.7 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

Hashes for sybaritic-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2a6ed73770da7914b99a3075145177888c98317edfe7f3369e150bf211040200
MD5 2ea57008b06c34a7906d1e601118b1d1
BLAKE2b-256 9222a44e6a0a8d5cc85c2c1603d03300856d727bd31789f685b0b2ff94ebd41e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page