Skip to content

Exceptions

Exception classes that map to Gemini status codes. Raise these exceptions in your handlers to return specific status codes.

Base Exception

GeminiException

GeminiException(message: str | None = None)

Bases: Exception

Base exception for Gemini error responses.

Subclasses define specific status codes for different error types. Raise these in handlers to return the appropriate Gemini status.

Example

@app.gemini("/page/{page_id}") def get_page(request: Request, page_id: int): page = db.get(page_id) if not page: raise NotFound(f"Page {page_id} not found") return page.content

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

Input Required (1x)

InputRequired

InputRequired(message: str | None = None)

Bases: GeminiException

Request requires user input (status 10).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

SensitiveInputRequired

SensitiveInputRequired(message: str | None = None)

Bases: GeminiException

Request requires sensitive user input (status 11).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

Temporary Failures (4x)

TemporaryFailure

TemporaryFailure(message: str | None = None)

Bases: GeminiException

Temporary failure - client may retry (status 40).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

ServerUnavailable

ServerUnavailable(message: str | None = None)

Bases: GeminiException

Server unavailable due to maintenance or overload (status 41).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

CGIError

CGIError(message: str | None = None)

Bases: GeminiException

CGI or similar process error (status 42).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

ProxyError

ProxyError(message: str | None = None)

Bases: GeminiException

Proxy request failed (status 43).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

SlowDown

SlowDown(message: str | None = None)

Bases: GeminiException

Rate limiting - client should slow down (status 44).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

Permanent Failures (5x)

PermanentFailure

PermanentFailure(message: str | None = None)

Bases: GeminiException

Permanent failure - client should not retry (status 50).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

NotFound

NotFound(message: str | None = None)

Bases: GeminiException

Resource not found (status 51).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

Gone

Gone(message: str | None = None)

Bases: GeminiException

Resource permanently removed (status 52).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

ProxyRequestRefused

ProxyRequestRefused(message: str | None = None)

Bases: GeminiException

Proxy request refused (status 53).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

BadRequest

BadRequest(message: str | None = None)

Bases: GeminiException

Malformed request (status 59).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

Client Certificate (6x)

CertificateRequired

CertificateRequired(message: str | None = None)

Bases: GeminiException

Client certificate required (status 60).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

CertificateNotAuthorized

CertificateNotAuthorized(message: str | None = None)

Bases: GeminiException

Certificate not authorized for this resource (status 61).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)

CertificateNotValid

CertificateNotValid(message: str | None = None)

Bases: GeminiException

Certificate is not valid (status 62).

Source code in src/xitzin/exceptions.py
def __init__(self, message: str | None = None) -> None:
    self.message = message or self.default_message
    super().__init__(self.message)