Skip to content

Commit

Permalink
close files after protocol execution
Browse files Browse the repository at this point in the history
  • Loading branch information
jbleon95 committed Jul 31, 2024
1 parent c047fb2 commit 81dc5ae
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 10 deletions.
14 changes: 14 additions & 0 deletions api/src/opentrons/protocol_api/_parameter_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,20 @@ def initialize_csv_files(
parameter.file_info = FileInfo(id=file_id, name=file_name)
parameter.value = parameter_file

def close_csv_files(self) -> None:
"""Close all file handlers for CSV parameters.
:meta private:
This is intended for Opentrons internal use only and is not a guaranteed API.
"""
for parameter in self._parameters.values():
if (
isinstance(parameter, csv_parameter_definition.CSVParameterDefinition)
and parameter.value is not None
):
parameter.value.close()

def export_parameters_for_analysis(self) -> List[RunTimeParameter]:
"""Exports all parameters into a protocol engine models for reporting in analysis.
Expand Down
1 change: 1 addition & 0 deletions api/src/opentrons/protocol_runner/protocol_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ async def run_func() -> None:
await self._protocol_executor.execute(
protocol=protocol,
context=context,
parameter_context=self._parameter_context,
run_time_parameters_with_overrides=run_time_parameters_with_overrides,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,11 +153,16 @@ class PythonProtocolExecutor:
async def execute(
protocol: Protocol,
context: ProtocolContext,
parameter_context: Optional[ParameterContext],
run_time_parameters_with_overrides: Optional[Parameters],
) -> None:
"""Execute a PAPIv2 protocol with a given ProtocolContext in a child thread."""
await to_thread.run_sync(
run_protocol, protocol, context, run_time_parameters_with_overrides
run_protocol,
protocol,
context,
parameter_context,
run_time_parameters_with_overrides,
)

@staticmethod
Expand Down
28 changes: 19 additions & 9 deletions api/src/opentrons/protocols/execution/execute.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from typing import Optional

from opentrons.protocol_api import ProtocolContext
from opentrons.protocol_api import ProtocolContext, ParameterContext
from opentrons.protocol_api._parameters import Parameters
from opentrons.protocols.execution.execute_python import exec_run
from opentrons.protocols.execution.json_dispatchers import (
Expand All @@ -21,25 +21,35 @@
def run_protocol(
protocol: Protocol,
context: ProtocolContext,
parameter_context: Optional[ParameterContext] = None,
run_time_parameters_with_overrides: Optional[Parameters] = None,
) -> None:
"""Run a protocol.
:param protocol: The :py:class:`.protocols.types.Protocol` to execute
:param context: The protocol context to use.
:param parameter_context: The parameter context to use if running with runtime parameters.
:param run_time_parameters_with_overrides: Run time parameters defined in the protocol,
updated with the run's RTP override values. When we are running either simulate
or execute, this will be None (until RTP is supported in cli commands)
"""
if isinstance(protocol, PythonProtocol):
if protocol.api_level >= APIVersion(2, 0):
exec_run(
proto=protocol,
context=context,
run_time_parameters_with_overrides=run_time_parameters_with_overrides,
)
else:
raise RuntimeError(f"Unsupported python API version: {protocol.api_level}")
try:
if protocol.api_level >= APIVersion(2, 0):
exec_run(
proto=protocol,
context=context,
run_time_parameters_with_overrides=run_time_parameters_with_overrides,
)
else:
raise RuntimeError(
f"Unsupported python API version: {protocol.api_level}"
)
except Exception:
raise
finally:
if parameter_context is not None:
parameter_context.close_csv_files()
else:
if protocol.contents["schemaVersion"] == 3:
ins = execute_json_v3.load_pipettes_from_json(context, protocol.contents)
Expand Down
2 changes: 2 additions & 0 deletions api/tests/opentrons/protocol_runner/test_protocol_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -661,6 +661,7 @@ async def test_load_legacy_python(
await python_protocol_executor.execute(
protocol=legacy_protocol,
context=protocol_context,
parameter_context=python_runner_subject._parameter_context,
run_time_parameters_with_overrides=None,
),
)
Expand Down Expand Up @@ -804,6 +805,7 @@ async def test_load_legacy_json(
await python_protocol_executor.execute(
protocol=legacy_protocol,
context=protocol_context,
parameter_context=None,
run_time_parameters_with_overrides=None,
),
)
Expand Down

0 comments on commit 81dc5ae

Please sign in to comment.