From 66a12f1f83c2b15e1dab8239c3f4606f67ee5d79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Badenes?= Date: Tue, 19 May 2026 18:09:28 -0300 Subject: [PATCH] Remove command re-exports from inorbit_connector.connector BREAKING CHANGE: `CommandFailure`, `CommandResultCode`, and `parse_custom_command_args` are no longer re-exported from `inorbit_connector.connector`. Import them from `inorbit_connector.commands` instead. Co-Authored-By: Claude Opus 4.6 --- docs/contents/specification/commands.md | 12 --------- docs/contents/usage/commands-handling.md | 21 +++++++++++----- docs/contents/usage/fleet.md | 2 +- docs/contents/usage/single-robot.md | 2 +- examples/fleet-connector/connector.py | 3 ++- examples/robot-connector/connector.py | 3 ++- examples/simple-connector/connector.py | 3 ++- examples/simple-fleet-connector/connector.py | 3 ++- inorbit_connector/connector.py | 5 +--- tests/test_commands.py | 26 -------------------- 10 files changed, 26 insertions(+), 54 deletions(-) diff --git a/docs/contents/specification/commands.md b/docs/contents/specification/commands.md index 148d395..6064f9c 100644 --- a/docs/contents/specification/commands.md +++ b/docs/contents/specification/commands.md @@ -44,15 +44,3 @@ These classes support type-safe parsing and validation of structured command par - `ExcludeUnsetMixin` changes `model_dump()` default behavior to `exclude_unset=True` (useful when you want to emit only explicitly-provided fields). See [Commands Handling](../usage/commands-handling) for end-to-end usage patterns. - -## Note: re-exports via `inorbit_connector.connector` - -For backwards compatibility, the connector module re-exports: - -- `CommandFailure` -- `CommandResultCode` -- `parse_custom_command_args` - -New code may import from either module, but the canonical definitions live in `inorbit_connector.commands`. - - diff --git a/docs/contents/usage/commands-handling.md b/docs/contents/usage/commands-handling.md index 3cffa52..45a8926 100644 --- a/docs/contents/usage/commands-handling.md +++ b/docs/contents/usage/commands-handling.md @@ -72,7 +72,7 @@ The `CommandFailure` exception can be used to intentionally indicate a failure: Example usage: ```python -from inorbit_connector.connector import CommandResultCode, CommandFailure +from inorbit_connector.commands import CommandResultCode, CommandFailure @override async def _inorbit_robot_command_handler( @@ -120,7 +120,7 @@ For details on how to configure actions with arguments, refer to the Use the helper `parse_custom_command_args()` to turn these into a script name and a parameters dictionary: ```python -from inorbit_connector.connector import ( +from inorbit_connector.commands import ( parse_custom_command_args, CommandResultCode, CommandFailure, @@ -161,8 +161,12 @@ Optionally, you can combine `CommandModel` with `ExcludeUnsetMixin` to exclude u Define a command model by subclassing `CommandModel`: ```python -from inorbit_connector.commands import CommandModel, parse_custom_command_args -from inorbit_connector.connector import CommandResultCode, CommandFailure +from inorbit_connector.commands import ( + CommandModel, + parse_custom_command_args, + CommandResultCode, + CommandFailure, +) class CommandQueueMission(CommandModel): """Command model for queue_mission command.""" @@ -297,8 +301,13 @@ The connector implements the command handler for the `schedule_mission` command ```python from enum import StrEnum -from inorbit_connector.commands import CommandModel, ExcludeUnsetMixin, parse_custom_command_args -from inorbit_connector.connector import CommandResultCode +from inorbit_connector.commands import ( + CommandModel, + ExcludeUnsetMixin, + parse_custom_command_args, + CommandResultCode, + CommandFailure, +) from inorbit_edge.commands import COMMAND_CUSTOM_COMMAND class CommandScheduleMission(ExcludeUnsetMixin, CommandModel): diff --git a/docs/contents/usage/fleet.md b/docs/contents/usage/fleet.md index d94b8ef..18fac22 100644 --- a/docs/contents/usage/fleet.md +++ b/docs/contents/usage/fleet.md @@ -33,7 +33,7 @@ See the [Commands Handling](commands-handling) chapter for more details. Handle commands for a specific robot. This method is automatically registered if `register_custom_command_handler` is True (default). ```python -from inorbit_connector.connector import CommandResultCode, CommandFailure +from inorbit_connector.commands import CommandResultCode, CommandFailure @override async def _inorbit_robot_command_handler( diff --git a/docs/contents/usage/single-robot.md b/docs/contents/usage/single-robot.md index 6408029..24feee3 100644 --- a/docs/contents/usage/single-robot.md +++ b/docs/contents/usage/single-robot.md @@ -83,7 +83,7 @@ See the [Commands Handling](commands-handling) chapter for more details. Handle commands received from InOrbit. This method is automatically registered if `register_custom_command_handler` is True (default). ```python -from inorbit_connector.connector import CommandResultCode, CommandFailure +from inorbit_connector.commands import CommandResultCode, CommandFailure @override async def _inorbit_command_handler( diff --git a/examples/fleet-connector/connector.py b/examples/fleet-connector/connector.py index 133fc5e..b3c8258 100644 --- a/examples/fleet-connector/connector.py +++ b/examples/fleet-connector/connector.py @@ -12,7 +12,8 @@ from typing_extensions import override # InOrbit -from inorbit_connector.connector import CommandResultCode, FleetConnector +from inorbit_connector.commands import CommandResultCode +from inorbit_connector.connector import FleetConnector from inorbit_connector.models import MapConfigTemp # Local diff --git a/examples/robot-connector/connector.py b/examples/robot-connector/connector.py index cf0b9b3..da63466 100644 --- a/examples/robot-connector/connector.py +++ b/examples/robot-connector/connector.py @@ -12,7 +12,8 @@ from typing_extensions import override # InOrbit -from inorbit_connector.connector import CommandResultCode, Connector +from inorbit_connector.commands import CommandResultCode +from inorbit_connector.connector import Connector from inorbit_connector.models import MapConfigTemp # Local diff --git a/examples/simple-connector/connector.py b/examples/simple-connector/connector.py index c9bbe43..42f6f5e 100644 --- a/examples/simple-connector/connector.py +++ b/examples/simple-connector/connector.py @@ -21,7 +21,8 @@ from pydantic import field_validator, BaseModel # InOrbit -from inorbit_connector.connector import CommandResultCode, Connector +from inorbit_connector.commands import CommandResultCode +from inorbit_connector.connector import Connector from inorbit_connector.models import ConnectorConfig from inorbit_connector.utils import read_yaml diff --git a/examples/simple-fleet-connector/connector.py b/examples/simple-fleet-connector/connector.py index 0af7de9..fa2f328 100644 --- a/examples/simple-fleet-connector/connector.py +++ b/examples/simple-fleet-connector/connector.py @@ -21,7 +21,8 @@ from pydantic import field_validator, BaseModel # InOrbit -from inorbit_connector.connector import CommandResultCode, FleetConnector +from inorbit_connector.commands import CommandResultCode +from inorbit_connector.connector import FleetConnector from inorbit_connector.models import ConnectorConfig from inorbit_connector.utils import read_yaml diff --git a/inorbit_connector/connector.py b/inorbit_connector/connector.py index 5ddce43..088f9b8 100644 --- a/inorbit_connector/connector.py +++ b/inorbit_connector/connector.py @@ -51,12 +51,9 @@ PSUTIL_AVAILABLE = False # InOrbit -from inorbit_connector.commands import ( # noqa: F401 - # Re-export command-related functionality for backwards compatibility - # TODO: Remove in the next major release +from inorbit_connector.commands import ( CommandFailure, CommandResultCode, - parse_custom_command_args, ) from inorbit_connector.logging.logger import setup_logger from inorbit_connector import metrics as _metrics diff --git a/tests/test_commands.py b/tests/test_commands.py index f62f94a..8cf10c7 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -15,11 +15,6 @@ ExcludeUnsetMixin, parse_custom_command_args, ) -from inorbit_connector.connector import ( - CommandFailure as ConnectorCommandFailure, - parse_custom_command_args as connector_parse_custom_command_args, -) - # Test models for ExcludeUnsetMixin class ModelWithMixin(ExcludeUnsetMixin, BaseModel): @@ -256,27 +251,6 @@ def test_parse_custom_command_args_protobuf_repeated_odd_length_raises(): parse_custom_command_args([msg.file_name, msg.arg_options]) -# ============================================================================== -# Tests for backwards compatibility -# TODO: Remove in the next major release -# ============================================================================== - - -def test_command_failure_importable_from_connector(): - """Test that CommandFailure can still be imported from connector module.""" - assert CommandFailure is ConnectorCommandFailure - failure = CommandFailure("test", "error") - assert isinstance(failure, ConnectorCommandFailure) - - -def test_parse_custom_command_args_importable_from_connector(): - """Test that parse_custom_command_args can still be imported from connector module.""" - assert parse_custom_command_args is connector_parse_custom_command_args - script, params = parse_custom_command_args(["script.sh", ["x", "1.0"]]) - assert script == "script.sh" - assert params == {"x": "1.0"} - - def test_command_model_works_with_parse_custom_command_args(): """Test that CommandModel works seamlessly with parse_custom_command_args.""" script_name, script_args = parse_custom_command_args(