MADSci Node Types.
Classes¶
Node(**data: Any)A runtime representation of a MADSci Node used in a Workcell.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
info: madsci.common.types.node_types.NodeInfo | None:model_config:node_url: pydantic.networks.AnyUrl:reservation: madsci.common.types.node_types.NodeReservation | None:state: dict[str, typing.Any] | None:status: madsci.common.types.node_types.NodeStatus | None:NodeCapabilities(**data: Any)Capabilities of a MADSci Node.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.node_types.NodeClientCapabilities
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
admin_commands: set[madsci.common.types.admin_command_types.AdminCommands]:events: bool | None:model_config:resources: bool | None:Methods¶
order_admin_commands(self, admin_commands: set[madsci.common.types.admin_command_types.AdminCommands]) ‑> list[madsci.common.types.admin_command_types.AdminCommands]- Ensure sorted admin commands.
NodeClientCapabilities(**data: Any)Capabilities of a MADSci Node Client. Default values are None, meaning the capability is not explicitly set. If a capability is set to False, it is explicitly not supported.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Descendants¶
madsci.common.types.node_types.NodeCapabilities
Class variables¶
action_files: bool | None:get_action_history: bool | None:get_action_result: bool | None:get_action_status: bool | None:get_info: bool | None:get_log: bool | None:get_resources: bool | None:get_state: bool | None:get_status: bool | None:model_config:send_action: bool | None:send_admin_commands: bool | None:set_config: bool | None:Methods¶
exclude_unset_by_default(self, nxt: pydantic_core.core_schema.SerializerFunctionWrapHandler, info: pydantic_core.core_schema.SerializationInfo) ‑> dict[str, typing.Any]- Exclude unset fields by default.
NodeConfig(**kwargs: Any)Basic Configuration for a MADSci Node.
Initialize settings with walk-up file discovery.
Configuration file paths (YAML, JSON, TOML, .env) are resolved via walk-up discovery from a starting directory. Each filename walks up independently, so
node.settings.yamlcan resolve in the node dir whilesettings.yamlresolves in the lab root.The starting directory is determined by (in priority order):
_settings_dirkeyword argumentMADSCI_SETTINGS_DIRenvironment variableCurrent working directory (default)
Args: _settings_dir: Starting directory for walk-up file discovery. **kwargs: Forwarded to
BaseSettings.__init__.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseSettings
pydantic_settings.main.BaseSettings
pydantic.main.BaseModel
Descendants¶
madsci.common.types.node_types.RestNodeConfig
Class variables¶
enable_registry_resolution: bool:lab_url: pydantic.networks.AnyUrl | None:module_name: str | None:module_version: str | None:node_id: str | None:node_name: str | None:node_type: madsci.common.types.node_types.NodeType | None:registry_lock_timeout: float:state_update_interval: float | None:status_update_interval: float | None:NodeDefinition(**data: Any)Definition of a MADSci Node, a unique instance of a MADSci Node Module.
.. deprecated:: 0.7.0 Definition files are removed. Use :class:
NodeConfiginstead.Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Descendants¶
madsci.common.types.node_types.NodeInfo
Class variables¶
capabilities: madsci.common.types.node_types.NodeCapabilities | None:model_config:module_name: str:module_version: pydantic_extra_types.semantic_version.SemanticVersion:node_description: str | None:node_id: str:node_name: str:node_type: madsci.common.types.node_types.NodeType:Methods¶
is_ulid(id: str, info: pydantic_core.core_schema.ValidationInfo) ‑> str- Validates that a string field is a valid ULID.
model_post_init(self, _NodeDefinition__context: Any) ‑> None- Emit deprecation warning when NodeDefinition is instantiated directly.
NodeInfo(**data: Any)Information about a MADSci Node.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.node_types.NodeDefinition
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
actions: dict[str, madsci.common.types.action_types.ActionDefinition]:config: Any | None:config_schema: dict[str, typing.Any] | None:intrinsic_locations: list[madsci.common.types.node_types.NodeIntrinsicLocationDefinition]:location_representation_templates: list[madsci.common.types.node_types.NodeRepresentationTemplateDefinition]:model_config:node_url: pydantic.networks.AnyUrl | None:Static methods¶
from_config(config: madsci.common.types.node_types.NodeConfig, *, node_name: str | None = None, module_name: str | None = None, module_version: str | None = None, node_definition: madsci.common.types.node_types.NodeDefinition | None = None) ‑> madsci.common.types.node_types.NodeInfoCreate a NodeInfo from settings and optional module metadata.
This factory builds a NodeInfo from
NodeConfigsettings fields without requiring a separateNodeDefinitionfile. Identity fields are resolved with the following priority:Explicit keyword arguments (
node_name,module_name, etc.)Values from
configidentity fields (if set)Values from
node_definition(if provided, for backwards compat)Sensible defaults
Args: config: The node’s configuration settings. node_name: Explicit node name override. module_name: Explicit module name override. module_version: Explicit module version override. node_definition: Optional legacy definition for backwards compat.
Returns: NodeInfo: A new NodeInfo instance.
from_node_def_and_config(node: madsci.common.types.node_types.NodeDefinition, config: madsci.common.types.node_types.NodeConfig | None = None) ‑> madsci.common.types.node_types.NodeInfoCreate a NodeInfo from a NodeDefinition and config.
.. deprecated:: 0.7.0 Use :meth:
from_configwhen possible. This method is maintained for backwards compatibility with existing code that passes aNodeDefinitionobject.
NodeIntrinsicLocationDefinition(**data: Any)A location intrinsic to this node’s hardware, auto-created on startup.
The location_name is automatically prefixed with ‘{node_name}.’ to ensure uniqueness across node instances. For example, location_name=“deck_1” on a node named “liquidhandler_1” becomes “liquidhandler_1.deck_1”.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
allow_transfers: bool:description: str | None:location_name: str:model_config:representation_overrides: dict[str, typing.Any]:representation_template_name: str:resource_template_name: str | None:resource_template_overrides: dict[str, typing.Any] | None:tags: list[str] | None:NodeRepresentationTemplateDefinition(**data: Any)Declarative location representation template definition for node startup registration.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
default_values: dict[str, typing.Any]:description: str | None:model_config:required_overrides: list[str] | None:schema_def: dict[str, typing.Any] | None:tags: list[str] | None:template_name: str:version: str:NodeReservation(**data: Any)Reservation of a MADSci Node.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
created: datetime.datetime:end: datetime.datetime:model_config:owned_by: madsci.common.types.auth_types.OwnershipInfo:start: datetime.datetime:Methods¶
check(self, ownership: madsci.common.types.auth_types.OwnershipInfo) ‑> bool- Check if the reservation is 1.) active or not, and 2.) owned by the given ownership.
NodeResourceTemplateDefinition(**data: Any)Declarative resource template definition for node startup registration.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
description: str:model_config:required_overrides: list[str] | None:resource: madsci.common.types.resource_types.Resource | madsci.common.types.resource_types.Asset | madsci.common.types.resource_types.Consumable | madsci.common.types.resource_types.DiscreteConsumable | madsci.common.types.resource_types.ContinuousConsumable | madsci.common.types.resource_types.Container | madsci.common.types.resource_types.Collection | madsci.common.types.resource_types.Row | madsci.common.types.resource_types.Grid | madsci.common.types.resource_types.VoxelGrid | madsci.common.types.resource_types.Stack | madsci.common.types.resource_types.Queue | madsci.common.types.resource_types.Pool | madsci.common.types.resource_types.Slot:tags: list[str] | None:template_name: str:version: str:NodeSetConfigResponse(**data: Any)Response from a Node Set Config Request
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
model_config:success: bool:NodeStatus(**data: Any)Status of a MADSci Node.
Create a new model by parsing and validating input data from keyword arguments.
Raises [
ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.selfis explicitly positional-only to allowselfas a field name.Ancestors (in MRO)¶
madsci.common.types.base_types.MadsciBaseModel
pydantic.main.BaseModel
Class variables¶
busy: bool:config_values: dict[str, typing.Any]:disconnected: bool:errored: bool:errors: list[madsci.common.types.base_types.Error]:initializing: bool:locked: bool:model_config:paused: bool:running_actions: set[str]:stopped: bool:waiting_for_config: set[str]:Instance variables¶
description: str- A description of the node’s status.
ready: bool- Whether the node is ready to accept actions.
NodeType(*args, **kwds)The type of a MADSci node.
Ancestors (in MRO)¶
builtins.str
enum.Enum
Class variables¶
COMPUTE:DATA_MANAGER:DEVICE:EVENT_MANAGER:RESOURCE_MANAGER:TRANSFER_MANAGER:WORKCELL_MANAGER:RestNodeConfig(**kwargs: Any)Default Configuration for a MADSci Node that communicates over REST.
Initialize settings with walk-up file discovery.
Configuration file paths (YAML, JSON, TOML, .env) are resolved via walk-up discovery from a starting directory. Each filename walks up independently, so
node.settings.yamlcan resolve in the node dir whilesettings.yamlresolves in the lab root.The starting directory is determined by (in priority order):
_settings_dirkeyword argumentMADSCI_SETTINGS_DIRenvironment variableCurrent working directory (default)
Args: _settings_dir: Starting directory for walk-up file discovery. **kwargs: Forwarded to
BaseSettings.__init__.Ancestors (in MRO)¶
madsci.common.types.node_types.NodeConfig
madsci.common.types.base_types.MadsciBaseSettings
pydantic_settings.main.BaseSettings
pydantic.main.BaseModel
Descendants¶
madsci.experiment_application.experiment_application.ExperimentApplicationConfig
Class variables¶
enable_rate_limiting: bool:node_url: pydantic.networks.AnyUrl:rate_limit_cleanup_interval: int:rate_limit_requests: int:rate_limit_short_requests: int | None:rate_limit_short_window: int | None:rate_limit_window: int:uvicorn_kwargs: dict[str, typing.Any]: