labthings_fastapi.server.config_model

Pydantic models to enable server configuration to be loaded from file.

The models in this module allow ThingConfig dataclasses to be constructed from dictionaries or JSON files. They also describe the full server configuration with ServerConfigModel. These models are used by the cli module to start servers based on configuration files or strings.

Attributes

ThingImportString

ThingName

ThingsConfig

Exceptions

ThingImportFailure

Failed to import Thing. Raise with import traceback.

Functions

contain_import_errors(→ Any)

Prevent errors during import from causing odd validation errors.

normalise_things_config(...)

Ensure every Thing is defined by a ThingConfig object.

Module Contents

exception labthings_fastapi.server.config_model.ThingImportFailure

Bases: BaseException

Failed to import Thing. Raise with import traceback.

Initialize self. See help(type(self)) for accurate signature.

labthings_fastapi.server.config_model.contain_import_errors(value: Any, handler: pydantic.ValidatorFunctionWrapHandler) Any

Prevent errors during import from causing odd validation errors.

This is used to wrap the pydantic ImportString validator, and ensures that any module that won’t import shows up with a single clear error.

Parameters:
  • value – The value being validated.

  • handler – The validator handler.

Returns:

The validated value.

Raises:
  • ThingImportFailure – if an import error occurs, with the stack trace from retrying the import.

  • Exception – In the unlikely event that the import error cannot be reproduced

labthings_fastapi.server.config_model.ThingImportString
labthings_fastapi.server.config_model.ThingName
type labthings_fastapi.server.config_model.ThingsConfig = Mapping[ThingName, ThingConfig | ThingImportString]
labthings_fastapi.server.config_model.normalise_things_config(things: ThingsConfig) collections.abc.Mapping[ThingName, ThingConfig]

Ensure every Thing is defined by a ThingConfig object.

Things may be specified either using a ThingConfig object, or just a bare Thing subclass, if the other parameters are not needed. To simplify code that uses the configuration, this function wraps bare classes in a ThingConfig so the values are uniformly typed.

Parameters:

things – A mapping of names to Things, either classes or ThingConfig objects.

Returns:

A mapping of names to ThingConfig objects.

Raises:

ValueError – if a Python object is passed that’s neither a type nor a dict.