tsileo / gemapi

Gemapi is a lightweight Gemini framework.

Home Page:https://git.sr.ht/~tsileo/gemapi

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

GemAPI

builds.sr.ht status

Gemini framework written in Python.

Still in early development, there's no releases yet

Features

  • Modern
    • as in it requires Python 3.10+
    • relies on type annotations (similar to FastAPI)
    • built on top of asyncio streams
  • Handle certificate generation and renewal
    • TLS 1.3 only with Ed25519 public key algorithm
    • Certificate is renewed automatically on expiration

Getting started

import asyncio

from gemapi.applications import Application
from gemapi.applications import Input
from gemapi.applications import Request
from gemapi.responses import NotFoundError
from gemapi.responses import Response

app = Application()

example_dot_com_router = app.router_for_hostname("example.com")


@app.route("/")
async def index(req: Request) -> Response:
    return Response(
        status_code=20,
        meta="text/gemini",
        body="toto",
    )


@app.route("/hello/{name:str}")
async def hello(req: Request, name: str) -> Response:
    if name == "not-found":
        raise NotFoundError("nope")

    return Response(
        status_code=20,
        meta="text/gemini",
        body=f"Hello {name}",
    )


@app.route("/search")
def search(req: Request, q: Input) -> Response:
    # Also support non coroutine functions
    return Response(
        status_code=20,
        meta="text/gemini",
        body=q.get_value(),
    )


@example_dot_com_router.route("/test")
def example_dot_com__test(req: Request) -> Response:
    return Response(
        status_code=20,
        meta="text/gemini",
        body="example.com test",
    )


asyncio.run(Server(app).run())

Contributing

All the development takes place on sourcehut, GitHub is only used as a mirror:

Contributions are welcomed.

License

The project is licensed under the ISC LICENSE (see the LICENSE file).

About

Gemapi is a lightweight Gemini framework.

https://git.sr.ht/~tsileo/gemapi

License:ISC License


Languages

Language:Python 100.0%