opentrons 8.0.0a2__py2.py3-none-any.whl → 8.0.0a3__py2.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.
@@ -2064,6 +2064,8 @@ class InstrumentContext(publisher.CommandPublisher):
2064
2064
  NozzleLayout.QUADRANT,
2065
2065
  ]
2066
2066
  if style in disabled_layouts:
2067
+ # todo(mm, 2024-08-20): UnsupportedAPIError boils down to an API_REMOVED
2068
+ # error code, which is not correct here.
2067
2069
  raise UnsupportedAPIError(
2068
2070
  message=f"Nozzle layout configuration of style {style.value} is currently unsupported."
2069
2071
  )
@@ -2074,7 +2076,11 @@ class InstrumentContext(publisher.CommandPublisher):
2074
2076
  < _PARTIAL_NOZZLE_CONFIGURATION_SINGLE_ROW_PARTIAL_COLUMN_ADDED_IN
2075
2077
  ) and (style not in original_enabled_layouts):
2076
2078
  raise APIVersionError(
2077
- f"Nozzle layout configuration of style {style.value} is unsupported in API Versions lower than {_PARTIAL_NOZZLE_CONFIGURATION_SINGLE_ROW_PARTIAL_COLUMN_ADDED_IN}."
2079
+ api_element=f"Nozzle layout configuration of style {style.value}",
2080
+ until_version=str(
2081
+ _PARTIAL_NOZZLE_CONFIGURATION_SINGLE_ROW_PARTIAL_COLUMN_ADDED_IN
2082
+ ),
2083
+ current_version=str(self._api_version),
2078
2084
  )
2079
2085
 
2080
2086
  front_right_resolved = front_right
@@ -581,7 +581,7 @@ class Labware:
581
581
  api_element="Labware.set_calibration()",
582
582
  since_version=f"{ENGINE_CORE_API_VERSION}",
583
583
  current_version=f"{self._api_version}",
584
- message=" Try using the Opentrons App's Labware Position Check.",
584
+ extra_message="Try using the Opentrons App's Labware Position Check.",
585
585
  )
586
586
  self._core.set_calibration(delta)
587
587
 
@@ -632,7 +632,7 @@ class Labware:
632
632
  api_element="Labware.set_offset()",
633
633
  until_version=f"{SET_OFFSET_RESTORED_API_VERSION}",
634
634
  current_version=f"{self._api_version}",
635
- message=" This feature not available in versions 2.14 thorugh 2.17. You can also use the Opentrons App's Labware Position Check.",
635
+ extra_message="This feature not available in versions 2.14 thorugh 2.17. You can also use the Opentrons App's Labware Position Check.",
636
636
  )
637
637
  else:
638
638
  self._core.set_calibration(Point(x=x, y=y, z=z))
@@ -974,7 +974,7 @@ class Labware:
974
974
  api_element="Labware.use_tips",
975
975
  since_version=f"{ENGINE_CORE_API_VERSION}",
976
976
  current_version=f"{self._api_version}",
977
- message=" To modify tip state, use Labware.reset.",
977
+ extra_message="To modify tip state, use Labware.reset.",
978
978
  )
979
979
 
980
980
  assert num_channels > 0, "Bad call to use_tips: num_channels<=0"
@@ -1064,7 +1064,7 @@ class Labware:
1064
1064
  api_element="Labware.return_tips()",
1065
1065
  since_version=f"{ENGINE_CORE_API_VERSION}",
1066
1066
  current_version=f"{self._api_version}",
1067
- message=" Use Labware.reset() instead.",
1067
+ extra_message="Use Labware.reset() instead.",
1068
1068
  )
1069
1069
 
1070
1070
  # This logic is the inverse of :py:meth:`use_tips`
@@ -103,7 +103,7 @@ class ModuleContext(CommandPublisher):
103
103
  raise UnsupportedAPIError(
104
104
  api_element="`ModuleContext.load_labware_object`",
105
105
  since_version="2.14",
106
- message=" Use `ModuleContext.load_labware` or `load_labware_by_definition` instead.",
106
+ extra_message="Use `ModuleContext.load_labware` or `load_labware_by_definition` instead.",
107
107
  )
108
108
 
109
109
  _log.warning(
@@ -305,7 +305,7 @@ class ModuleContext(CommandPublisher):
305
305
  raise UnsupportedAPIError(
306
306
  api_element="`ModuleContext.geometry`",
307
307
  since_version="2.14",
308
- message=" Use properties of the `ModuleContext` itself.",
308
+ extra_message="Use properties of the `ModuleContext` itself.",
309
309
  )
310
310
 
311
311
  def __repr__(self) -> str:
@@ -482,7 +482,7 @@ class MagneticModuleContext(ModuleContext):
482
482
  api_element="The height parameter of MagneticModuleContext.engage()",
483
483
  since_version=f"{_MAGNETIC_MODULE_HEIGHT_PARAM_REMOVED_IN}",
484
484
  current_version=f"{self._api_version}",
485
- message=" Use offset or height_from_base.",
485
+ extra_message="Use offset or height_from_base.",
486
486
  )
487
487
  self._core.engage(height_from_home=height)
488
488
 
@@ -279,7 +279,7 @@ class ProtocolContext(CommandPublisher):
279
279
  api_element="ProtocolContext.max_speeds",
280
280
  since_version=f"{ENGINE_CORE_API_VERSION}",
281
281
  current_version=f"{self._api_version}",
282
- message=" Set speeds using InstrumentContext.default_speed or the per-method 'speed' argument.",
282
+ extra_message="Set speeds using InstrumentContext.default_speed or the per-method 'speed' argument.",
283
283
  )
284
284
 
285
285
  return self._core.get_max_speeds()
@@ -1048,7 +1048,7 @@ class ProtocolContext(CommandPublisher):
1048
1048
  api_element="A Python Protocol safely resuming itself after a pause",
1049
1049
  since_version=f"{ENGINE_CORE_API_VERSION}",
1050
1050
  current_version=f"{self._api_version}",
1051
- message=" To wait automatically for a period of time, use ProtocolContext.delay().",
1051
+ extra_message="To wait automatically for a period of time, use ProtocolContext.delay().",
1052
1052
  )
1053
1053
 
1054
1054
  # TODO(mc, 2023-02-13): this assert should be enough for mypy
@@ -1169,7 +1169,7 @@ class ProtocolContext(CommandPublisher):
1169
1169
  api_element="Fixed Trash",
1170
1170
  since_version="2.16",
1171
1171
  current_version=f"{self._api_version}",
1172
- message=" Fixed trash is no longer supported on Flex protocols.",
1172
+ extra_message="Fixed trash is no longer supported on Flex protocols.",
1173
1173
  )
1174
1174
  disposal_locations = self._core.get_disposal_locations()
1175
1175
  if len(disposal_locations) == 0:
@@ -1242,7 +1242,7 @@ class ProtocolContext(CommandPublisher):
1242
1242
  api_element="Calling `define_liquid()` without a `description`",
1243
1243
  current_version=str(self._api_version),
1244
1244
  until_version=str(desc_and_display_color_omittable_since),
1245
- message="Use a newer API version or explicitly supply `description=None`.",
1245
+ extra_message="Use a newer API version or explicitly supply `description=None`.",
1246
1246
  )
1247
1247
  else:
1248
1248
  description = None
@@ -1252,7 +1252,7 @@ class ProtocolContext(CommandPublisher):
1252
1252
  api_element="Calling `define_liquid()` without a `display_color`",
1253
1253
  current_version=str(self._api_version),
1254
1254
  until_version=str(desc_and_display_color_omittable_since),
1255
- message="Use a newer API version or explicitly supply `display_color=None`.",
1255
+ extra_message="Use a newer API version or explicitly supply `display_color=None`.",
1256
1256
  )
1257
1257
  else:
1258
1258
  display_color = None
@@ -208,7 +208,7 @@ def ensure_and_convert_deck_slot(
208
208
  api_element=f"Specifying a deck slot like '{deck_slot}'",
209
209
  until_version=f"{_COORDINATE_DECK_LABEL_VERSION_GATE}",
210
210
  current_version=f"{api_version}",
211
- message=f"Increase your protocol's apiLevel, or use slot '{alternative}' instead.",
211
+ extra_message=f"Increase your protocol's apiLevel, or use slot '{alternative}' instead.",
212
212
  )
213
213
 
214
214
  return parsed_slot.to_equivalent_for_robot_type(robot_type)
@@ -16,7 +16,10 @@ class CSVParameter:
16
16
 
17
17
  @property
18
18
  def file(self) -> TextIO:
19
- """Returns the file handler for the CSV file."""
19
+ """Returns the file handler for the CSV file.
20
+
21
+ The file is treated as read-only, UTF-8-encoded text.
22
+ """
20
23
  if self._file is None:
21
24
  text = self.contents
22
25
  temporary_file = NamedTemporaryFile("r+")
@@ -30,7 +33,7 @@ class CSVParameter:
30
33
 
31
34
  @property
32
35
  def file_opened(self) -> bool:
33
- """Return if a file handler has been opened for the CSV parameter."""
36
+ """Returns ``True`` if a file handler is open for the CSV parameter."""
34
37
  return self._file is not None
35
38
 
36
39
  @property
@@ -45,10 +48,22 @@ class CSVParameter:
45
48
  def parse_as_csv(
46
49
  self, detect_dialect: bool = True, **kwargs: Any
47
50
  ) -> List[List[str]]:
48
- """Returns a list of rows with each row represented as a list of column elements.
51
+ """Parses the CSV data and returns a list of lists.
52
+
53
+ Each item in the parent list corresponds to a row in the CSV file.
54
+ If the CSV has a header, that will be the first row in the list: ``.parse_as_csv()[0]``.
55
+
56
+ Each item in the child lists corresponds to a single cell within its row.
57
+ The data for each cell is represented as a string. You may need to trim whitespace
58
+ or otherwise validate string contents before passing them as inputs to other API methods.
59
+ For numeric data, cast these strings to integers or floating point numbers,
60
+ as appropriate.
49
61
 
50
- If there is a header for the CSV that will be the first row in the list (i.e. `.rows()[0]`).
51
- All elements will be represented as strings, even if they are numeric in nature.
62
+ :param detect_dialect: If ``True``, examine the file and try to assign it a
63
+ :py:class:`csv.Dialect` to improve parsing behavior.
64
+ :param kwargs: For advanced CSV handling, you can pass any of the
65
+ `formatting parameters <https://docs.python.org/3/library/csv.html#csv-fmt-params>`_
66
+ accepted by :py:func:`csv.reader` from the Python standard library.
52
67
  """
53
68
  rows: List[List[str]] = []
54
69
  if detect_dialect:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opentrons
3
- Version: 8.0.0a2
3
+ Version: 8.0.0a3
4
4
  Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
5
5
  Author: Opentrons
6
6
  Author-email: engineering@opentrons.com
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Topic :: Scientific/Engineering
22
22
  Requires-Python: >=3.10
23
23
  License-File: ../LICENSE
24
- Requires-Dist: opentrons-shared-data ==8.0.0a2
24
+ Requires-Dist: opentrons-shared-data ==8.0.0a3
25
25
  Requires-Dist: aionotify ==0.3.1
26
26
  Requires-Dist: anyio <4.0.0,>=3.6.1
27
27
  Requires-Dist: jsonschema <4.18.0,>=3.0.1
@@ -33,9 +33,9 @@ Requires-Dist: click <9,>=8.0.0
33
33
  Requires-Dist: packaging >=21.0
34
34
  Requires-Dist: importlib-metadata >=1.0 ; python_version < "3.8"
35
35
  Provides-Extra: flex-hardware
36
- Requires-Dist: opentrons-hardware[flex] ==8.0.0a2 ; extra == 'flex-hardware'
36
+ Requires-Dist: opentrons-hardware[flex] ==8.0.0a3 ; extra == 'flex-hardware'
37
37
  Provides-Extra: ot2-hardware
38
- Requires-Dist: opentrons-hardware ==8.0.0a2 ; extra == 'ot2-hardware'
38
+ Requires-Dist: opentrons-hardware ==8.0.0a3 ; extra == 'ot2-hardware'
39
39
 
40
40
  .. _Full API Documentation: http://docs.opentrons.com
41
41
 
@@ -219,13 +219,13 @@ opentrons/protocol_api/config.py,sha256=r9lyvXjagTX_g3q5FGURPpcz2IA9sSF7Oa_1mKx-
219
219
  opentrons/protocol_api/create_protocol_context.py,sha256=wwsZje0L__oDnu1Yrihau320_f-ASloR9eL1QCtkOh8,7612
220
220
  opentrons/protocol_api/deck.py,sha256=94vFceg1SC1bAGd7TvC1ZpYwnJR-VlzurEZ6jkacYeg,8910
221
221
  opentrons/protocol_api/disposal_locations.py,sha256=NRiSGmDR0LnbyEkWSOM-o64uR2fUoB1NWJG7Y7SsJSs,7920
222
- opentrons/protocol_api/instrument_context.py,sha256=5xlOZ_3nuONDir7CpkDE3NoT_Hhnqw-rVd73Orc_NUk,95613
223
- opentrons/protocol_api/labware.py,sha256=AIapWimuZMOjeX-9PeOCskD99W-oPbFHSvI7yjZSxks,47703
224
- opentrons/protocol_api/module_contexts.py,sha256=NJTDW0Jj9bZnCwyGPkNvhJsi-DPJKGYBMFeW92eagqI,37310
222
+ opentrons/protocol_api/instrument_context.py,sha256=Viq1EpJ67IiOXXNKigx4iTW1xtDfx3yQ5PHdy3StzcQ,95849
223
+ opentrons/protocol_api/labware.py,sha256=cxJp5wWMv-OKLmryEXwPgFL6T6pu8T7SXYlGWaVmB-g,47723
224
+ opentrons/protocol_api/module_contexts.py,sha256=4uXWnO-w4Znbz27Y8m0uMJ_CR0U3Qy1r1ODntFbYMd0,37325
225
225
  opentrons/protocol_api/module_validation_and_errors.py,sha256=XL_m72P8rcvGO2fynY7UzXLcpGuI6X4s0V6Xf735Iyc,1464
226
- opentrons/protocol_api/protocol_context.py,sha256=1IsrVBsPAwif1BnMBjqucq7D_9m0nnXv8zVkaECXLAM,53575
226
+ opentrons/protocol_api/protocol_context.py,sha256=SxqZ_vRTPxmceJdYXpI_e2VfWJm_atoCjM1I1UPBMB0,53602
227
227
  opentrons/protocol_api/robot_context.py,sha256=vph_ZqfdmREOwLwpjSkXiSZSpI1HO0HuilhqjhgT7Rw,2660
228
- opentrons/protocol_api/validation.py,sha256=tjxNkrvm-1mzGZoiduZEsT99xb_Nkfhd4YMVjehUPGg,18367
228
+ opentrons/protocol_api/validation.py,sha256=p9kwYn340lIGHJ88q7L3RsfEgr25Nv1uTMuw4yly7T0,18373
229
229
  opentrons/protocol_api/core/__init__.py,sha256=-g74o8OtBB0LmmOvwkRvPgrHt7fF7T8FRHDj-x_-Onk,736
230
230
  opentrons/protocol_api/core/common.py,sha256=sXWlP8F4ZAEGcDh1WuavrVxkoi-FultBbpY6JW0_9ZY,1029
231
231
  opentrons/protocol_api/core/core_map.py,sha256=gq3CIYPxuPvozf8yj8FprqBfs3e4ZJGQ6s0ViPbwV08,1757
@@ -472,7 +472,7 @@ opentrons/protocols/models/__init__.py,sha256=KePRAkkKzFoc0lAz8y89cWnxru8ofe3mow
472
472
  opentrons/protocols/models/json_protocol.py,sha256=lteWlIBXgRM86k-wO1dKsx02G2_4kustSDeSoyc5N5U,20128
473
473
  opentrons/protocols/parameters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
474
474
  opentrons/protocols/parameters/csv_parameter_definition.py,sha256=xZhGtdfH2vXSWFK-aGET07_L0LODvHWkfNxf7pQoOmo,2762
475
- opentrons/protocols/parameters/csv_parameter_interface.py,sha256=Lyul1x93_MDcxloZubC60QVbsG_DI62j3zfO92h6zbc,2877
475
+ opentrons/protocols/parameters/csv_parameter_interface.py,sha256=XxQCcNgrtpvZR451nbnlCaQnlgZj_uNkwGIxnK9rk9Q,3684
476
476
  opentrons/protocols/parameters/exceptions.py,sha256=vQUeyy8Yk_fzP4bvT0r_zu3s7Aty3LM7PzTV6k2iXu0,1092
477
477
  opentrons/protocols/parameters/parameter_definition.py,sha256=OMtUCPKyFx5ZH3Jfcw05aF8pptWQ7XYzYttGMuSPu9k,9529
478
478
  opentrons/protocols/parameters/types.py,sha256=h7vaNmKbDHc1q_FzbZoIgoSVo0mvS64FeiLZDnv7xnQ,489
@@ -499,9 +499,9 @@ opentrons/util/helpers.py,sha256=3hr801bWGbxEcOFAS7f-iOhmnUhoK5qahbB8SIvaCfY,165
499
499
  opentrons/util/linal.py,sha256=IlKAP9HkNBBgULeSf4YVwSKHdx9jnCjSr7nvDvlRALg,5753
500
500
  opentrons/util/logging_config.py,sha256=g3TdzDKa1pL_N3eKhRYCdqPaZYe_hpLV-e8llObTcT4,5657
501
501
  opentrons/util/performance_helpers.py,sha256=ew7H8XD20iS6-2TJAzbQeyzStZkkE6PzHt_Adx3wbZQ,5172
502
- opentrons-8.0.0a2.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
503
- opentrons-8.0.0a2.dist-info/METADATA,sha256=8wPRIDTW_pRuroKtVwOpcrbZxYyac3qMDdYWqW6H8Kk,4990
504
- opentrons-8.0.0a2.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
505
- opentrons-8.0.0a2.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
506
- opentrons-8.0.0a2.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
507
- opentrons-8.0.0a2.dist-info/RECORD,,
502
+ opentrons-8.0.0a3.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
503
+ opentrons-8.0.0a3.dist-info/METADATA,sha256=VCwClY3mFwancF9yu2AwyRWSS9pET6Wk42H8mMVPPZA,4990
504
+ opentrons-8.0.0a3.dist-info/WHEEL,sha256=_4XEmVmaBFWtekSGrbfOGNjC2I5lUr0lZSRblBllIFA,109
505
+ opentrons-8.0.0a3.dist-info/entry_points.txt,sha256=fTa6eGCYkvOtv0ov-KVE8LLGetgb35LQLF9x85OWPVw,106
506
+ opentrons-8.0.0a3.dist-info/top_level.txt,sha256=wk6whpbMZdBQpcK0Fg0YVfUGrAgVOFON7oQAhOMGMW8,10
507
+ opentrons-8.0.0a3.dist-info/RECORD,,