Skip to main content

A test implementation of LabThings using FastAPI

Reason this release was yanked:

A bug means this version does not work

Project description

codecov Documentation Status

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 a Thing
    • 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)
  • 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.1 yet so it's still subject to summary rearrangement.

Demo

See the examples folder for a runnable demo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

labthings_fastapi-0.0.3.tar.gz (60.7 kB view details)

Uploaded Source

Built Distribution

labthings_fastapi-0.0.3-py3-none-any.whl (62.6 kB view details)

Uploaded Python 3

File details

Details for the file labthings_fastapi-0.0.3.tar.gz.

File metadata

  • Download URL: labthings_fastapi-0.0.3.tar.gz
  • Upload date:
  • Size: 60.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for labthings_fastapi-0.0.3.tar.gz
Algorithm Hash digest
SHA256 e55e5d6291d64e5d9a99d4cbecf32531dbce2b50cf3eacde32443e99e7e47efb
MD5 2b1ac8f39dbb1f11560f94da058e0583
BLAKE2b-256 14f9e313481c127d9932e5d770bb1ec160e092e96c6bb57183809adfafc4f926

See more details on using hashes here.

File details

Details for the file labthings_fastapi-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for labthings_fastapi-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 d4cef0dce6e9f7d10c0f2ac81640d659ab72d147eb31c180e43146a4c92100e6
MD5 17c21c4cf518b44c31a7fb5483881ed0
BLAKE2b-256 c4f190c7ecea7da8e78ce7ff2cf182b33681d26fa02961b62e33fccfbb37cabb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page