opentrons 8.6.0a2__py3-none-any.whl → 8.6.0a3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of opentrons might be problematic. Click here for more details.

opentrons/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '8.6.0a2'
21
- __version_tuple__ = version_tuple = (8, 6, 0, 'a2')
20
+ __version__ = version = '8.6.0a3'
21
+ __version_tuple__ = version_tuple = (8, 6, 0, 'a3')
@@ -263,8 +263,13 @@ class SerialConnection:
263
263
  return
264
264
 
265
265
  lower = response.lower()
266
- res_gcode = response.split()[0]
267
- req_gcode = request.split()[0]
266
+ try:
267
+ res_gcode = response.split()[0]
268
+ req_gcode = request.split()[0]
269
+ except IndexError:
270
+ # this means the response is an empty string or something, which is weird
271
+ # but not a canonical error
272
+ return
268
273
 
269
274
  # Make sure this is not just a normal response that happens to contain the
270
275
  # `err` or `alarm` keyword in the message body by checking the gcode values
@@ -24,6 +24,7 @@ from opentrons.protocol_engine.types import (
24
24
  ABSMeasureMode,
25
25
  StackerFillEmptyStrategy,
26
26
  StackerStoredLabwareGroup,
27
+ StackerLabwareMovementStrategy,
27
28
  )
28
29
  from opentrons.types import DeckSlotName
29
30
  from opentrons.protocol_engine.clients import SyncClient as ProtocolEngineClient
@@ -747,6 +748,7 @@ class FlexStackerCore(ModuleCore, AbstractFlexStackerCore[LabwareCore]):
747
748
  self._engine_client.execute_command(
748
749
  cmd.flex_stacker.StoreParams(
749
750
  moduleId=self.module_id,
751
+ strategy=StackerLabwareMovementStrategy.AUTOMATIC,
750
752
  )
751
753
  )
752
754
 
@@ -41,6 +41,7 @@ from ...types import (
41
41
  InStackerHopperLocation,
42
42
  StackerStoredLabwareGroup,
43
43
  ModuleLocation,
44
+ StackerLabwareMovementStrategy,
44
45
  )
45
46
 
46
47
  if TYPE_CHECKING:
@@ -59,6 +60,13 @@ class StoreParams(BaseModel):
59
60
  ...,
60
61
  description="Unique ID of the flex stacker.",
61
62
  )
63
+ strategy: StackerLabwareMovementStrategy = Field(
64
+ ...,
65
+ description=(
66
+ "If manual, indicates that labware has been moved to the hopper "
67
+ "manually by the user, as required in error recovery."
68
+ ),
69
+ )
62
70
 
63
71
 
64
72
  class StoreResult(BaseModel):
@@ -201,42 +209,47 @@ class StoreImpl(AbstractCommandImpl[StoreParams, _ExecuteReturn]):
201
209
  stacker_hw = self._equipment.get_module_hardware_api(stacker_state.module_id)
202
210
 
203
211
  state_update = update_types.StateUpdate()
204
- try:
205
- if stacker_hw is not None:
206
- stacker_hw.set_stacker_identify(True)
212
+ if stacker_hw is not None:
213
+ stacker_hw.set_stacker_identify(True)
214
+
215
+ if (
216
+ params.strategy is StackerLabwareMovementStrategy.AUTOMATIC
217
+ and stacker_hw is not None
218
+ ):
219
+ try:
207
220
  await stacker_hw.store_labware(
208
221
  labware_height=stacker_state.get_pool_height_minus_overlap()
209
222
  )
210
- except FlexStackerStallError as e:
211
- return DefinedErrorData(
212
- public=FlexStackerStallOrCollisionError(
213
- id=self._model_utils.generate_id(),
214
- createdAt=self._model_utils.get_timestamp(),
215
- wrappedErrors=[
216
- ErrorOccurrence.from_failed(
217
- id=self._model_utils.generate_id(),
218
- createdAt=self._model_utils.get_timestamp(),
219
- error=e,
220
- )
221
- ],
222
- errorInfo={"labwareId": primary_id},
223
- ),
224
- )
225
- except FlexStackerShuttleMissingError as e:
226
- return DefinedErrorData(
227
- public=FlexStackerShuttleError(
228
- id=self._model_utils.generate_id(),
229
- createdAt=self._model_utils.get_timestamp(),
230
- wrappedErrors=[
231
- ErrorOccurrence.from_failed(
232
- id=self._model_utils.generate_id(),
233
- createdAt=self._model_utils.get_timestamp(),
234
- error=e,
235
- )
236
- ],
237
- errorInfo={"labwareId": primary_id},
238
- ),
239
- )
223
+ except FlexStackerStallError as e:
224
+ return DefinedErrorData(
225
+ public=FlexStackerStallOrCollisionError(
226
+ id=self._model_utils.generate_id(),
227
+ createdAt=self._model_utils.get_timestamp(),
228
+ wrappedErrors=[
229
+ ErrorOccurrence.from_failed(
230
+ id=self._model_utils.generate_id(),
231
+ createdAt=self._model_utils.get_timestamp(),
232
+ error=e,
233
+ )
234
+ ],
235
+ errorInfo={"labwareId": primary_id},
236
+ ),
237
+ )
238
+ except FlexStackerShuttleMissingError as e:
239
+ return DefinedErrorData(
240
+ public=FlexStackerShuttleError(
241
+ id=self._model_utils.generate_id(),
242
+ createdAt=self._model_utils.get_timestamp(),
243
+ wrappedErrors=[
244
+ ErrorOccurrence.from_failed(
245
+ id=self._model_utils.generate_id(),
246
+ createdAt=self._model_utils.get_timestamp(),
247
+ error=e,
248
+ )
249
+ ],
250
+ errorInfo={"labwareId": primary_id},
251
+ ),
252
+ )
240
253
 
241
254
  id_list = [
242
255
  id for id in (primary_id, maybe_adapter_id, maybe_lid_id) if id is not None
@@ -1099,7 +1099,9 @@ class GeometryView:
1099
1099
 
1100
1100
  middle_slot_fixture = (
1101
1101
  self._addressable_areas.get_fixture_by_deck_slot_name(
1102
- DeckSlotName.SLOT_C2
1102
+ DeckSlotName.SLOT_C2.to_equivalent_for_robot_type(
1103
+ self._config.robot_type
1104
+ )
1103
1105
  )
1104
1106
  )
1105
1107
  if middle_slot_fixture is None:
@@ -68,6 +68,7 @@ from .module import (
68
68
  ModuleOffsetData,
69
69
  StackerFillEmptyStrategy,
70
70
  StackerStoredLabwareGroup,
71
+ StackerLabwareMovementStrategy,
71
72
  )
72
73
  from .location import (
73
74
  DeckSlotLocation,
@@ -212,6 +213,7 @@ __all__ = [
212
213
  "ModuleOffsetData",
213
214
  "StackerFillEmptyStrategy",
214
215
  "StackerStoredLabwareGroup",
216
+ "StackerLabwareMovementStrategy",
215
217
  # Locations of things on deck
216
218
  "DeckSlotLocation",
217
219
  "StagingSlotLocation",
@@ -276,6 +276,13 @@ class StackerFillEmptyStrategy(str, Enum):
276
276
  LOGICAL = "logical"
277
277
 
278
278
 
279
+ class StackerLabwareMovementStrategy(str, Enum):
280
+ """Strategy to retrieve or store labware."""
281
+
282
+ AUTOMATIC = "automatic"
283
+ MANUAL = "manual"
284
+
285
+
279
286
  class StackerStoredLabwareGroup(BaseModel):
280
287
  """Represents one group of labware stored in a stacker hopper."""
281
288
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: opentrons
3
- Version: 8.6.0a2
3
+ Version: 8.6.0a3
4
4
  Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
5
5
  Project-URL: opentrons.com, https://www.opentrons.com
6
6
  Project-URL: Source Code On Github, https://github.com/Opentrons/opentrons/tree/edge/api
@@ -24,7 +24,7 @@ Requires-Dist: click<9,>=8.0.0
24
24
  Requires-Dist: importlib-metadata>=1.0; python_version < '3.8'
25
25
  Requires-Dist: jsonschema<4.18.0,>=3.0.1
26
26
  Requires-Dist: numpy<2,>=1.20.0
27
- Requires-Dist: opentrons-shared-data==8.6.0a2
27
+ Requires-Dist: opentrons-shared-data==8.6.0a3
28
28
  Requires-Dist: packaging>=21.0
29
29
  Requires-Dist: pydantic-settings<3,>=2
30
30
  Requires-Dist: pydantic<3,>=2.0.0
@@ -32,6 +32,6 @@ Requires-Dist: pyserial>=3.5
32
32
  Requires-Dist: pyusb==1.2.1
33
33
  Requires-Dist: typing-extensions<5,>=4.0.0
34
34
  Provides-Extra: flex-hardware
35
- Requires-Dist: opentrons-hardware[flex]==8.6.0a2; extra == 'flex-hardware'
35
+ Requires-Dist: opentrons-hardware[flex]==8.6.0a3; extra == 'flex-hardware'
36
36
  Provides-Extra: ot2-hardware
37
- Requires-Dist: opentrons-hardware==8.6.0a2; extra == 'ot2-hardware'
37
+ Requires-Dist: opentrons-hardware==8.6.0a3; extra == 'ot2-hardware'
@@ -1,5 +1,5 @@
1
1
  opentrons/__init__.py,sha256=TQ_Ca_zzAM3iLzAysWKkFkQHG8-imihxDPQbLCYrf-E,4533
2
- opentrons/_version.py,sha256=GNMqhyBM4WyqEn46p7PGtrzujTlw5TeW__t1rYiBsMc,519
2
+ opentrons/_version.py,sha256=xD_T0KGoygCgIVCg4T4APgS97uLDmrAh1HwkwJPEeNk,519
3
3
  opentrons/execute.py,sha256=Y88qICDiHWQjU0L4Ou7DI5OXXu7zZcdkUvNUYmZqIfc,29282
4
4
  opentrons/legacy_broker.py,sha256=XnuEBBlrHCThc31RFW2UR0tGqctqWZ-CZ9vSC4L9whU,1553
5
5
  opentrons/ordered_set.py,sha256=g-SB3qA14yxHu9zjGyc2wC7d2TUCBE6fKZlHAtbPzI8,4082
@@ -53,7 +53,7 @@ opentrons/drivers/asyncio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
53
53
  opentrons/drivers/asyncio/communication/__init__.py,sha256=b-rd_I0ecbexGm6b9T91JLfFUrCyui9V1N1j-fzy0SQ,523
54
54
  opentrons/drivers/asyncio/communication/async_serial.py,sha256=oL92Uh3IGP3IEcP2814YaT4_uHbwjLPRVZtkoID0LmQ,5311
55
55
  opentrons/drivers/asyncio/communication/errors.py,sha256=-4pNGVKE83VUPNt1UTBLDzKtty3LxAhUNp-9yLENqyw,2678
56
- opentrons/drivers/asyncio/communication/serial_connection.py,sha256=fsu3MG7B9VhTk8TbJ_1NtlVdrwArQTNG2MnNGG4KZX0,18683
56
+ opentrons/drivers/asyncio/communication/serial_connection.py,sha256=cWcISWe0FfoZj63oYVQD-KkwBojzMTVrzJ64-Gd1u90,18876
57
57
  opentrons/drivers/flex_stacker/__init__.py,sha256=LiM0onRlgC-JfFBd0QseQU0-3WuuIxa7GNFj7Douiq8,351
58
58
  opentrons/drivers/flex_stacker/abstract.py,sha256=50xrkTC5qI_BsvlBGpdBLwF3GVi7HhKVSgloKwcrzNA,6744
59
59
  opentrons/drivers/flex_stacker/driver.py,sha256=TEy2yz5fU-vSmuLjHoZqi8fYmvdrmhoWYCMhx7ldZsg,31342
@@ -257,7 +257,7 @@ opentrons/protocol_api/core/engine/exceptions.py,sha256=aZgNrmYEeuPZm21nX_KZYtvy
257
257
  opentrons/protocol_api/core/engine/instrument.py,sha256=lDrCqOZm7ceu1E50EYiSh7qTDMci5cgw4bM-AvLyMjE,98890
258
258
  opentrons/protocol_api/core/engine/labware.py,sha256=-2oygShyRZo1-R0UOoBtXniFOXfc3cSdGM-qa_l9wh8,8610
259
259
  opentrons/protocol_api/core/engine/load_labware_params.py,sha256=CxSbCBXVXHtBszP-3Ko8hsQTjvvogKRo0CCzCmMfIic,3003
260
- opentrons/protocol_api/core/engine/module_core.py,sha256=fofL9aM1u_sXgkhV589GDNUvMlIWZ9FqQLfNqedUz_E,39434
260
+ opentrons/protocol_api/core/engine/module_core.py,sha256=qxxcqpH-A4Zil9hHDxnvh4H8JuPvK6-sgkODU5YdjZQ,39537
261
261
  opentrons/protocol_api/core/engine/overlap_versions.py,sha256=PyGvQtQUg1wzNtkuGZtxwXm019PoIjq7em2JiWaxbXc,675
262
262
  opentrons/protocol_api/core/engine/pipette_movement_conflict.py,sha256=x54RIYtkL1rdzvkSp2JgusLY3EEvY8bX3OwipeVKdsE,15511
263
263
  opentrons/protocol_api/core/engine/point_calculations.py,sha256=C2eF0fvJQGMqQv3DzNhc1-m8HTAXTyTsHPJEPrEUEmo,2502
@@ -369,7 +369,7 @@ opentrons/protocol_engine/commands/flex_stacker/empty.py,sha256=1R0AwQtLn_wfuFH0
369
369
  opentrons/protocol_engine/commands/flex_stacker/fill.py,sha256=3qhAQxJfaSp4EAFGIUotkrJVuOvdFrwzmkMCa2v6khA,10866
370
370
  opentrons/protocol_engine/commands/flex_stacker/retrieve.py,sha256=kh9Lh-FW-RrXmV4RS8txmTYPfPDKhQhjW0UXr8k0vhc,12763
371
371
  opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py,sha256=5VdqCcBdIHmpWqIJN3rCKeZ6IKwfxAdQTXMTD-KL-5w,12484
372
- opentrons/protocol_engine/commands/flex_stacker/store.py,sha256=WwUKAJKgrvz0mD1nKJ-bIn-IKHpjCHNp1539ik52Vpk,12231
372
+ opentrons/protocol_engine/commands/flex_stacker/store.py,sha256=8iS77NRj9CVp12S9uVfCJTl-Q0iaJkCQDcOJWZnSeI0,12770
373
373
  opentrons/protocol_engine/commands/heater_shaker/__init__.py,sha256=ImAPrYSUvP8tI7obvoHmrJbjwLldgGNTnFYRgfXj8hI,2757
374
374
  opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py,sha256=Q7sqFtzUD8wclRLL2PLWjnClIeLtJsiMCobStvzoJKc,2847
375
375
  opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py,sha256=UYeGrTmnGtfw22p0agefI2ZnpukKlIgFcmJv9v58Xnc,2755
@@ -461,7 +461,7 @@ opentrons/protocol_engine/state/commands.py,sha256=y5WE2pKmnMalgHFHEiBnBurO2TZ9w
461
461
  opentrons/protocol_engine/state/config.py,sha256=7jSGxC6Vqj1eA8fqZ2I3zjlxVXg8pxvcBYMztRIx9Mg,1515
462
462
  opentrons/protocol_engine/state/files.py,sha256=w8xxxg8HY0RqKKEGSfHWfrjV54Gb02O3dwtisJ-9j8E,1753
463
463
  opentrons/protocol_engine/state/fluid_stack.py,sha256=uwkf0qYk1UX5iU52xmk-e3yLPK8OG-TtMCcBqrkVFpM,5932
464
- opentrons/protocol_engine/state/geometry.py,sha256=O-P6xUHh1UvaCaz1PxjiozsneYRviw3vxUtON-osMPk,101534
464
+ opentrons/protocol_engine/state/geometry.py,sha256=WmS1hg7F4Ng3vn7HQS91DIWPvuT3nKgBE69E-0IGha4,101642
465
465
  opentrons/protocol_engine/state/inner_well_math_utils.py,sha256=UhemsPpcuKwVc-iGXI2-v--miOGNunAnAVznJTVADlQ,20598
466
466
  opentrons/protocol_engine/state/labware.py,sha256=CRY84JCj9Y31aA-QWgqboql_PRD7QFZh1ja6Iboo0Wg,61308
467
467
  opentrons/protocol_engine/state/liquid_classes.py,sha256=u_z75UYdiFAKG0yB3mr1il4T3qaS0Sotq8sL7KLODP8,2990
@@ -482,7 +482,7 @@ opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py,sha2
482
482
  opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py,sha256=IJ5zpufz5WSRbJqHOAi-WroDxpsRZz-GvwznIL4v7VQ,2468
483
483
  opentrons/protocol_engine/state/module_substates/temperature_module_substate.py,sha256=w9h6EBM1YY8SeUOlUz5-nW1Zoyce8-zua8Z6mX4sDNg,2310
484
484
  opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py,sha256=fLt2jMsbnfe8Q25vAjloxLBGdx8sotqM34VxbwfegpE,5167
485
- opentrons/protocol_engine/types/__init__.py,sha256=T5Tt7O-g9VY3GYqaq1AfrIe6plErR_N19SpbZ2SlYfo,8270
485
+ opentrons/protocol_engine/types/__init__.py,sha256=8nOYquZPSvQAqkCz9Jfev86SmQ1Tou-AL5RMMvSz07o,8344
486
486
  opentrons/protocol_engine/types/automatic_tip_selection.py,sha256=I_B3iWei1Sl7F7IrMKqOn4S12heZXRnfKvtCTUXIMyM,1118
487
487
  opentrons/protocol_engine/types/command_annotations.py,sha256=5A4k_R_4A2_nGl0K85SKwNlnKA09fUhEIe_mdU55yro,1843
488
488
  opentrons/protocol_engine/types/deck_configuration.py,sha256=3dhkk3Z_PrJvqb26brkEdlyzMAGih_UopoEzu9k6SRk,2422
@@ -499,7 +499,7 @@ opentrons/protocol_engine/types/liquid_class.py,sha256=SF5WS3s38S87efUqawRGSIYqj
499
499
  opentrons/protocol_engine/types/liquid_handling.py,sha256=Xx1GihrNRJJdJJA5zIwWvIYNydbSXAHjSUAliF18Iu0,319
500
500
  opentrons/protocol_engine/types/liquid_level_detection.py,sha256=hdSztrZcexko7p4lEkC8YuKlepv3j6ovKhMeQZuUHcg,6348
501
501
  opentrons/protocol_engine/types/location.py,sha256=qIYBs86RO1ws2aXStmdx0CqEVNF9enlj-ACknf75nSs,5707
502
- opentrons/protocol_engine/types/module.py,sha256=DzDQ9WMWwGH0pP3i6-7bAQgrJ4GnCjlporguo1qwieU,9578
502
+ opentrons/protocol_engine/types/module.py,sha256=EDfRqa1Wb1siZ8vt7zQVCjCRcTiGoOjqzrgySdxm-zw,9729
503
503
  opentrons/protocol_engine/types/partial_tip_configuration.py,sha256=4RMtHOAX-dgpXWA737tthj_izTBnhKphBcA24LAKmhI,2760
504
504
  opentrons/protocol_engine/types/run_time_parameters.py,sha256=5gH4GmGK7e3OkSClftZT6VA4wXELIvEMgpmQ__waceU,4468
505
505
  opentrons/protocol_engine/types/tip.py,sha256=qfjnCPG7RAlTGS80SAQB8rGwtFW3yRWYj7DpYy0oDow,389
@@ -594,8 +594,8 @@ opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
594
594
  opentrons/util/logging_config.py,sha256=7et4YYuQdWdq_e50U-8vFS_QyNBRgdnqPGAQJm8qrIo,9954
595
595
  opentrons/util/logging_queue_handler.py,sha256=ZsSJwy-oV8DXwpYiZisQ1PbYwmK2cOslD46AcyJ1E4I,2484
596
596
  opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
597
- opentrons-8.6.0a2.dist-info/METADATA,sha256=cYFFLWaqACc2IODIfrDWwlHmMo3gwbsx_Tda1r2hX9Q,1607
598
- opentrons-8.6.0a2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
599
- opentrons-8.6.0a2.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
600
- opentrons-8.6.0a2.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
601
- opentrons-8.6.0a2.dist-info/RECORD,,
597
+ opentrons-8.6.0a3.dist-info/METADATA,sha256=2OzHrnc75fEw1gcKzSg87PJzcTgAY75e8BhN5PijOwI,1607
598
+ opentrons-8.6.0a3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
599
+ opentrons-8.6.0a3.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
600
+ opentrons-8.6.0a3.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
601
+ opentrons-8.6.0a3.dist-info/RECORD,,