A web based REST API for the duit library.
Project description
REST for Duit
A web-based REST API for duit datafields.
This is an addon module for the data ui toolkit (duit) which adds REST API support for DataFields.
Installation
The package can be installed directly from PyPI.
pip install duit-rest
Documentation
Duit-rest uses FastAPI as REST backend to handle HTTP requests. The main class is the
RESTService which handles the HTTP server and maps the annotated DataFields to the corresponding endpoints.
RESTEndpoint
It is possible to annotate existing DataFields with the RESTEndpoint annotation. This annotation later tells the
RESTService if the field has to be exposed over REST. It is recommended to gather all DataFields in a single object:
from duit_rest.RESTEndpoint import RESTEndpoint
class Config:
def __init__(self):
self.name = DataField("Cat") | RESTEndpoint()
By default, the name of the variable (e.g. name) is used as REST endpoint identifier. It is possible to change the
name through the RESTEndpoint annotation.
self.name = DataField("Cat") | RESTEndpoint(name="the-cats-name")
RESTService
The RESTService handles the HTTP server and mapping with the DataFields. Here is a simple example on how to create a
RESTService, add the previously defined config and start the service.
# create an actual instance of the config
config = Config()
# create a rest service
rest_service = RESTService()
# add the config object (create mapping) under the route "/config"
rest_service.add_route("/config", config)
# run the service
rest_service.run()
Settings
The RESTService has several default arguments that can be changed before the service is started:
# RESTService parameters and their default values
host: str = "0.0.0.0", # on which interface the service is running
port: int = 9420, # on which port the service is running
title: str = "REST API" # title of the API
Routes
It is possible to add various objects to the RESTService, each with a unique route (address).
rest_service.add_route("/config", config)
Each DataField is accessible under this route, so for example the name field would be available at /config/name.
API Usage
Getting values:
# Get entire configuration
GET http://localhost:9420/config
# Get specific field
GET http://localhost:9420/config/name
Setting values:
# Update entire configuration
POST http://localhost:9420/config
Content-Type: application/json
{
"name": "NewName",
"age": 25
}
# Update specific field
GET http://localhost:9420/config/name?value="NewName"
Start
To start the service, call the run() method. This is a blocking method that doesn't return until the service is
shutdown:
# run blocking
rest_service.run()
To start the service in its own thread, set the blocking argument to `False:
# run non-blocking
thread = rest_service.run(blocking=False)
About
Copyright (c) 2025 Florian Bruggisser
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.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file duit_rest-0.1.0-py3-none-any.whl.
File metadata
- Download URL: duit_rest-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a63e14d22dcc89d7c3ab2e88a759ffba15f89279f060d7284e7e4b1405c92c7
|
|
| MD5 |
c104d18f517f16ed8f3f405a050d64ef
|
|
| BLAKE2b-256 |
289f9891d1134d4d6ecdc7070f493919c165134f5251d4717f3e7dffb4873bf7
|