refactor(api): Disallow direct access to .state
through Protocol Engine state views
#17016
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
A trivial refactor to avoid directly accessing private implementation details.
Details
In
opentrons.protocol_engine.state
, in aFooStore
+FooView
+FooState
triad, we generally want to treatFooState
as a private implementation detail ofFooStore
+FooView
. For example, we don't want command implementations to access it, and we especially don't want Python-Protocol-API–level code to access it. One reason is encapsulation, and another reason is to prevent that code from mutatingFooState
, which would be unsafe.However, it looks like we have been exposing
FooState
through an inheritedFooView.state
property. A handful of command implementations and Python Protocol API bits were using it. I think this was accidental? It was certainly surprising to me.This replaces those
FooView.state
accesses with publicFooView
methods and removes access toFooView.state
.Test Plan and Hands on Testing
None needed.
Review requests
Is this what we want?
Risk assessment
Low.