Protocol API Reference¶
The protocol module provides classes and utilities for working with the Spartan protocol.
Quick example¶
from teyaotlani import (
SpartanRequest,
SpartanResponse,
StatusCode,
is_success,
is_redirect,
is_error,
)
# Check response status
if is_success(response.status):
print(f"Content type: {response.meta}")
print(response.body)
elif is_redirect(response.status):
print(f"Redirect to: {response.meta}")
elif is_error(response.status):
print(f"Error: {response.meta}")
Request and Response¶
SpartanRequest¶
teyaotlani.SpartanRequest
dataclass
¶
Represents a Spartan protocol request.
Request format: host SP path SP content-length CRLF [data-block]
Unlike Gemini which sends a full URL, Spartan sends: - hostname (no scheme, no port) - absolute path (starting with /) - content length in bytes
Attributes:
| Name | Type | Description |
|---|---|---|
hostname |
str
|
Target hostname (no scheme, no port). |
path |
str
|
Absolute path starting with /. |
content_length |
int
|
Size of content in bytes (0 for GET requests). |
content |
bytes
|
Optional data block (for queries/uploads). |
Examples:
>>> request = SpartanRequest.from_line("example.com /index.gmi 0")
>>> request.hostname
'example.com'
>>> request.path
'/index.gmi'
>>> request.is_upload
False
Attributes¶
query
property
¶
Get query string from content if this is a query request.
In Spartan, query strings are sent as the data block. Returns the content decoded as UTF-8 if present.
Functions¶
from_line
classmethod
¶
Parse a Spartan request from a request line.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line
|
str
|
The request line (without CRLF). Format: "host path content-length" |
required |
Returns:
| Type | Description |
|---|---|
SpartanRequest
|
A SpartanRequest instance. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the request line is invalid or malformed. |
Examples:
Source code in src/teyaotlani/protocol/request.py
SpartanResponse¶
teyaotlani.SpartanResponse
dataclass
¶
Represents a Spartan protocol response.
Response format: status SP meta CRLF [body]
Attributes:
| Name | Type | Description |
|---|---|---|
status |
int
|
Single-digit status code (2, 3, 4, or 5). |
meta |
str
|
Status-dependent metadata string. - For success (2): MIME type (e.g., "text/gemini") - For redirect (3): Redirect URL - For errors (4, 5): Error message |
body |
str | bytes | None
|
Response body content (only present for success responses). |
url |
str | None
|
Optional URL this response came from. |
Examples:
>>> response = SpartanResponse(status=2, meta="text/gemini", body="# Hello")
>>> response.is_success()
True
>>> response.mime_type
'text/gemini'
Attributes¶
mime_type
property
¶
Get the MIME type from a success response.
Returns:
| Type | Description |
|---|---|
str | None
|
The MIME type if this is a success response, None otherwise. |
redirect_url
property
¶
Get the redirect URL from a redirect response.
Returns:
| Type | Description |
|---|---|
str | None
|
The redirect URL if this is a redirect response, None otherwise. |
charset
property
¶
Extract charset from MIME type parameters, defaulting to utf-8.
Returns:
| Type | Description |
|---|---|
str
|
The charset specified in the meta field, or 'utf-8' if not specified. |
Functions¶
is_success ¶
is_redirect ¶
to_bytes ¶
Serialize response to bytes for transmission.
Returns:
| Type | Description |
|---|---|
bytes
|
ASCII-encoded header followed by optional body. |
Source code in src/teyaotlani/protocol/response.py
success
classmethod
¶
Create a success response.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mime_type
|
str
|
The MIME type of the content. |
required |
body
|
str | bytes
|
The response body. |
required |
Returns:
| Type | Description |
|---|---|
SpartanResponse
|
A SpartanResponse with status 2. |
Source code in src/teyaotlani/protocol/response.py
redirect
classmethod
¶
Create a redirect response.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
url
|
str
|
The redirect URL. |
required |
Returns:
| Type | Description |
|---|---|
SpartanResponse
|
A SpartanResponse with status 3. |
client_error
classmethod
¶
Create a client error response.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
The error message. |
required |
Returns:
| Type | Description |
|---|---|
SpartanResponse
|
A SpartanResponse with status 4. |
Source code in src/teyaotlani/protocol/response.py
server_error
classmethod
¶
Create a server error response.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
The error message. |
required |
Returns:
| Type | Description |
|---|---|
SpartanResponse
|
A SpartanResponse with status 5. |
Source code in src/teyaotlani/protocol/response.py
__str__ ¶
Return human-readable string representation.
Source code in src/teyaotlani/protocol/response.py
Status Codes¶
StatusCode¶
teyaotlani.StatusCode ¶
Bases: IntEnum
Spartan protocol status codes.
Status codes
2 - Success: Meta contains MIME type, body follows 3 - Redirect: Meta contains redirect URL 4 - Client error: Meta contains error message 5 - Server error: Meta contains error message
Status Helper Functions¶
is_success¶
teyaotlani.is_success ¶
is_redirect¶
teyaotlani.is_redirect ¶
is_error¶
teyaotlani.is_error ¶
interpret_status¶
teyaotlani.interpret_status ¶
Return human-readable status category name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
status
|
int
|
Single-digit status code (2-5). |
required |
Returns:
| Type | Description |
|---|---|
str
|
Human-readable status category. |
Examples: