Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions docs/contents/specification/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.


21 changes: 15 additions & 6 deletions docs/contents/usage/commands-handling.md
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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."""
Expand Down Expand Up @@ -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):
Expand Down
2 changes: 1 addition & 1 deletion docs/contents/usage/fleet.md
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion docs/contents/usage/single-robot.md
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
3 changes: 2 additions & 1 deletion examples/fleet-connector/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion examples/robot-connector/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion examples/simple-connector/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
3 changes: 2 additions & 1 deletion examples/simple-fleet-connector/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
5 changes: 1 addition & 4 deletions inorbit_connector/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)
Comment thread
b-Tomas marked this conversation as resolved.
from inorbit_connector.logging.logger import setup_logger
from inorbit_connector import metrics as _metrics
Expand Down
26 changes: 0 additions & 26 deletions tests/test_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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(
Expand Down
Loading