Skip to content

Commit

Permalink
feat(api): add setStoredLabware command (#17540)
Browse files Browse the repository at this point in the history
Adds the new setStoredLabware command to constrain the flex stacker
labware pool.

The idea here is that you configure each stacker with some concept of
"this is the kind of labware you contain", and an amount of labware.
Then, you update how much it contains and when you retrieve stuff
`retrieve` creates a new labware object. Only labware that entered the
stacker through `store` retains its individuality.

This PR creates the command and adds the new data to the stacker
substate, but it's not yet used for anything; static mode remains,
loading labware objects into the hopper remains. In followup prs, we'll
remove that older loading capability, and switch things over to using
the new way of doing things.

## testing
- automated tests, really; the command does nothing

## reviews
- structure and arguments and such

Closes EXEC-1212

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: sfoster1 <[email protected]>
  • Loading branch information
3 people authored Feb 19, 2025
1 parent 70a4ac8 commit 829abc6
Show file tree
Hide file tree
Showing 21 changed files with 610 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9446,7 +9446,7 @@
"filename": "None",
"filename2": "None",
"strerror": "None",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition, definition_uri = await self.load_definition_for_details(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
},
"errorType": "PythonException",
"id": "UUID",
Expand All @@ -9462,7 +9462,7 @@
"code": "ErrorCodes.GENERAL_ERROR",
"detail": "{}",
"message": "Labware definition for matching opentrons/cpx_4_tuberack_100ul/1 not found.",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = self._state_store.labware.get_definition_by_uri(definition_uri)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n self._state_store.labware.get_definition_by_uri(definition_uri),\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"wrapping": "[]"
},
"errorType": "PythonException",
Expand Down Expand Up @@ -9562,7 +9562,7 @@
"filename": "None",
"filename2": "None",
"strerror": "None",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition, definition_uri = await self.load_definition_for_details(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
},
"errorType": "PythonException",
"id": "UUID",
Expand All @@ -9578,7 +9578,7 @@
"code": "ErrorCodes.GENERAL_ERROR",
"detail": "{}",
"message": "Labware definition for matching opentrons/cpx_4_tuberack_100ul/1 not found.",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = self._state_store.labware.get_definition_by_uri(definition_uri)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n self._state_store.labware.get_definition_by_uri(definition_uri),\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"wrapping": "[]"
},
"errorType": "PythonException",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9446,7 +9446,7 @@
"filename": "None",
"filename2": "None",
"strerror": "None",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition, definition_uri = await self.load_definition_for_details(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
},
"errorType": "PythonException",
"id": "UUID",
Expand All @@ -9462,7 +9462,7 @@
"code": "ErrorCodes.GENERAL_ERROR",
"detail": "{}",
"message": "Labware definition for matching opentrons/cpx_4_tuberack_100ul/1 not found.",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = self._state_store.labware.get_definition_by_uri(definition_uri)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n self._state_store.labware.get_definition_by_uri(definition_uri),\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"wrapping": "[]"
},
"errorType": "PythonException",
Expand Down Expand Up @@ -9562,7 +9562,7 @@
"filename": "None",
"filename2": "None",
"strerror": "None",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/command_executor.py\", line N, in execute\n result = await command_impl.execute(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/commands/load_labware.py\", line N, in execute\n loaded_labware = await self._equipment.load_labware(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition, definition_uri = await self.load_definition_for_details(\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n definition = await self._labware_data_provider.get_labware_definition(\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run_sync_in_worker_thread\n return await future\n\n File \"/usr/local/lib/python3.10/site-packages/anyio/_backends/_asyncio.py\", line N, in run\n result = context.run(func, *args)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/resources/labware_data_provider.py\", line N, in _get_labware_definition_sync\n get_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in get_labware_definition\n return _get_standard_labware_definition(load_name, namespace, version)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocols/labware.py\", line N, in _get_standard_labware_definition\n raise FileNotFoundError(\n"
},
"errorType": "PythonException",
"id": "UUID",
Expand All @@ -9578,7 +9578,7 @@
"code": "ErrorCodes.GENERAL_ERROR",
"detail": "{}",
"message": "Labware definition for matching opentrons/cpx_4_tuberack_100ul/1 not found.",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_labware\n definition = self._state_store.labware.get_definition_by_uri(definition_uri)\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"traceback": " File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/execution/equipment.py\", line N, in load_definition_for_details\n self._state_store.labware.get_definition_by_uri(definition_uri),\n\n File \"/usr/local/lib/python3.10/site-packages/opentrons/protocol_engine/state/labware.py\", line N, in get_definition_by_uri\n raise errors.LabwareDefinitionDoesNotExistError(\n",
"wrapping": "[]"
},
"errorType": "PythonException",
Expand Down
Loading

0 comments on commit 829abc6

Please sign in to comment.