Welcome to labthings-fastapi’s documentation!

labthings-fastapi implements 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:

  • Alignment with the W3C Web of Things standard (see Core Concepts)
    • Things 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)

Installation

pip install labthings-fastapi

Indices and tables