A test implementation of LabThings using FastAPI
Project description
labthings-fastapi
A FastAPI based library to implement a Web of Things interface for laboratory hardware using Python. This is a ground-up rewrite of python-labthings, replacing Flask 1 and Marshmallow with FastAPI and Pydantic. It is the underlying framework for v3 of the OpenFlexure Microscope software.
Features include:
- Better alignment with the Web of Things standard:
Extensions
are gone, everything is now aThing
Thing
s are classes, with properties and actions defined exactly once- Various improvements to TD generation and validation with
pydantic
- Cleaner API
- Datatypes of action input/outputs and properties are defined with Python type hints
- Actions are defined exactly once, as a method of a
Thing
class - Properties and actions are declared using decorators (or descriptors if that's preferred)
- Dependency injection is used to manage relationships between Things and dependency on the server
- Async HTTP handling
- Starlette (used by FastAPI) can handle requests asynchronously - potential for websockets/events (not used much yet)
Thing
code is still, for now, threaded. I intend to make it possible to write async things in the future, but don't intend it to become mandatory
- Smaller codebase
- FastAPI more or less completely eliminates OpenAPI generation code from our codebase
- Thing Description generation is very much simplified by the new structure (multiple Things instead of one massive Thing with many extensions)
- Extensive testing
- FastAPI/Starlette have nice test provision, so the vast majority of the codebase is already covered
Installation
You can install this repository with pip
, either clone it and run pip install -e .[dev]
to work on it, or just pip install https://gitlab.com/rwb27/labthings-fastapi.git
. It will be published on PyPI in the near future, initially as labthings-fastapi
. It may at some point be renamed to labthings
v2.
Developer notes
The code is linted with ruff .
, type checked with mypy src
, and tested with pytest
. These all run in CI with GitHub Actions. The codebase is not even v0.0.1
yet so it's still subject to summary rearrangement.
Demo
See the examples folder for a runnable demo.
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 Distribution
Built Distribution
Hashes for labthings_fastapi-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39a733c8a41b6b418e1f4a162e7344a7b5b630e80459d5b8579d447b19c99902 |
|
MD5 | 46b3dde27a4752cc1a4b7086dd7b1820 |
|
BLAKE2b-256 | c0ec86c275040ccb7c9371955ab1e8c70a98b96ea69081717b9076fe0edf3690 |