Open-RPC API interactive documentation.
Project description
Tabella
Open-RPC development framework with builtin interactive documentation.
Install
Tabella is on PyPI and can be installed with:
pip install tabella
Or with Poetry
poetry add tabella
Getting Started
A basic Tabella app:
import tabella
from openrpc import RPCServer
import uvicorn
rpc = RPCServer()
@rpc.method()
def echo(a: str, b: float) -> tuple[str, float]:
"""Echo parameters back in result."""
return a, b
app = tabella.get_app(rpc)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
Run this, then open http://localhost:8000/ in your browser to use the interactive documentation.
The Open-RPC API will be hosted over HTTP on http://localhost:8000/api
and over
WebSockets on ws://localhost:8000/api
.
Python Open-RPC
The RPC server hosted and documented by Tabella is powered by Python OpenRPC. Refer to the Python OpenRPC docs hosted here for advanced use.
Further Usage
Use Request Headers
The tabella.get_app
function accepts an argument, depends_middleware
, which is a
callable that will be passed HTTP request headers/WebSocket connection headers.
The depends_middleware
must return a dictionary, that dictionary will be passed to the
RPC Server as
Depends Arguments.
Example Using depends_middleware
to Pass API Key to Methods
So if an API key is being passed as a request header, and you would like to forward it
to a method you can set the depends_middleware
as such:
app = get_app(rpc, lambda h: {"api_key": h.get("api_key")})
Then, methods can get access to that value:
from openrpc import RPCServer, Depends
rpc = RPCServer()
@rpc.method()
def authorized_method(a: int, b: int, api_key: str = Depends) -> int:
if not my_function_to_check_permission(api_key):
raise PermissionError("Missing permission to call this method.")
return a + b
Set Servers
Set RPC servers manually to specify transport and paths to host the RPC server on, e.g.
from openrpc import RPCServer, Server
import tabella
rpc = RPCServer(
servers=[
Server(name="HTTP API", url="http://localhost:8000/my/api/path"),
Server(name="WebSocket API", url="ws://localhost:8000/my/api/path"),
]
)
app = tabella.get_app(rpc)
This app will host the RPCServer over HTTP and over WebSockets with the
path /my/api/path
.
Pydantic
Pydantic is used for request/response deserialization/serialization as well as schema generation. Pydantic should be used for any models as seen here in the Python OpenRPC Docs.
FastAPI
Tabella HTTP and WebSocket server hosting is done with
FastAPI. The app returned by tabella.get_app
is a
FastAPI app.
Inspired By
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.